{"id":18390288,"url":"https://github.com/nnamanx/skylink","last_synced_at":"2026-05-07T00:34:58.939Z","repository":{"id":216175797,"uuid":"716926628","full_name":"nnamanx/SkyLink","owner":"nnamanx","description":"This is a comprehensive digital solution designed to manage various aspects of airline operations, including flight and airplane management, ticket booking, and user authentication. It's structured as a microservices architecture, consisting of distinct services for user management. ","archived":false,"fork":false,"pushed_at":"2024-01-10T16:39:12.000Z","size":215,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-12T06:57:41.646Z","etag":null,"topics":["error-handling","gradle","jwt","microservices","rest-api","spring-boot","spring-security","validation"],"latest_commit_sha":null,"homepage":"","language":"Java","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/nnamanx.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":"security-ms/.gitignore","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-10T07:03:14.000Z","updated_at":"2024-10-27T17:46:18.000Z","dependencies_parsed_at":"2024-11-06T01:59:47.644Z","dependency_job_id":"d0730553-a35b-4b6e-b126-933db30469a7","html_url":"https://github.com/nnamanx/SkyLink","commit_stats":null,"previous_names":["nnamanx/skylink"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnamanx%2FSkyLink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnamanx%2FSkyLink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnamanx%2FSkyLink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nnamanx%2FSkyLink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nnamanx","download_url":"https://codeload.github.com/nnamanx/SkyLink/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248530580,"owners_count":21119595,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["error-handling","gradle","jwt","microservices","rest-api","spring-boot","spring-security","validation"],"created_at":"2024-11-06T01:47:02.502Z","updated_at":"2026-05-07T00:34:58.914Z","avatar_url":"https://github.com/nnamanx.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SKYLINK Airline Management\n\nSkylink Airline Management is a software solution that digitally handles issues such as purchasing flight tickets and hotel reservations.\n\n\u003cimg width=\"1355\" alt=\"backend\" src=\"https://github.com/nnamanx/SkyLink/assets/88698561/2d5423f6-eba2-4c4d-a0f3-cfc44cf8774d\"\u003e\n\n## User Microservice (user-ms)\n\n### Authentication, Authorization, and Registration Service\n\n- **Endpoint:** `/user-ms/authentication`\n    - **Method:** POST\n    - **Access:** Permit all\n    - **Description:** Allows users to log in.\n    - **Request Body:**\n      ```json\n      { \"username\": \"\", \"password\": \"\" }\n      ```\n    - **Response Model:**\n      ```json\n      { \"access-token\": \"\", \"refresh-token\": \"\" }\n      ```\n\n- **Endpoint:** `/user-ms/renew-password/{username}`\n    - **Method:** POST\n    - **Access:** Permit all\n    - **Description:** Initiates a password reset by sending a request to the user's email.\n    - **Response Model:**\n      ```json\n      { \"message\": \"\" }\n      ```\n    - **Request Parameter:**\n      ```\n      token=\n      ```\n\n- **Endpoint:** `/user-ms/reset-password`\n    - **Method:** POST\n    - **Access:** Permit all\n    - **Description:** Sets a new password.\n    - **Request Body:**\n      ```json\n      { \"newPassword\": \"\", \"repeatPassword\": \"\" }\n      ```\n    - **Response Body:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/user-ms/refresh-token`\n    - **Method:** GET\n    - **Access:** Authenticated\n    - **Description:** Refreshes the user's token.\n    - **Request Header:**\n      ```\n      Authentication: User-id:\n      ```\n    - **Response Body:**\n      ```json\n      { \"access-token\": \"\", \"refresh-token\": \"\" }\n      ```\n\n- **Endpoint:** `/user-ms/registration`\n    - **Method:** POST\n    - **Access:** Permit all\n    - **Description:** Allows users to create an account, with authentication enabled only after email confirmation.\n    - **Request Body:**\n      ```json\n      { \"username\": \"\", \"password\": \"\", \"phoneNumber\": \"\", \"email\": \"\", \"birthdate\": \"\", \"paspFin\": \"\", \"paspSeria\": \"\" }\n      ```\n    - **Response Body:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/user-ms/confirmation`\n    - **Method:** GET\n    - **Access:** Permit all\n    - **Description:** Endpoint for confirming the account after registering via email.\n    - **Request Parameter:**\n      ```\n      token=\n      ```\n    - **Response Body:**\n      ```json\n      { \"isConfirmed\": \"\" }\n      ```\n\n- **Endpoint:** `/user-ms/admin/registration`\n    - **Method:** POST\n    - **Access:** Admin\n    - **Description:** Allows adding a new admin, who must set a password by clicking on the link sent to their email.\n    - **Request Body:**\n      ```json\n      { \"username\": \"\", \"password\": \"\", \"phoneNumber\": \"\", \"email\": \"\", \"birthdate\": \"\", \"paspFin\": \"\", \"paspSeria\": \"\" }\n      ```\n    - **Request Header:**\n      ```\n      Authentication: User-id:\n      ```\n\n## Booking Microservice (booking-ms)\n\n### Service for Booking Tickets, Hotel Reservations, etc.\n\n- **Endpoint:** `/booking-ms/booking/tickets`\n    - **Method:** GET\n    - **Access:** Authenticated\n    - **Description:** Displays all tickets purchased by the user.\n    - **Response Body:**\n      ```json\n      [{ \"ticketId\": \"\", \"firstName\": \"\", \"lastName\": \"\", \"from\": \"\", \"to\": \"\", \"departureDateTime\": \"\", \"arrivalDateTime\": \"\", \"price\": \"\", \"flightId\": \"\" }]\n      ```\n\n- **Endpoint:** `/booking-ms/booking/tickets/{ticketId}`\n    - **Method:** GET\n    - **Access:** Authenticated\n    - **Description:** Allows the user to view details of a purchased ticket.\n    - **Response Body:**\n      ```json\n      { \"ticketId\": \"\", \"firstName\": \"\", \"lastName\": \"\", \"from\": \"\", \"to\": \"\", \"departureDateTime\": \"\", \"arrivalDateTime\": \"\", \"price\": \"\", \"flightId\": \"\" }\n      ```\n\n- **Endpoint:** `/booking-ms/booking/tickets/{flightId}`\n    - **Method:** POST\n    - **Access:** Authenticated\n    - **Description:** Allows the user to purchase a ticket for the selected flight. Produces information to Kafka with formatted ticketId. The Notification Microservice should consume this information and send the PDF as an email.\n    - **Response Body:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/booking-ms/booking/tickets/{ticketId}/pdf`\n    - **Method:** GET\n    - **Access:** Authenticated\n    - **Description:** Allows the user to download the purchased ticket in PDF format.\n    - **Response:** PDF file\n\n## Flight Microservice (flight-ms)\n\n### Service for Managing Flights\n\n- **Endpoint:** `/flight-ms/flights`\n    - **Method:** POST\n    - **Access:** Admin\n    - **Description:** Adds a new flight.\n    - **Request Model:**\n      ```json\n      { \"fromAirlineId\": \"\", \"toAirlineId\": \"\", \"departureDateTime\": \"\", \"arrivalDateTime\": \"\", \"initialPrice\": \"\", \"airplaneId\": \"\" }\n      ```\n    - **Response Model:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/flight-ms/flights`\n    - **Method:** GET\n    - **Access:** Permit all\n    - **Description:** Displays all upcoming and available flights. Provides filtering options.\n    - **Response Model:**\n      ```json\n      [{ \"From\": \"\", \"To\": \"\", \"DepartureDateTime\": \"\", \"ArrivalDateTime\": \"\", \"price\": \"\" }]\n      ```\n\n- **Endpoint:** `/flight-ms/flights/{id}`\n    - **Method:** GET\n    - **Access:** Permit all\n    - **Description:** Displays details of the selected flight.\n    - **Response Model:**\n      ```json\n      { \"From\": \"\", \"To\": \"\", \"DepartureDateTime\": \"\", \"ArrivalDateTime\": \"\", \"price\": \"\" }\n      ```\n\n- **Endpoint:** `/flight-ms/flights/{id}`\n    - **Method:** DELETE\n    - **Access:** Admin\n    - **Description:** Deactivates the selected flight.\n    - **Response Model:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/flight-ms/flights/{id}`\n    - **Method:** PUT\n    - **Access:** Admin\n    - **Description:** Allows the admin to modify details of the selected flight.\n    - **Request Model:**\n      ```json\n      { \"fromAirlineId\": \"\", \"toAirlineId\": \"\", \"departureDateTime\": \"\", \"arrivalDateTime\": \"\", \"initialPrice\": \"\", \"airplaneId\": \"\" }\n      ```\n    - **Response Model:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **\n\nEndpoint:** `/flight-ms/flights/{id}`\n- **Method:** PATCH\n- **Access:** Admin\n- **Description:** Allows the admin to change the `available`, `isFly`, and other fields of the selected flight.\n- **Request Model:**\n  ```json\n  { \"isFly\": \"\" }\n  ```\n- **Response Model:**\n  ```json\n  { \"message\": \"\" }\n  ```\n\n## Airplane Microservice (airplane-ms)\n\n### Service for Managing Airplanes\n\n- **Endpoint:** `/airplane-ms/airplanes`\n    - **Method:** GET\n    - **Access:** Admin\n    - **Description:** Displays all airplanes. Can filter to show only available or all airplanes.\n    - **Request Parameter:**\n      ```\n      busy=\n      ```\n    - **Response Body:**\n      ```json\n      [{ \"Id\": \"\", \"Name\": \"\", \"Max seats\": \"\", \"Max speed\": \"\" }]\n      ```\n\n- **Endpoint:** `/airplane-ms/airplanes/{id}`\n    - **Method:** GET\n    - **Access:** Admin\n    - **Description:** Displays details of the selected airplane.\n    - **Response Body:**\n      ```json\n      { \"Name\": \"\", \"Max seats\": \"\", \"Max speed\": \"\" }\n      ```\n\n- **Endpoint:** `/airplane-ms/airplanes`\n    - **Method:** POST\n    - **Access:** Admin\n    - **Description:** Adds a new airplane.\n    - **Request Body:**\n      ```json\n      { \"Name\": \"\", \"Max seats\": \"\", \"Max speed\": \"\" }\n      ```\n    - **Response Body:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/airplane-ms/airplanes`\n    - **Method:** PUT\n    - **Access:** Admin\n    - **Description:** Allows the admin to update details of the selected airplane.\n    - **Request Model:**\n      ```json\n      { \"Id\": \"\", \"Name\": \"\", \"Max seats\": \"\", \"Max speed\": \"\" }\n      ```\n    - **Response Model:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/airplane-ms/airplanes/{id}`\n    - **Method:** DELETE\n    - **Access:** Admin\n    - **Description:** Deletes the selected airplane from the database.\n    - **Response Model:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n- **Endpoint:** `/airplane-ms/airplanes/{id}`\n    - **Method:** PATCH\n    - **Access:** Admin\n    - **Description:** Changes the `isBusy` field of the selected airplane.\n    - **Request Parameter:**\n      ```\n      IsBusy=\n      ```\n    - **Response Body:**\n      ```json\n      { \"message\": \"\" }\n      ```\n\n## Notification Microservice (notification-ms)\n\nNotification microservice consumes information produced by other services (e.g., booking-ms) from Kafka and sends emails.\n\n## Common Microservice (common-ms)\n\n### Common Endpoints and Utilities\n\n- **Endpoint:** `/common-ms/airlines`\n    - **Method:** GET\n    - **Access:** Admin\n    - **Description:** Retrieves a list of airlines for use in dropdowns, filtering available based on optional parameters.\n    - **Request Parameter:**\n      ```\n      country: airline:\n      ```\n    - **Response Body:**\n      ```json\n      [ { \"id\": \"\", \"country\": \"\", \"name\": \"\", \"airline\": \"\" }, { \"id\": \"\", \"country\": \"\", \"name\": \"\", \"airline\": \"\" } ]\n      ```\n\n- **Endpoint:** `/common-ms/airlines/{id}`\n    - **Method:** GET\n    - **Access:** Admin\n    - **Description:** Retrieves details of the selected airline.\n    - **Response Body:**\n      ```json\n      { \"id\": \"\", \"country\": \"\", \"name\": \"\", \"airline\": \"\" }\n      ```\n\n## Libraries (Libs)\n\n### Libraries and Utilities\n\n- `common-exception`: Handles common exceptions for all services.\n- `common-email`: Provides services and objects for sending emails.\n- `common-notification`: Handles the production and consumption of notification information.\n- `common-security`: Implements general security logic, requiring Authentication header and User-id for authenticated endpoints.\n- `common-file-generator`: Provides PDF generation utilities for creating and sending tickets in PDF format.\n\n## Common Information\n\n- Implement validation on request models.\n- Include the `Authentication` header and `User-id` in authenticated endpoint headers.\n- Customize response codes and error messages for a better user experience.\n- Address potential race conditions when multiple users access the same resources concurrently.\n- Any additional common functionalities can be added to the `common-ms` service.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnnamanx%2Fskylink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnnamanx%2Fskylink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnnamanx%2Fskylink/lists"}