{"id":24888983,"url":"https://github.com/aivmic/event_system","last_synced_at":"2026-04-29T18:34:53.619Z","repository":{"id":262706879,"uuid":"863137856","full_name":"aivmic/Event_system","owner":"aivmic","description":"An ASP.NET Core event management API that allows users to create, view, update, and delete event categories, events, and ratings. ","archived":false,"fork":false,"pushed_at":"2024-12-06T07:03:44.000Z","size":13941,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-08T05:08:20.319Z","etag":null,"topics":["asp-net-core","jwt","react","restful-api","session"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aivmic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-25T19:25:01.000Z","updated_at":"2025-01-07T15:38:21.000Z","dependencies_parsed_at":"2024-11-13T21:36:49.703Z","dependency_job_id":null,"html_url":"https://github.com/aivmic/Event_system","commit_stats":null,"previous_names":["aivmic/event_system"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aivmic/Event_system","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aivmic%2FEvent_system","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aivmic%2FEvent_system/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aivmic%2FEvent_system/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aivmic%2FEvent_system/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aivmic","download_url":"https://codeload.github.com/aivmic/Event_system/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aivmic%2FEvent_system/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32439295,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T18:12:22.909Z","status":"ssl_error","status_checked_at":"2026-04-29T18:11:33.322Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asp-net-core","jwt","react","restful-api","session"],"created_at":"2025-02-01T16:15:52.070Z","updated_at":"2026-04-29T18:34:53.603Z","avatar_url":"https://github.com/aivmic.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Event Management System\n\nAn ASP.NET Core event management API that allows users to create, view, update, and delete event categories, events, and ratings. This system implements role-based authorization using JWT to secure endpoints, ensuring only authenticated users with appropriate roles can perform specific actions. Users can register as event organizers, manage their events, and leave ratings, while admins have control over all resources.\n\n## Features:\n\n    Event Categories: Create and manage different events of categories.\n    Events: Organize events within categories, with options for detailed descriptions, schedules, and pricing.\n    Ratings: Add and manage event ratings.\n    Secure Endpoints: JWT-based authentication with user roles and permissions to restrict actions by role.\n    Scalability: Built to handle future extensions with a modular, RESTful API design.\n\n## Functional Requirements for Event Management System\n\n    User Management\n        Users can register, log in, and log out of the system.\n        Each user must have a unique login name for identification.\n        The system supports two primary roles:\n            Admin: Full control over all resources.\n            User: Manage their events and leave ratings.\n\n    Role-Based Authorization\n        Endpoints are secured with JWT-based authentication.\n        Authorization ensures:\n            Admins have access to all API endpoints.\n            Event Organizers can only access their resources and rate events.\n\nEvent Categories\n\n    Create Event Categories\n        Admins can create new event categories with the following details:\n            Category name (required).\n            Description (optional).\n\n    Delete Event Categories\n        Admins can delete categories that do not have any associated events.\n\nEvents\n\n    Create Events\n        Event Organizers can create events under specific categories.\n        Required fields:\n            Event name.\n            Description.\n            Schedule (start and end times).\n            Pricing information.\n            Associated category.\n\n    View Events\n        All users can view a list of events.\n        Users can filter events by:\n            Category.\n            Name.\n        Event details include:\n            Name, description, schedule, pricing, category, and average rating.\n\n    Update Events\n        Event Organizers can update their events.\n\n    Delete Events\n        Event Organizers can delete their events.\n        Admin can delete events.\n\nRatings\n\n    Add Ratings\n        Authenticated users can leave ratings for events.\n        Required fields:\n            Rating score (1 to 5).\n\n    View Ratings\n        Users can view ratings for a specific event, including:\n            Average rating score.\n\nSecure Endpoints\n\n    Authentication and Authorization\n        JWT tokens are required for accessing any secure endpoint.\n        Tokens are verified for each request to ensure validity and role permissions.\n\n    Role-Based Permissions\n        Admins:\n            Full CRUD access to event categories, events, and ratings.\n        Event Organizers:\n            CRUD access to their events.\n            Create ratings.\n        General Users:\n            View  events and ratings.\n\nScalability and Modularity\n\n    The API design follows RESTful principles to ensure:\n        Easy addition of new features or modules.\n        Clean and modular code structure for scalability.\n    Endpoints should include pagination for retrieving large datasets (e.g., events and ratings).\n    Support for localization and time-zone management for global users.\n\nThis project follows REST principles and can be extended for various event management functionalities.\n\n## UML Deployment diagram.\n\n![image](https://github.com/user-attachments/assets/e86c81ba-4d19-494b-9c14-179efb37d030)\n\n## Conslusions\n\nThe Event Management System built using ASP.NET Core demonstrates a robust and scalable API capable of meeting diverse event management needs. With its modular design and adherence to REST principles, the system offers seamless CRUD operations for event categories, events, and ratings while maintaining high security through JWT-based role authorization.\n\nKey achievements of this project include:\n\n    Secure Access: The implementation of JWT for authentication and role-based authorization ensures that users and admins operate within their respective scopes, enhancing security and accountability.\n    User-Centric Design: Features like event filtering, detailed event views, and user-friendly ratings provide a comprehensive and intuitive experience.\n    Admin Controls: Admin users benefit from full control over the platform, enabling efficient management of resources such as event categories and ratings.\n    Scalability: With RESTful design principles, the API is prepared for future enhancements, such as integrating new modules or scaling for larger datasets.\n\nThis system stands as a versatile and secure solution for event organizers, attendees, and administrators, capable of adapting to growing user needs and evolving requirements in event management.\n\n\n# Images from website\n\nMain page\n\n![image](https://github.com/user-attachments/assets/3313a934-5d39-40f5-a207-2ff0adc620ce)\n\nInventory page\n\n![image](https://github.com/user-attachments/assets/d8271da5-10af-4b9e-b3c1-b1d49335c111)\n\nAdmin panel page\n\n![image](https://github.com/user-attachments/assets/d3842cf1-35ce-45fa-8a59-0cdbda3f9d56)\n\n# Open API documentation\n\nopenapi: 3.0.1\ninfo:\n  title: My API\n  version: v1\npaths:\n  /api/categories:\n    get:\n      summary: Get all categories\n      tags:\n        - Event_system\n      responses:\n        '200':\n          description: A list of categories\n          content:\n            application/json:\n              schema:\n                type: array\n                items:\n                  $ref: '#/components/schemas/CategoryDto'\n              example:\n                - id: 1\n                  name: Music\n                  description: Music events\n                - id: 2\n                  name: Sports\n                  description: Sports events\n        '400':\n          description: Bad request\n        '500':\n          description: Internal server error\n    post:\n      description: Create a new category\n      tags:\n        - category\n      requestBody:\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/CreateCategoryDto'\n            example:\n              name: \"Music\"\n              description: \"Music events and concerts\"\n        required: true\n      responses:\n        '201':\n          description: Category created successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/CategoryDto'\n              example:\n                id: 1\n                name: \"Music\"\n                description: \"Music events and concerts\"\n        '400':\n          description: Invalid input data\n          content:\n            application/json:\n              example:\n                message: \"Bad request due to validation errors\"\n        '422':\n          description: Unprocessable entity - validation failed\n          content:\n            application/json:\n              example:\n                errors:\n                  name: \"Name is required and must be between 3 and 50 characters\"\n                  description: \"Description must be between 5 and 200 characters\"\n\n  '/api/categories/{categoryId}':\n    get:\n      tags:\n        - category\n      summary: Get category by ID\n      parameters:\n        - name: categoryId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n      responses:\n        '200':\n          description: Category details retrieved successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/CategoryDto'\n              example:\n                id: 1\n                name: \"Music\"\n                description: \"Music events and concerts\"\n        '404':\n          description: Category not found\n    put:\n      tags:\n        - category\n      summary: Update a category\n      parameters:\n        - name: categoryId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n      requestBody:\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/UpdateCategoryDto'\n            example:\n              description: \"Updated description for music events\"\n        required: true\n      responses:\n        '200':\n          description: Category updated successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/CategoryDto'\n        '404':\n          description: Category not found\n        '400':\n          description: Invalid input data\n    delete:\n      tags:\n        - category\n      summary: Delete a category\n      parameters:\n        - name: categoryId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n      responses:\n        '200':\n          description: Category deleted successfully\n        '404':\n          description: Category not found\n\n  '/api/categories/{categoryId}/events':\n    get:\n      tags:\n        - event\n      summary: Get all events for a category\n      responses:\n        '200':\n          description: A list of events for the category\n          content:\n            application/json:\n              schema:\n                type: array\n                items:\n                  $ref: '#/components/schemas/EventDto'\n              example:\n                - id: 1\n                  title: \"Concert\"\n                  description: \"A live music concert\"\n                  startDate: \"2024-10-01T19:00:00Z\"\n                  endDate: \"2024-10-01T22:00:00Z\"\n                  price: 50.00\n                - id: 2\n                  title: \"Festival\"\n                  description: \"An outdoor music festival\"\n                  startDate: \"2024-10-05T12:00:00Z\"\n                  endDate: \"2024-10-05T23:00:00Z\"\n                  price: 75.00\n        '404':\n          description: Category not found\n    post:\n      tags:\n        - event\n      summary: Create a new event in a category\n      parameters:\n        - name: categoryId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n      requestBody:\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/CreateEventDto'\n            example:\n              title: \"Concert\"\n              description: \"A live music concert\"\n              startDate: \"2024-10-01T19:00:00Z\"\n              endDate: \"2024-10-01T22:00:00Z\"\n              price: 50.00\n        required: true\n      responses:\n        '201':\n          description: Event created successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/EventDto'\n        '404':\n          description: Category not found\n        '400':\n          description: Invalid input data\n\n  '/api/categories/{categoryId}/events/{eventId}':\n    get:\n      tags:\n        - event\n      summary: Get event by ID for a category\n      parameters:\n        - name: categoryId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n        - name: eventId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n      responses:\n        '200':\n          description: Event details retrieved successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/EventDto'\n              example:\n                id: 1\n                title: \"Concert\"\n                description: \"A live music concert\"\n                startDate: \"2024-10-01T19:00:00Z\"\n                endDate: \"2024-10-01T22:00:00Z\"\n                price: 50.00\n        '404':\n          description: Event not found\n\n  '/api/categories/{categoryId}/events/{eventId}/ratings':\n    get:\n      tags:\n        - rating\n      summary: Get all ratings for an event\n      responses:\n        '200':\n          description: A list of ratings for the event\n          content:\n            application/json:\n              schema:\n                type: array\n                items:\n                  $ref: '#/components/schemas/RatingDto'\n              example:\n                - id: 1\n                  stars: 5\n                - id: 2\n                  stars: 4\n        '404':\n          description: Event not found\n    post:\n      tags:\n        - rating\n      summary: Add a rating to an event\n      parameters:\n        - name: categoryId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n        - name: eventId\n          in: path\n          required: true\n          schema:\n            type: integer\n            format: int32\n      requestBody:\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/CreateRatingDto'\n            example:\n              stars: 5\n        required: true\n      responses:\n        '201':\n          description: Rating created successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/RatingDto'\n        '404':\n          description: Event not found\n  /api/accounts:\n    post:\n      summary: Register a new user\n      tags:\n        - Authentication\n      requestBody:\n        description: User registration details\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/RegisterUserDto'\n            example:\n              userName: \"johndoe\"\n              email: \"johndoe@example.com\"\n              password: \"StrongPassword123\"\n        required: true\n      responses:\n        '201':\n          description: User registered successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/UserDto'\n              example:\n                userId: \"12345\"\n                username: \"johndoe\"\n                email: \"johndoe@example.com\"\n        '422':\n          description: Username already taken or validation failed\n          content:\n            application/json:\n              example:\n                errors:\n                  - \"Username already taken\"\n  /api/login:\n    post:\n      summary: User login\n      tags:\n        - Authentication\n      requestBody:\n        description: User login details\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/LoginDto'\n            example:\n              userName: \"johndoe\"\n              password: \"StrongPassword123\"\n        required: true\n      responses:\n        '200':\n          description: Login successful\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/SuccessfulLoginDto'\n              example:\n                accessToken: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n                refreshToken: \"dGhpc2lzYXJlZnJlc2h0b2tlbg==\"\n        '422':\n          description: Username or password incorrect\n          content:\n            application/json:\n              example:\n                message: \"Username or password was incorrect.\"\n  /api/accessToken:\n    post:\n      summary: Refresh access token\n      tags:\n        - Authentication\n      responses:\n        '200':\n          description: Access token refreshed successfully\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/SuccessfulLoginDto'\n              example:\n                accessToken: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"\n                refreshToken: \"bmV3cmVmcmVzaHRva2VuZGF0YQ==\"\n        '422':\n          description: Refresh token invalid or session expired\n          content:\n            application/json:\n              example:\n                message: \"Invalid refresh token or session expired.\"\n  /api/logout:\n    post:\n      summary: Logout user\n      tags:\n        - Authentication\n      responses:\n        '200':\n          description: Logout successful\n        '422':\n          description: Invalid session or refresh token\n          content:\n            application/json:\n              example:\n                message: \"No valid session found.\"\n          \ncomponents:\n  schemas:\n    CategoryDto:\n      type: object\n      properties:\n        id:\n          type: integer\n          format: int32\n        name:\n          type: string\n          example: Music\n        description:\n          type: string\n          example: \"Music events\"\n      required:\n        - name\n        - description\n\n    CreateCategoryDto:\n      type: object\n      properties:\n        name:\n          type: string\n          minLength: 3\n          maxLength: 50\n          example: \"Music\"\n        description:\n          type: string\n          minLength: 5\n          maxLength: 200\n          example: \"Events related to music\"\n      required:\n        - name\n        - description\n\n    UpdateCategoryDto:\n      type: object\n      properties:\n        description:\n          type: string\n          minLength: 5\n          maxLength: 200\n          example: \"Updated description for category\"\n      required:\n        - description\n\n    EventDto:\n      type: object\n      properties:\n        id:\n          type: integer\n          format: int32\n        title:\n          type: string\n        description:\n          type: string\n        startDate:\n          type: string\n          format: date-time\n        endDate:\n          type: string\n          format: date-time\n        price:\n          type: number\n          format: decimal\n      required:\n        - title\n        - description\n        - startDate\n        - endDate\n        - price\n\n    CreateEventDto:\n      type: object\n      properties:\n        title:\n          type: string\n          minLength: 3\n          maxLength: 50\n          example: \"Concert\"\n        description:\n          type: string\n          minLength: 5\n          maxLength: 200\n          example: \"A live music concert\"\n        startDate:\n          type: string\n          format: date-time\n        endDate:\n          type: string\n          format: date-time\n        price:\n          type: number\n          format: decimal\n      required:\n        - title\n        - description\n        - startDate\n        - endDate\n        - price\n\n    UpdateEventDto:\n      type: object\n      properties:\n        title:\n          type: string\n        description:\n          type: string\n          minLength: 5\n          maxLength: 200\n        startDate:\n          type: string\n          format: date-time\n        endDate:\n          type: string\n          format: date-time\n        price:\n          type: number\n          format: decimal\n        categoryId:\n          type: integer\n          format: int32\n      required:\n        - title\n        - description\n        - startDate\n        - endDate\n        - price\n        - categoryId\n\n    RatingDto:\n      type: object\n      properties:\n        id:\n          type: integer\n          format: int32\n        stars:\n          type: integer\n          format: int32\n          minimum: 1\n          maximum: 5\n      required:\n        - stars\n\n    CreateRatingDto:\n      type: object\n      properties:\n        stars:\n          type: integer\n          format: int32\n          minimum: 1\n          maximum: 5\n      required:\n        - stars\n\n    UpdateRatingDto:\n      type: object\n      properties:\n        stars:\n          type: integer\n          format: int32\n          minimum: 1\n          maximum: 5\n      required:\n        - stars\n\n    RegisterUserDto:\n      type: object\n      properties:\n        userName:\n          type: string\n        email:\n          type: string\n          format: email\n        password:\n          type: string\n      required:\n        - userName\n        - email\n        - password\n    UserDto:\n      type: object\n      properties:\n        userId:\n          type: string\n        username:\n          type: string\n        email:\n          type: string\n          format: email\n    LoginDto:\n      type: object\n      properties:\n        userName:\n          type: string\n        password:\n          type: string\n      required:\n        - userName\n        - password\n    SuccessfulLoginDto:\n      type: object\n      properties:\n        accessToken:\n          type: string\n        refreshToken:\n          type: string\n      required:\n        - accessToken\n        - refreshToken\n\n  responses:\n    singleTopic:\n      description: A category\n      content:\n        application/json:\n          schema:\n            type: object\n            items:\n              $ref: \"#/components/schemas/topic\"\n          example:\n            - id: 1\n              title: \"OpenAPI Best Practices\"\n              description: \"Discussion about best practices when using OpenAPI\"\n    unprocessableEntity:\n      description: Unprocessable entity response\n      content:\n        application/problem+json:\n          schema:\n            type: object\n            items:\n              $ref: \"#/components/schemas/problemDetails\"\n          example:\n            type: \"https://tools.ietf.org/html/rfc4918#section-11.2\"\n            title: \"Unprocessable Entity\"\n            status: 422\n            errors:\n              Name:\n                - \"'Name' must not be empty.\"\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faivmic%2Fevent_system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faivmic%2Fevent_system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faivmic%2Fevent_system/lists"}