Sporta connects users who are passionate about playing sports, enabling them to create and join public events for games like soccer, basketball, tennis, and more. Users can register, create profiles with their skill levels, and browse events based on location and availability. The app allows for real-time updates on event participation, skill-based filtering, and in-app messaging to coordinate with others. Sporta enables users to post photos and rate fellow players to foster engagement.
- π₯ Release Demos
- π Important Files
- π§ͺ Important Tests
- π₯ Team Members
- βοΈ Project Setup & Build Guide
| File path with clickable GitHub link | Purpose (1 line description) |
|---|---|
| ObjectStorageServiceImpl.java | Implements storeFile and getFile methods to deal with images. |
| MessagingServiceImpl.java | Implements processMessage getMessages, getChatrooms, createChatroom, getChatroom, patchChatroom, deleteChatroom patchMessage, deleteMessage, addMembers, removeMembers, and leaveChatroom functions for the real-time chatting feature |
| PostServiceImpl.java | Implements createPost, getAllPostsOrderedByCreationDateInDesc, getPost, deletePost, createComment, deleteComment, reactToPost, isPostCreator, isCommentCreator functions for posts and comments on events. |
| axios Instance.ts | Axios instance that handles api calls with backend to gather information and other logic |
| SearchingEventRepositoryImpl.java | Implements event search and pagination by ensuring accurate and reliable query functionality for the event service |
| Test file path with clickable GImplements user registration, user login and user authenticationitHub link | Purpose (1 line description) |
|---|---|
| UserServiceTest.java | Validates UserService operations, focusing on user management and friend interactions |
| api.test.ts | Tests interactions with api while also including state persistence testing |
| PostServiceImplTest.java | Tests all logic related to the post and comment handling of the app |
| MessagingServiceTest.java | Validates MessagingService operations, mainly on making sure private and group messaging is possible. |
| EventSearchTest.java | Validates event search and pagination by ensuring accurate and reliable query functionality for the event service |
| Name | Student ID | GitHub | |
|---|---|---|---|
| Daniel Duguay | 40202775 | DanDuguay | Duguay9@gmail.com |
| Nicolas Chelico | 40156158 | NicolasChelico | nicolas.chelico@outlook.com |
| Wadeh Hamati | 40216893 | wade3hamati | wade3_hamati@outlook.com |
| Walid Achlaf | 40210355 | walidoow | walidachlaf@gmail.com |
| Monika Moanes | 40188452 | MonikaaMoanes | monicanasser6@gmail.com |
| Khalil Garaali | 40226310 | KhalilGarali | garalikhalil@gmail.com |
| Youssef Alsheghri | 40108014 | yousfino | youssef.alsheghri@gmail.com |
| Ziad Elsharkawi | 40213438 | Ziadsharkos | ziadelsharkawi@outlook.com |
| Patrick MacEachen | 40209790 | patrickmac3 | patrickmaceachen9@gmail.com |
| Joud Babik | 40031039 | JRB958 | j_babik@live.concordia.ca |
| Jean-Nicolas Sabatini-Ouellet | 40207926 | wolfie7679 | je_sabat@live.concordia.ca |
Ensure the following tools are installed:
- Git
- Docker
- Java JDK 21
- Gradle (or use
./gradlewwrapper) - Note that this is the main setup for the backend. In order to setup the frontend, please consult the following README.md to understand more about the Expo app.
git clone <repository-url>
cd <repository-directory>Use the Gradle wrapper to build the project:
./gradlew buildThis command compiles, packages, and runs all unit tests.
./gradlew buildThe generated JAR file will be located in build/libs/ as project-name-0.0.1-SNAPSHOT.jar.
docker build --build-arg JAR_FILE=build/libs/project-name-0.0.1-SNAPSHOT.jar -t project-image .docker run -p 8080:8080 --env-file .env project-imageReplace
.envwith the path to your environment variable file, or set the variables directly in the command line.
The build.gradle file specifies dependencies, configurations, and build tasks. Key sections include:
This project relies on several microservices, each with its own Docker setup. All microservices depend on the services defined in a shared docker-compose.yml file, which includes services such as MongoDB, MySQL (for Keycloak), and Keycloak itself. These services must be running for the microservices to function properly.
The docker-compose.yml file configures and manages the required services. You will need to ensure that the services are up and running before starting any microservice.
We use a monorepo architecture with services located in Microservices/<service-name>.
Here are the required backend services:
| Microservice | Docker Package |
|---|---|
| Event Service | sportsapp-event-service |
| User Service | sportsapp-user-service |
| Messaging Service | sportsapp-messaging-service |
| Storage Service | sportsapp-storage-service |
| API Gateway | sportsapp-gateway |
| Kafka Event Model | app.sportahub.kafka-events |
| Orchestration Service | sportsapp-orchestration-service |
| Email Service | sportsapp-email-service |
| Notification Service | sportsapp-notification-service |
-
Navigate to the directory of the microservice you want to run.
-
Make sure the
docker-compose.ymlfile is present and configured. -
Run the following command to start all the required services for that microservice:
docker-compose up --buildOnce the services are up and running, the microservice will be able to interact with MongoDB, Keycloak, and other dependencies.
The project consists of several microservices, each located in its respective folder under Microservices/<service-name>. The README assumes the backend is located at the root of the project directory, but since we have multiple microservices, each microservice has its own folder and configuration.
To run a specific microservice, you need to follow the setup steps (including using Docker Compose) inside each microservice directory:
- Navigate to the corresponding microservice directory under
Microservices/:
cd Microservices/<service-name>- Run Docker Compose for that microservice:
docker-compose up --buildThis ensures that each microservice runs with its own set of services (like databases or authentication), and you can independently manage and deploy them as needed.
After building the project and Docker image, you can access the application at http://localhost:8080