{"id":20470597,"url":"https://github.com/ramchaik/matchify","last_synced_at":"2026-04-11T01:11:20.537Z","repository":{"id":238184395,"uuid":"796041592","full_name":"ramchaik/matchify","owner":"ramchaik","description":"A full-stack application that enables users to connect with others based on shared interests. Users can create or join events, engage in group chats, and more.","archived":false,"fork":false,"pushed_at":"2024-05-04T19:19:44.000Z","size":29683,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-16T02:17:05.481Z","etag":null,"topics":["aws-s3","ci-cd","docker","fullstack","geocoding","integration-testing","java","jest","junit5","jwt","mockito","mvc","mysql","react","springboot","websocket"],"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/ramchaik.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-05-04T18:57:15.000Z","updated_at":"2024-05-29T02:47:07.000Z","dependencies_parsed_at":"2024-05-04T20:37:49.566Z","dependency_job_id":null,"html_url":"https://github.com/ramchaik/matchify","commit_stats":null,"previous_names":["ramchaik/matchify"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramchaik%2Fmatchify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramchaik%2Fmatchify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramchaik%2Fmatchify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramchaik%2Fmatchify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ramchaik","download_url":"https://codeload.github.com/ramchaik/matchify/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242034146,"owners_count":20061073,"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":["aws-s3","ci-cd","docker","fullstack","geocoding","integration-testing","java","jest","junit5","jwt","mockito","mvc","mysql","react","springboot","websocket"],"created_at":"2024-11-15T14:13:31.949Z","updated_at":"2026-04-11T01:11:20.504Z","avatar_url":"https://github.com/ramchaik.png","language":"Java","readme":"# Matchify\n\nAn app that makes you social.\n\n### Website: [matchify.com](http://172.17.1.14:3000)\n\n---\n\n**Client Team:** Group-1\n\n**Dev Team:** Group-10\n\n---\n\n## Table of Contents\n\n- [Usage Scenario](#usage-scenario)\n- [Detailed Use Case Scenario](#detailed-use-case-scenario)\n- [Dependencies and Installation](#dependencies-and-installation)\n  - [Frontend Dependencies](#frontend-dependencies)\n  - [Backend Dependencies](#backend-dependencies)\n  - [Build Instructions](#build-instructions)\n  - [Deployment Instructions](#deployment-instructions)\n- [Test Coverage for Backend](#test-coverage-for-backend)\n- [Database Design](#database-design)\n- [Backend APIs](#backend-apis)\n\n## Usage scenario\n\n### Authentication\n\n- **Login**\n- **Register**\n\n### Filling user interests\n\n- **Selecting general interests**\n- **Selecting sub-interests**\n\n### User dashboard/ Home page\n\n- **Matched users**\n- **Recommended events**\n- **My events**\n- **Event creation**\n- **Logout**\n\n### User Chat\n\n- **User chatroom with user status**\n- **User-to-user direct chat**\n\n### Event creation\n\n- **User event creation**\n\n### Event details\n\n- **View event**\n- **Join or leave event**\n- **List of attendees**\n\n## Detailed Use Case Scenario\n\n### 1. Login page\n\nWhen the page is first accessed, the user is directly redirected to the login page. On this page, existing users can log in by inserting their email and password and clicking the log-in button. If the user is not already registered with the application and is new, then they can click on the “register link” provided on the Login page.\n\n![alt text](docs/img/image.png)\n\n### 2. Register page\n\nUpon clicking on the link for registering as a new user of the application (the link is available on the login page), the user will be redirected to the registration page. On the register page fields like “Name”, “E-mail”, “password”, and “City” are collected. All fields on this page are mandatory, and the password field is hidden with various constraints and a particular required format (i.e., minimum 8 characters, combination of alphanumeric characters, etc.) Once the user fills in all the required information on the register page properly, they can submit the registration form. Upon successful registration, the user will be directly redirected to the fill my interest page.\n\n![alt text](docs/img/image-1.png)\n![alt text](docs/img/image-2.png)\n\n### 3. Fill my interest\n\nAfter successful registration, the user then gets redirected to the “Fill my interests” page where they can fill in two different types of interests: a) Selecting general interests: The user selects from a range of general interests (sports, cooking, academics, etc.) b) Selecting sub-interests: The user selects from a list of sub-issues that are related to the general issues they selected (Sport: badminton, football, etc). Upon successfully inserting all the required fields on this page (General and sub-interests), the user will be redirected to the User dashboard / Home page with their matches based on their interest data.\n\n![alt text](docs/img/image-3.png)\n\n### 4. User dashboard/ Home page\n\nOnce the user is successfully logged in via the “Log-in” page or the “Register page”, they’ll then redirect to the user dashboard. The dashboard contains various components for the following features: “Matched users”, “Recommended events”, “My events”, “Event creation”. An in-depth use case scenario for all these features has been given in the following sections. The user can click on the “Log-out” button to log out of the application, upon clicking on the said button the user will get logged out of the application and get redirected to the “Login page”.\n\n![alt text](docs/img/image-4.png)\n\n### 5. Matched users\n\nUser, once logged in, could see other users with similar interests recommended for the logged-in user under the “Matched users” section. These “Matched users” are recommended based on the similarity score that is generated based on the similarity of the “interests” of users. These interests are stated by the users when they first log into the application.\n\n![alt text](docs/img/image-5.png)\n\n### 6. Recommended events\n\nOn the user dashboard/ home page, users can see their recommended events. These events are created by other users and recommended to the logged-in user based on their interest data. User can click on the recommended events cards that will redirect them to the “Event details” page.\n\n![alt text](docs/img/image-6.png)\n\n### 7. My events\n\nThe user can create their own events by clicking on the “Create event” button on the user dashboard. These logged-in user-created events will then get populated on the dashboard under the “Events Created By You” section. User can click on the recommended events cards that will redirect them to the “Event details” page.\n\n![alt text](docs/img/image-7.png)\n\n### 8. Event details\n\nUpon clicking on the event cards (either the recommended or my event cards displayed on the user dashboard), the event details page would open. On this page user can see all the event details such as Title, description, instruction, and most importantly event location and timing. User can click on the location and that will redirect them to the respective location of the event on Google Maps (This is achieved by using the latitude and longitude data) User can choose to join or leave the event and can also see the names of all the event attendees and can even chat with them by clicking on the chat icon beside their names.\n\n![alt text](docs/img/image-8.png)\n\n### 9. User Chat\n\nUsers can engage in chat sessions with other registered users on the application. There are two ways to initiate a chat session:\n\n- **a) Matched Users**: By clicking on the chat icon on the “Matched users” cards, users can start a chat session with the selected “Matched user.”\n- **b) Event Attendees**: By clicking on the chat icon beside the names of the event attendees in the “Event attendee” list on the “Event details” page.\n\nOn the actual chat page, users will be able to engage in conversations with other users and see their online/offline status.\n\n![alt text](docs/img/image-9.png)\n\n### 10. Event Creation\n\nUsers will be redirected to the event creation page from the user dashboard upon clicking the \"Create event\" button. On this page, users can enter all the required details for the event, such as the Event title, description, instructions, etc. along with an optional docs/img/image.\n\nAfter submitting the event, it will be stored in the database and recommended to other users with similar interests on their dashboards/home pages.\n\n![alt text](docs/img/image-10.png)\n\n## Dependencies and Installation\n\n## Frontend Dependencies\n\n### Prerequisites\n\nBefore you can install and run this React.js project, you must have the following installed on your system:\n\n- **Node.js**: The runtime environment required to run JavaScript code outside of a browser. Node.js comes with npm (node package manager) which is used to manage project dependencies. Download and install Node.js from [the official website](https://nodejs.org/).\n\n- **npm (Node Package Manager)**: Comes bundled with Node.js. Used to install the project's dependencies.\n\n### Clone the Repository\n\nFirst, clone the project repository from GitHub to your local machine using git command:\n\n```bash\n git clone \u003crepository-url\u003e\n```\n\nThe Matchify React application utilizes a range of dependencies for its functionality. Here, we document these dependencies required to build, test, and deploy the application, along with the necessary commands to install and configure them.\n\n### Installation\n\nTo install these dependencies, navigate to your project directory in the terminal and run:\n\n```bash\n npm install\n```\n\n### Start the development server:\n\n```bash\n npm start\n```\n\nRuns the app in the development mode.\nOpen http://localhost:3000 to view it in your browser.\nThe page will reload when you make changes.\nYou may also see any lint errors in the console.\n\n### Run test\n\n```bash\n npm test\n```\n\nLaunches the test runner in the interactive watch mode.\nSee the section about running tests for more information.\n\n### Build app\n\n```bash\n npm run build\n```\n\nBuilds the app for production to the build folder.\nIt correctly bundles React in production mode and optimizes the build for the best performance.\nThe build is minified and the filenames include the hashes.\nYour app is ready to be deployed!\nSee the section about deployment for more information.\n\n### Eject from Create React App\n\n```bash\n npm run eject\n```\n\nNote: this is a one-way operation. Once you eject, you can't go back!\nIf you aren't satisfied with the build tool and configuration choices, you can eject at any time. This command will remove the single build dependency from your project.\nInstead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except eject will still work, but they will point to the copied scripts so you can tweak them.\n\n### Dependencies\n\n- **Core Libraries**: `react` (^18.2.0), `react-dom` (^18.2.0)\n- **Routing**: `react-router-dom` (^6.22.0)\n- **State Management**: `@reduxjs/toolkit` (^2.1.0), `react-redux` (^9.1.0), `redux` (^5.0.1), `redux-persist` (^6.0.0), `redux-saga` (^1.3.0)\n- **Material UI**: `@mui/material` (^5.15.9), `@mui/icons-material` (^5.15.9), `@mui/styled-engine-sc` (^6.0.0-alpha.16)\n- **Emotion**: `@emotion/react` (^11.11.3), `@emotion/styled` (^11.11.0)\n- **Bootstrap**: `bootstrap` (^5.3.2), `react-bootstrap` (^2.10.1)\n- **WebSockets \u0026 Messaging**: `@stomp/stompjs` (^7.0.0), `sockjs-client` (^1.6.1), `stompjs` (^2.3.3)\n- **HTTP Client**: `axios` (^1.6.7)\n- **Testing Libraries**: `@testing-library/jest-dom` (^5.17.0), `@testing-library/react` (^13.4.0), `@testing-library/user-event` (^13.5.0)\n- **Miscellaneous**: `react-hot-toast` (^2.4.1), `react-slick` (^0.30.2), `slick-carousel` (^1.8.1), `web-vitals` (^2.1.4)\n\n### Development Dependencies\n\n- **Tooling**: `react-scripts` (^5.0.1)\n\n## Backend Dependencies\n\n### Prerequisites\n\nBefore setting up the Matchify backend, ensure you have the following prerequisites installed on your system:\n\n- **Java JDK**: The Java Development Kit (JDK) is necessary to compile and run Java applications. Matchify requires JDK 17. You can download it from [Oracle's website](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) or adopt an OpenJDK distribution like [AdoptOpenJDK](https://adoptopenjdk.net/).\n\n- **Maven**: Apache Maven is a build automation tool used primarily for Java projects. Maven simplifies the build process like compiling code, packaging binaries, and managing dependencies. Download and install Maven from [the official Apache Maven project website](https://maven.apache.org/download.cgi).\n\n### Clone the Repository\n\nStart by cloning the Matchify backend repository to your local machine:\n\n```bash\n git clone \u003cbackend-repository-url\u003e\n```\n\n### Testing\n\nTo run the backend tests, execute the following command:\n\n```bash\n mvn test\n```\n\nThis command runs all unit and integration tests in the project using Maven.\n\n### Configuration\n\nThe backend application can be configured via the application.properties or application.yml files located in the src/main/resources directory. Here you can specify your database connections, server port, and other Spring Boot settings.\n\n### API Documentation\n\nAfter running the application you can find the API documentation using the below link.\nBelow link should list all the APIs that are there on our backend Spring boot application.\nhttp://localhost:8080/swagger-ui/index.html\n\n## Backend Dependencies\n\nThe backend of the Matchify application is built using Spring Boot, leveraging Maven for dependency management. Below is an overview of the key dependencie, which are essential for building, testing, and running the backend service.\n\n### Key Dependencies\n\n- **Spring Boot Starter Security**: Provides comprehensive security for Spring-based applications.\n- **Spring Boot Starter Web**: Facilitates building web applications (including RESTful services) using Spring MVC.\n- **Spring Boot Starter WebSocket**: Enables WebSocket development with Spring.\n- **Spring Boot Starter Data JPA**: Allows easy implementation of JPA-based repositories.\n- **MySQL Connector-J**: Connects the application to a MySQL database.\n- **Spring Boot Starter Validation**: Supports validation functionality for Spring applications.\n- **Lombok**: Reduces boilerplate code in Java classes.\n- **ModelMapper**: Simplifies object mapping in Java to aid in entity and DTO mapping.\n- **Spring Boot Starter Test**: Supports testing Spring Boot applications with libraries including JUnit, Hamcrest, and Mockito.\n- **Spring Security Test**: Provides support for testing Spring Security applications.\n- **JJWT**: Java JWT for JWT creation and verification.\n- **Springdoc OpenAPI UI**: Facilitates the generation of API docs using the OpenAPI 3 specification.\n- **Google Maps Services**: Enables the use of Google Maps APIs in the application.\n- **AWS Java SDK**: Allows the application to interact with Amazon Web Services.\n\n### Building and Running\n\n### Build\n\nUse Maven to build the project. This step compiles the Java code, runs any tests, and packages the compiled code into a JAR file:\n\n```bash\n mvn clean install\n```\n\nIf you want to skip the test execution:\n\n```bash\n mvn clean install -DskipTests\n```\n\n### Run\n\nAfter successfully building the project, you can run your Spring Boot application using Maven:\n\n```bash\n mvn spring-boot:run\n```\n\nThis command starts the Spring Boot application. By default, the application will be accessible on http://localhost:8080.\n\n## Build Instructions\nInstructions to Build the Application from Scratch.\n\n## Frontend\n\n**1. Set up Node.js and npm**\n\nReact.js requires Node.js and npm (Node Package Manager) to be installed on the system. These can be downloaded and installed from the official website: Node.js.\n\n**2. Create a new React app**\n\n- In your terminal or command prompt got to the directory where the project is to be created.\n- Run the following command to create a new React app using Create React App:\n  `npx create-react-app matchify`\n  'matchify' is the name of the app created.\n\n**3.** Navigate to the project directory.\n\n**4.** By default, Create React App generates a project structure with all the necessary files and folders. Key directories include:\n\n- public: Contains the HTML template file (index.html) and other static assets.\n\n- src: Contains the source code of your React application.\n\n- index.js: Entry point of your application.\n\n- App.js: Root component of your application.\n- App.css: CSS file for styling the App component.\n\n- index.css: Global CSS styles.\n\n- node_modules: Contains project dependencies.\n- package.json: Configuration file for npm, including dependencies and scripts.\n\n**5. Set-up the Redux Store**\n\n- Install Redux and Redux Persist packages in the React.js project by executing the follewing commands:\n  `npm install redux react-redux redux-persist`\n- Set up your Redux store in the application. Create a file, store.js, and define the Redux store configurations.\n\n```js\nimport { createStore, applyMiddleware } from \"redux\";\nimport { persistStore, persistReducer } from \"redux-persist\";\nimport storage from \"redux-persist/lib/storage\"; // defaults to localStorage for web\n\nimport rootReducer from \"./reducers\"; // Assuming you have your reducers defined\n\nconst persistConfig = {\n  key: \"root\",\n  storage,\n};\n\nconst persistedReducer = persistReducer(persistConfig, rootReducer);\n\nexport const store = createStore(\n  persistedReducer,\n  applyMiddleware(/* any middleware you want to use */)\n);\n\nexport const persistor = persistStore(store);\n```\n\nThe above code sets up a Redux store with Redux Persist, using localStorage as the default storage engine.\n\n- Wrap the root component with Redux's \u003cProvider\u003e component. This allows the Redux store to be accessible throughout the component tree:\n\n```js\nReactDOM.render(\n  \u003cProvider store={store}\u003e\n    \u003cPersistGate loading={null} persistor={persistor}\u003e\n      \u003cApp /\u003e\n    \u003c/PersistGate\u003e\n  \u003c/Provider\u003e,\n  document.getElementById(\"root\")\n);\n```\n\n## Backend\n\n**1. Set up your development environment**\n\nJava and Maven have to be installed on the system. They can be downloaded and installed from their respective official websites.\n\n**2. Create a new Maven project**\n\nA new Maven project is created using the Maven command-line tool or an IDE like IntelliJ IDEA.\n\n- Open the terminal or command prompt.\n- Navigate to the directory where the project has to be created.\n- Run the below Maven command to create the project.\n\n```bash\nmvn archetype:generate -DgroupId=com.example -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false\n```\n\n**3. Add Spring Boot dependencies**\n\nEdit the pom.xml file in the project directory to include Spring Boot dependencies.\n\n```xml\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n        \u003cartifactId\u003espring-boot-starter\u003c/artifactId\u003e\n        \u003cversion\u003e2.6.4\u003c/version\u003e \u003c!-- Use the latest Spring Boot version --\u003e\n    \u003c/dependency\u003e\n```\n\n**4. Write your Spring Boot application code**\n\nCreate a new Java class and add the below code to it.\n\n```java\n   package com.example.demo;\n\n   import org.springframework.boot.SpringApplication;\n   import org.springframework.boot.autoconfigure.SpringBootApplication;\n   import org.springframework.web.bind.annotation.GetMapping;\n   import org.springframework.web.bind.annotation.RestController;\n\n   @SpringBootApplication\n   @RestController\n   public class DemoApplication {\n\n       public static void main(String[] args) {\n           SpringApplication.run(DemoApplication.class, args);\n       }\n\n       //Other functions\n   }\n```\n\n**5. Build and run your application**\n\nRun the below command from the project directory to build the application:\n\n`mvn clean package`\n\nOnce the build is successful, run the Spring Boot application using the below command:\n\n`java -jar target/demo-1.0-SNAPSHOT.jar`\n\n## Deployment Instructions:\n\nTo deploy the application to production, follow these steps:\n\n1. **Initiate Merge Request**:\n\n   - Create a Merge Request targeting the `main` branch in the GitLab repository.\n\n2. **Approval Process**:\n\n   - Ensure the Merge Request is approved by relevant stakeholders.\n\n3. **CI/CD Pipeline**:\n\n   - Wait for the Continuous Integration/Continuous Deployment (CI/CD) pipeline triggered by the Merge Request to complete.\n\n4. **Production Deployment**:\n   - Once the pipeline finishes, the application will automatically be deployed to the production environment.\n\n## Test Coverage for Backend\n\n### IntelliJ IDEA: 82%\n\n![IntelliJ IDEA Test Coverage](docs/img/intellij.png)\n\n### JaCoCo: 77%\n\n![JaCoCo Test Coverage](docs/img/jacoco.png)\n\nSure, here's the README with each stage as a top-level section:\n\n## CI/CD Pipeline for Matchify Backend\n\nThis repository contains the CI/CD configuration for the Matchify backend application. The pipeline is configured to build, test, analyze code quality, publish Docker images, and deploy the application to a production environment.\n\n## Pipeline Variables\n\nThe pipeline uses the following environment variables:\n\n- `DOCKER_HUB_USER`: Docker Hub username.\n- `DOCKER_HUB_PWD`: Docker Hub password.\n- `SSH_PRIVATE_KEY`: Private SSH key for accessing the deployment server.\n- `SERVER_USER`: Username for accessing the deployment server.\n- `SERVER_IP`: IP address of the deployment server.\n- `APP_NAME`: Name of the application Docker image.\n- `APP_PORT`: Port on which the application should run.\n- `AWS_ACCESS_KEY_ID`: AWS access key ID for accessing AWS services.\n- `AWS_SECRET_ACCESS_KEY`: AWS secret access key for accessing AWS services.\n- `AWS_REGION`: AWS region for accessing AWS services.\n- `GEOCODING_API_KEY`: API key for geocoding services.\n\n### Build\n\nIn this stage, the Maven project is built using the `maven:latest` Docker image. The application is packaged as a JAR file with the `test` profile activated.\n\n### Test\n\nThe test stage executes Maven tests with the `test` profile activated.\n\n### Quality\n\nIn this stage, code quality is analyzed using DesigniteJava. The tool identifies code smells and produces a report in the `smells/` directory.\n\n### Publish\n\nThe Docker image is built and pushed to Docker Hub using the `docker:latest` Docker image. The image is tagged with the short commit SHA and pushed to the repository associated with the Docker Hub user.\n\n### Deploy\n\nThe application is deployed to a production environment using SSH. The Docker image is pulled, and a container is started on the target server. Environment variables required for the application are passed during container startup.\n\n## Pipeline Triggers\n\nThe pipeline is triggered automatically on commits to the `main` branch.\n\n## CI/CD Pipeline for Matchify Frontend\n\nThis repository contains the CI/CD configuration for the Matchify frontend application. The pipeline is designed to build, test, analyze code quality, publish Docker images, and deploy the application to a production environment.\n\n### Pipeline Variables\n\nThe following environment variables are utilized in the pipeline:\n\n- `DOCKER_HUB_USER`: Docker Hub username.\n- `DOCKER_HUB_PWD`: Docker Hub password.\n- `SSH_PRIVATE_KEY`: Private SSH key for accessing the deployment server.\n- `SERVER_USER`: Username for accessing the deployment server.\n- `SERVER_IP`: IP address of the deployment server.\n- `REACT_APP_API_URL`: API URL for the React application.\n- `APP_NAME`: Name of the application Docker image.\n- `APP_PORT`: Port on which the application should run.\n- `APP_DIR`: Directory path of the frontend application.\n- `APP_CONTAINER_NAME`: Name of the Docker container for the frontend application.\n\n### Pipeline Stages\n\n#### Build\n\nIn this stage, the Node.js project is built using the `node:latest` Docker image. Dependencies are installed using `npm ci`.\n\n#### Test\n\nThe test stage executes the test suite for the frontend application.\n\n#### Quality\n\nThis stage triggers a code quality analysis using an external template, specified in `Code-Quality.gitlab-ci.yml`. It only runs on the `dev` and `main` branches.\n\n#### Publish\n\nThe Docker image is built and pushed to Docker Hub using the `docker:latest` Docker image. The image is tagged with the short commit SHA and pushed to the repository associated with the Docker Hub user.\n\n#### Deploy\n\nThe application is deployed to a production environment using SSH. The Docker image is pulled, and a container is started on the target server. Environment variables required for the application are passed during container startup.\n\n### Pipeline Triggers\n\nThe pipeline is triggered automatically on commits to the `main` branch.\n\n## [Database Design](/docs/database-design/matchify-database-design.md)\n\nThis document presents the initial database design for the Matchify application, encompassing various tables and their respective columns.\n\n## Database ERD\n\n![Database ERD](docs/img/database_erd.png)\n\n## Backend APIs\n\n| Path                               | Method | Description                        | Request Structure                              | Response Structure                                        |\n| ---------------------------------- | ------ | ---------------------------------- | ---------------------------------------------- | --------------------------------------------------------- |\n| /api/v1/interest/fill-my-interest  | POST   | Fill user interests                | `{\"groups\": [1, 2], \"categories\": [1, 2, 3]} ` | `json\u003cbr\u003e{\"msg\": \"Interests filled successfully\"} `       |\n| /api/v1/event/matched-events       | POST   | Get matched events                 | `{\"matchedUserIds\": [1, 2, 3]} `               | See [GetMatchedEventsResponse](#getmatchedeventsresponse) |\n| /api/v1/event/leave-event          | POST   | Leave an event                     | `{\"eventAttendeesId\": 123} `                   | `json\u003cbr\u003e{\"message\": \"Left event successfully\"} `         |\n| /api/v1/event/join-event           | POST   | Join an event                      | `{\"eventAttendeesId\": 123} `                   | `json\u003cbr\u003e{\"message\": \"Joined event successfully\"} `       |\n| /api/v1/event/event-attendees-list | POST   | Get attendees of an event          | `json \u003cbr/\u003e {\"eventId\": 123} `                 | See [EventAttendeesResponse](#eventattendeesresponse)     |\n| /api/v1/event/create-event         | POST   | Create an event                    | See [CreateEventRequest](#createeventrequest)  | See [CreateEventResponse](#createeventresponse)           |\n| /api/v1/auth/register              | POST   | Register a new user                | See [User](#user)                              | See [SignUpResponse](#signupresponse)                     |\n| /api/v1/auth/login                 | POST   | Login and get authentication token | See [LoginRequest](#loginrequest)              | See [AuthResponse](#authresponse)                         |\n| /api/v1/match/findMatches          | GET    | Find matches for a user            | N/A                                            | See [FindMatchesResponse](#findmatchesresponse)           |\n| /api/v1/interest                   | GET    | Fetch all interests                | N/A                                            | See [FetchInterestResponse](#fetchinterestresponse)       |\n| /api/v1/event/my-events            | GET    | Get events created by user         | N/A                                            | See [GetMyEventsResponse](#getmyeventsresponse)           |\n\nNow, for the response structures, I'll add anchor links for each response structure to provide a convenient reference. Let's define those response structures:\n\n### GetMatchedEventsResponse\n\n```json\n{\n  \"eventId\": 123,\n  \"createdBy\": {\n    \"userId\": 456,\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\",\n    \"email\": \"john@example.com\",\n    \"location\": \"City\",\n    \"ageRange\": \"18-25\"\n  },\n  \"eventName\": \"Event Name\",\n  \"description\": \"Event Description\",\n  \"eventDate\": \"2024-04-01\",\n  \"startTime\": \"10:00:00\",\n  \"endTime\": \"12:00:00\",\n  \"additionalInstructions\": \"Additional Instructions\",\n  \"address\": \"Event Address\",\n  \"pincode\": \"123456\",\n  \"city\": \"Event City\",\n  \"docs/img/imageURL\": \"https://example.com/event_docs/img/image.jpg\",\n  \"latitude\": \"123.456\",\n  \"longitude\": \"456.789\"\n}\n```\n\n### EventAttendeesResponse\n\n```json\n{\n  \"userId\": 123,\n  \"firstName\": \"Jane\",\n  \"lastName\": \"Doe\"\n}\n```\n\n### CreateEventRequest\n\n```json\n{\n  \"eventName\": \"Event Name\",\n  \"description\": \"Event Description\",\n  \"eventDate\": \"2024-04-01\",\n  \"startTime\": { \"hour\": 10, \"minute\": 0, \"second\": 0, \"nano\": 0 },\n  \"endTime\": { \"hour\": 12, \"minute\": 0, \"second\": 0, \"nano\": 0 },\n  \"additionalInstructions\": \"Additional Instructions\",\n  \"address\": \"Event Address\",\n  \"pincode\": \"123456\",\n  \"city\": \"Event City\"\n}\n```\n\n### CreateEventResponse\n\n```json\n{\n  \"eventId\": 123,\n  \"message\": \"Event created successfully\"\n}\n```\n\n### User\n\n```json\n{\n  \"userId\": 123,\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"hashed_password\",\n  \"location\": \"City\",\n  \"ageRange\": \"18-25\",\n  \"status\": \"ONLINE\"\n}\n```\n\n### SignUpResponse\n\n```json\n{\n  \"token\": \"JWT_TOKEN\",\n  \"message\": \"User registered successfully\"\n}\n```\n\n### LoginRequest\n\n```json\n{\n  \"email\": \"john@example.com\",\n  \"password\": \"password\"\n}\n```\n\n### AuthResponse\n\n```json\n{\n  \"jwt\": \"JWT_TOKEN\",\n  \"message\": \"Authentication successful\"\n}\n```\n\n### FindMatchesResponse\n\n```json\n{\n  \"matchedusers\": [\n    {\n      \"userId\": 123,\n      \"name\": \"Jane\",\n      \"location\": \"City\",\n      \"ageRange\": \"18-25\",\n      \"similarityScore\": 90\n    },\n    {\n      \"userId\": 456,\n      \"name\": \"John\",\n      \"location\": \"City\",\n      \"ageRange\": \"18-25\",\n      \"similarityScore\": 85\n    }\n  ]\n}\n```\n\n### FetchInterestResponse\n\n```json\n{\n  \"groupId\": 1,\n  \"groupName\": \"Group Name\",\n  \"categories\": [\n    { \"id\": 1, \"name\": \"Category 1\" },\n    { \"id\": 2, \"name\": \"Category 2\" }\n  ]\n}\n```\n\n### GetMyEventsResponse\n\n```json\n{\n  \"eventId\": 123,\n  \"createdBy\": {\n    \"userId\": 456,\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\",\n    \"email\": \"john@example.com\",\n    \"location\": \"City\",\n    \"ageRange\": \"18-25\"\n  },\n  \"eventName\": \"Event Name\",\n  \"description\": \"Event Description\",\n  \"eventDate\": \"2024-04-01\",\n  \"startTime\": \"10:00:00\",\n  \"endTime\": \"12:00:00\",\n  \"additionalInstructions\": \"Additional Instructions\",\n  \"address\": \"Event Address\",\n  \"pincode\": \"123456\",\n  \"city\": \"Event City\",\n  \"docs/img/imageURL\": \"https://example.com/event_docs/img/image.jpg\",\n  \"latitude\": \"123.456\",\n  \"longitude\": \"456.789\"\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framchaik%2Fmatchify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framchaik%2Fmatchify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framchaik%2Fmatchify/lists"}