{"id":15170743,"url":"https://github.com/eunoia-scu/eunoia-api","last_synced_at":"2026-02-15T23:02:16.562Z","repository":{"id":248921511,"uuid":"830185214","full_name":"Eunoia-SCU/Eunoia-API","owner":"Eunoia-SCU","description":"Graduation Project","archived":false,"fork":false,"pushed_at":"2025-04-14T15:57:45.000Z","size":127,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-08T08:56:11.920Z","etag":null,"topics":["cloudinary","ec2","expressjs","mongodb","mongoose","multer","nodejs","nodemailer","paymob","pug","redis","stripe"],"latest_commit_sha":null,"homepage":"http://ec2-3-129-5-59.us-east-2.compute.amazonaws.com/api/v1/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Eunoia-SCU.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-17T19:09:02.000Z","updated_at":"2025-04-14T15:57:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"76af51c4-725a-4875-846b-fe9bc363716e","html_url":"https://github.com/Eunoia-SCU/Eunoia-API","commit_stats":{"total_commits":2,"total_committers":1,"mean_commits":2.0,"dds":0.0,"last_synced_commit":"b3f392560cc63d6f2c039dd41f40e63bebec9603"},"previous_names":["eunoia-scu/eunoia-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Eunoia-SCU/Eunoia-API","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eunoia-SCU%2FEunoia-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eunoia-SCU%2FEunoia-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eunoia-SCU%2FEunoia-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eunoia-SCU%2FEunoia-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Eunoia-SCU","download_url":"https://codeload.github.com/Eunoia-SCU/Eunoia-API/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Eunoia-SCU%2FEunoia-API/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29491998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"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":["cloudinary","ec2","expressjs","mongodb","mongoose","multer","nodejs","nodemailer","paymob","pug","redis","stripe"],"created_at":"2024-09-27T08:22:42.339Z","updated_at":"2026-02-15T23:02:16.525Z","avatar_url":"https://github.com/Eunoia-SCU.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003cimg href=\"\u003e\n    \u003ca href=\"#/\"\u003e\u003cimg src=\"https://github.com/alin00r/Eunoia-Backend/blob/authentication/public/img/logo/logo.png\" alt=\"Eunoia\" width=\"200\"\u003e\u003c/a\u003e\n  \u003cbr\u003e\n  Eunoia API\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n# 💫 Eunoia Project (Graduation Project)\n\nEunoia simplifies event planning by integrating services like venues, catering, and photography into a single platform. Accessible via app and web, it features AI-powered recommendations and secure booking.\n\n## 🌟 Eunoia API\n\nThis project offers APIs for efficient event planning, enabling access to service provider directories, booking services, and user account management. Built with Express.js and tested with Jest, it includes AI-powered recommendations and secure transactions to enhance user experience.\n\n## 📋 Table of Contents\n\n- [🌟 Eunoia API](#-eunoia-api)\n  - [📋 Table of Contents](#-table-of-contents)\n  - [🚀 Getting Started](#-getting-started)\n    - [🔧 Prerequisites](#-prerequisites)\n    - [📦 Installation](#-installation)\n    - [🖥️ Running the Server](#️-running-the-server)\n    - [🧪 Running Tests](#-running-tests)\n  - [📚 API Documentation](#-api-documentation)\n    - [👥 Authentication Endpoints](#-authentication-endpoints)\n    - [📊 Services Endpoints](#-services-endpoints)\n    - [👌 API Complete Docs](#-api-complete-Docs)\n  - [🗂️ Project Structure](#️-project-structure)\n  - [📜 License](#-license)\n\n## 🚀 Getting Started\n\n### 🔧 Prerequisites\n\nEnsure you have the following installed:\n\n- Node.js\n- npm or yarn\n\n### 📦 Installation\n\n1. Clone the repository:\n\n   ```bash\n   git clone https://github.com/your-username/Eunoia-Backend.git\n   cd Eunoia-Backend\n   ```\n\n2. Install dependencies:\n   ```bash\n   npm install\n   # or\n   yarn install\n   ```\n\n### 🖥️ Running the Server\n\n1. Start the development server :\n\n   ```bash\n   npm run dev\n   # or\n   yarn dev\n   ```\n\n2. The server should now be running at `http://localhost:3000`.\n\n### 🧪 Running Tests\n\nTo run the test suite:\n\n```bash\nnpm test\n# or\nyarn test\n```\n\n## 📚 API Documentation\n\n### 👥 Authentication Endpoints\n\n- **Endpoint:** `api/v1/auth/register`\n- **Method:** `Post`\n- **Body:**\n\n  - `name` (string): user name\n  - `email` (string): user email\n  - `password` (string): user password\n  - `passwordConfirm` (string): user confirm password\n  - `role` (string): user role (user/serviceProvider)\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://localhost:3000/api/v1/auth/register\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  [\n    {\n      \"status\": \"success\",\n      \"token\": \"JWT TOKEN\"\n    }\n  ]\n  ```\n\n- **Endpoint:** `api/v1/auth/login`\n- **Method:** `Post`\n- **Body:**\n\n  - `email` (string): user email\n  - `password` (string): user password\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://localhost:3000/api/v1/auth/login\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  [\n    {\n      \"status\": \"success\",\n      \"token\": \"JWT TOKEN\"\n    }\n  ]\n  ```\n\n- **Endpoint:** `api/v1/auth/logout`\n- **Method:** `Post`\n- **Body:**\n\n  - empty\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://localhost:3000/api/v1/auth/logout\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  [\n    {\n      \"status\": \"success\"\n    }\n  ]\n  ```\n\n- **Endpoint:** `api/v1/auth/forgotPassword`\n- **Method:** `Post`\n- **Body:**\n\n  - `email` (string): user email\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://localhost:3000/api/v1/auth/forgotPassword\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  [\n    {\n      \"status\": \"Success\",\n      \"message\": \"Reset code sent to email\"\n    }\n  ]\n  ```\n\n- **Endpoint:** `api/v1/auth/forgotPassword`\n- **Method:** `Post`\n- **Body:**\n\n  - `otp` (number): The code sent to the email\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://localhost:3000/api/v1/auth/verfiyCode\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  [\n    {\n      \"status\": \"Success\",\n      \"messgae\": \"Your Code has been successfully verified. You can now proceed to reset your password.\"\n    }\n  ]\n  ```\n\n- **Endpoint:** `api/v1/auth/resetPassword`\n- **Method:** `Patch`\n- **Body:**\n\n  - `email` (string): your email\n  - `newPassword` (string): your new password\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://localhost:3000/api/v1/auth/resetPassword\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  [\n    {\n      \"status\": \"success\",\n      \"token\": \"JWT TOKEN\"\n    }\n  ]\n  ```\n\n### 📊 Services Endpoints\n\n- **Endpoint:** `api/v1/services`\n- **Method:** `POST`\n- **Body:**\n\n  - `businessName` (String)\n  - `about` (string)\n  - `location` (string)\n  - `businessCategory` (string)\n  - `phoneNumber` (number)\n  - `avatar` (FormData)\n  - `images` (FormData):array of images\n  - `imageCover`(FormData)\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://127.0.0.1:3000/api/v1/services/\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  {\n    \"status\": \"success\",\n    \"message\": \"Service Profile created successfully\",\n    \"data\": {\n      \"_id\": \"660878526adb0cb6ece59904\",\n      \"businessName\": \"The Garden\",\n      \"about\": \"The Garden features three main spaces for your wedding day: a Rooftop Terrace with a picturesque views of Bryant Park, the Grill Dining Room, and the South Garden. The terrace is best suited for your wedding ceremony and can accommodate up to 220 guests. The restaurant can host a seated dinner for up to 220 guests. For couples interested in booking the full venue, up to 1,000 guests can be serviced.\",\n      \"location\": \"Ismailia\",\n      \"businessCategory\": \"Venues\",\n      \"phoneNumber\": \"01234567890\",\n      \"avatar\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1711831118/avatar.jpg\",\n      \"imageCover\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714673495/CoverImages/serviceProfile/cb13896a-1d0c-4d66-b7e0-9334a9c4cc37.jpg\",\n      \"images\": [\n        \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714669784/Albums/serviceProfile/Albums0-10974f93-dd59-435f-9c34-a15e14e0dcff.jpg\"\n      ],\n      \"owner\": \"660860be6adb0cb6ece598fe\",\n      \"createdAt\": \"2024-03-30T20:38:43.001Z\",\n      \"updatedAt\": \"2024-06-21T13:32:59.867Z\",\n      \"ratingsAverage\": 4,\n      \"ratingsQuantity\": 2,\n      \"id\": \"660878526adb0cb6ece59904\"\n    }\n  }\n  ```\n\n- **Endpoint:** `api/v1/services`\n- **Method:** `GET`\n- **Query Parameters:**\n\n  - `page` (number): the number of page you want to return.\n  - `limit` (number): the number of document you want to return in the page.\n  - `sort` (string): (ratingsQuantity|ratingsAverage|updatedAt|updatedAt)\n  - `limitFields` (string): name of field you want to return in the response (\\_id|businessName|about|location|businessCategory|phoneNumber|images|owner|ratingsQuantity|ratingsAverage)\n  - `ratingsAverage` return the services which have ratingsAverage[gte(greater than or equal) || gt(greater than) || ls(less than ) || lte(less than or equal) ]:(number)\n  - `sort` (field name): sort by filed name like ratingsAverage or ratingsquantity\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://127.0.0.1:3000/api/v1/services/?page=2\u0026limit=5\u0026ratingsAverage[gte]=4.3\u0026filter=DJs\u0026sort=createdAt\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  {\n    \"results\": 7,\n    \"paginationResult\": {\n      \"currntPage\": 1,\n      \"limit\": 50,\n      \"numberOfPages\": 1\n    },\n    \"data\": [\n      {\n        \"_id\": \"660878526adb0cb6ece59904\",\n        \"businessName\": \"The Garden\",\n        \"about\": \"The Garden features three main spaces for your wedding day: a Rooftop Terrace with a picturesque views of Bryant Park, the Grill Dining Room, and the South Garden. The terrace is best suited for your wedding ceremony and can accommodate up to 220 guests. The restaurant can host a seated dinner for up to 220 guests. For couples interested in booking the full venue, up to 1,000 guests can be serviced.\",\n        \"location\": \"Ismailia\",\n        \"businessCategory\": \"Venues\",\n        \"phoneNumber\": \"01234567890\",\n        \"avatar\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1711831118/avatar.jpg\",\n        \"imageCover\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714673495/CoverImages/serviceProfile/cb13896a-1d0c-4d66-b7e0-9334a9c4cc37.jpg\",\n        \"images\": [\n          \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714669784/Albums/serviceProfile/Albums0-10974f93-dd59-435f-9c34-a15e14e0dcff.jpg\"\n        ],\n        \"owner\": \"660860be6adb0cb6ece598fe\",\n        \"createdAt\": \"2024-03-30T20:38:43.001Z\",\n        \"updatedAt\": \"2024-06-21T13:32:59.867Z\",\n        \"ratingsAverage\": 4,\n        \"ratingsQuantity\": 2,\n        \"id\": \"660878526adb0cb6ece59904\"\n      }\n      // more services ...\n    ]\n  }\n  ```\n\n- **Endpoint:** `api/v1/services/:id`\n- **Method:** `GET`\n- **Query params:**\n\n  - `id` (mongoID): mongoId of exist document\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://127.0.0.1:3000/api/v1/services/660878526adb0cb6ece59904\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  {\n    \"data\": {\n      \"_id\": \"660878526adb0cb6ece59904\",\n      \"businessName\": \"The Garden\",\n      \"about\": \"The Garden features three main spaces for your wedding day: a Rooftop Terrace with a picturesque views of Bryant Park, the Grill Dining Room, and the South Garden. The terrace is best suited for your wedding ceremony and can accommodate up to 220 guests. The restaurant can host a seated dinner for up to 220 guests. For couples interested in booking the full venue, up to 1,000 guests can be serviced.\",\n      \"location\": \"Ismailia\",\n      \"businessCategory\": \"Venues\",\n      \"phoneNumber\": \"01234567890\",\n      \"avatar\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1711831118/avatar.jpg\",\n      \"imageCover\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714673495/CoverImages/serviceProfile/cb13896a-1d0c-4d66-b7e0-9334a9c4cc37.jpg\",\n      \"images\": [\n        \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714669784/Albums/serviceProfile/Albums0-10974f93-dd59-435f-9c34-a15e14e0dcff.jpg\",\n        \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714673192/Albums/serviceProfile/Albums0-2e6d3f3e-c654-4fc2-a0f0-64ab474406dc.jpg\"\n      ],\n      \"owner\": \"660860be6adb0cb6ece598fe\",\n      \"createdAt\": \"2024-03-30T20:38:43.001Z\",\n      \"updatedAt\": \"2024-06-21T13:32:59.867Z\",\n      \"__v\": 5,\n      \"ratingsAverage\": 4,\n      \"ratingsQuantity\": 2,\n      \"reviews\": [\n        {\n          \"_id\": \"662aa6131bef1b61ca7c3e8e\",\n          \"title\": \"amazing service\\n\",\n          \"ratings\": 3,\n          \"user\": {\n            \"_id\": \"6612f57ad4ff84c0ed4acced\",\n            \"name\": \"omar \",\n            \"avatar\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1713651559/avatar.jpg\"\n          },\n          \"service\": \"660878526adb0cb6ece59904\",\n          \"createdAt\": \"2024-04-25T18:50:59.017Z\",\n          \"updatedAt\": \"2024-04-25T18:50:59.017Z\",\n          \"__v\": 0\n        },\n        {\n          \"_id\": \"6675810af4e1130ec348b254\",\n          \"title\": \"\",\n          \"ratings\": 5,\n          \"user\": {\n            \"_id\": \"6674a92b8217a177b6921aa0\",\n            \"name\": \"Ali Nour\",\n            \"avatar\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1718922031/ProfilePicture/avatar/7219325b-667c-47db-a7f1-b25128955cc0.jpg\"\n          },\n          \"service\": \"660878526adb0cb6ece59904\",\n          \"createdAt\": \"2024-06-21T13:32:58.550Z\",\n          \"updatedAt\": \"2024-06-21T13:32:58.550Z\",\n          \"__v\": 0\n        }\n      ],\n      \"packages\": [],\n      \"id\": \"660878526adb0cb6ece59904\"\n    }\n  }\n  ```\n\n- **Endpoint:** `api/v1/services/:id`\n- **Method:** `DELETE`\n- **Query params:**\n\n  - `id` (mongoID): mongoId of exist document (You should be the owner of the service to delete it)\n\n- **Example Request:**\n\n  ```bash\n  curl \"http://127.0.0.1:3000/api/v1/services/660878526adb0cb6ece59904\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  {}\n  ```\n\n- **Endpoint:** `api/v1/services/:id`\n- **Method:** `PATCH`\n- **Query params:**\n\n  - `id` (mongoID): mongoId of exist document (You should be the owner of the service to delete it)\n\n- **Body:**\n- `businessName`:(String)\n- `about`:(String)\n- `images`:(formData)\n- `location`:(String)\n- `businessCategory`:(String)\n- `phoneNumber`:(number)\n- `avatar`:(formData)\n- `imageCover`:(formData)\n- `latitude`:(number)\n- `longitude`:(number)\n- **Example Request:**\n\n  ```bash\n  curl \"http://127.0.0.1:3000/api/v1/services/660878526adb0cb6ece59904\"\n  ```\n\n- **Example Response:**\n\n  ```json\n  {\n    \"data\": {\n      \"_id\": \"660878526adb0cb6ece59904\",\n      \"businessName\": \"The Garden\",\n      \"about\": \"The Garden features three main spaces for your wedding day: a Rooftop Terrace with a picturesque views of Bryant Park, the Grill Dining Room, and the South Garden. The terrace is best suited for your wedding ceremony and can accommodate up to 220 guests. The restaurant can host a seated dinner for up to 220 guests. For couples interested in booking the full venue, up to 1,000 guests can be serviced.\",\n      \"location\": \"Ismailia\",\n      \"businessCategory\": \"Venues\",\n      \"phoneNumber\": \"01234567890\",\n      \"avatar\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1711831118/avatar.jpg\",\n      \"imageCover\": \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714673495/CoverImages/serviceProfile/cb13896a-1d0c-4d66-b7e0-9334a9c4cc37.jpg\",\n      \"images\": [\n        \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714669784/Albums/serviceProfile/Albums0-10974f93-dd59-435f-9c34-a15e14e0dcff.jpg\",\n        \"http://res.cloudinary.com/dbrywi5aw/image/upload/v1714673192/Albums/serviceProfile/Albums0-2e6d3f3e-c654-4fc2-a0f0-64ab474406dc.jpg\"\n      ],\n      \"__v\": 5,\n      \"ratingsAverage\": 4,\n      \"ratingsQuantity\": 2\n    }\n  }\n  ```\n\n### 👌 API Complete Docs\n\n_You can see all API docs [here](http://ec2-3-129-5-59.us-east-2.compute.amazonaws.com/api/v1/)_\n\n```\n- Postman Docs will be avaliable soon.\n```\n\n## 🗂️ Project Structure\n\n```\nHere's the project structure based on the provided image:\n\neunoia-backend/\n├── **tests**/\n│ ├── service.test.js\n├── src/\n│ ├── config/\n│ │ ├── db.js\n│ ├── controllers/\n│ │ ├── authController.js\n│ │ ├── errorController.js\n│ │ ├── handelFactory.js\n│ │ ├── orderController.js\n│ │ ├── reviewController.js\n│ │ ├── serviceController.js\n│ │ ├── userController.js\n│ │ ├── packageController.js\n│ │ ├── requestController.js\n│ │ ├── wishlistController.js\n│ ├── middlewares/\n│ │ ├── uploadImageMiddleware.js\n│ │ ├── emailMiddleware.js\n│ │ ├── validatorMiddleware.js\n│ │ ├── verifyPaymobRequest.js\n│ ├── models/\n│ │ ├── orderModel.js\n│ │ ├── packageModel.js\n│ │ ├── requestModel.js\n│ │ ├── reviewModel.js\n│ │ ├── serviceModel.js\n│ │ ├── userModel.js\n│ ├── routes/\n│ │ ├── authRoutes.js\n│ │ ├── orderRoutes.js\n│ │ ├── packageRoutes.js\n│ │ ├── requestRoutes.js\n│ │ ├── reviewRoutes.js\n│ │ ├── serviceRoutes.js\n│ │ ├── userRoutes.js\n│ │ ├── welcomeRoutes.js\n│ │ ├── wishlistRoutes.js\n│ ├── utils/\n│ │ ├── paymob/\n│ │ │ ├── authenticate.js\n│ │ │ ├── checkout.js\n│ │ ├── validators/\n│ │ │ ├── packageValidator.js\n│ │ │ ├── requestValidator.js\n│ │ │ ├── reviewValidator.js\n│ │ │ ├── serviceValidator.js\n│ │ ├── apiFeatures.js\n│ │ ├── appError.js\n│ │ ├── catchAsync.js\n│ │ ├── cloudinary.js\n│ │ ├── createToken.js\n│ │ ├── logger.js\n│ │ ├── paymob.js\n│ │ ├── redis.js\n│ └── app.js\n│ └── server.js\n├── views/\n│ ├── email/\n│ │ ├── \\_style.pug\n│ │ ├── baseEmail.pug\n│ │ ├── passwordChanged.pug\n│ │ ├── passwordReset.pug\n│ │ ├── requestAccepted.pug\n│ │ ├── requestDecline.pug\n│ │ ├── welcome.pug\n│ ├── index.pug\n├── .env\n├── app.js\n├── server.js\n├── .gitignore\n├── package.json\n├── README.md\n\n```\n\n## 📜 License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n---\n\nThis README provides a comprehensive guide for setting up, running, and testing the project, as well as detailed API documentation and project structure information.\n\n# Worked on this Project\n\n© [Ali Nour](https://github.com/alin00r) © [Mazen](https://github.com/mazenmohamedmahmoudatia666) © [Kareem](https://github.com/karemhamed)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feunoia-scu%2Feunoia-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feunoia-scu%2Feunoia-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feunoia-scu%2Feunoia-api/lists"}