PeerPrep is a collaborative coding platform for users to communicate and collaborate together on Data Structures and Algorithms Interview Questions with a real-time collaboration environment. It is built with a Microservices Architecture for the backend and developed as part of the CS3219 Software Engineering Principles and Patterns module from NUS. This project was built and developed by:
- Question Service Scraper (
/backend/question-service/lambda
): Developed a web scraper lambda function that would scrape Leetcode for its questions as a CRON job. - Question Service Server (
/backend/question-service/server
): Developed a FastAPI server that serves Leetcode questions through HTTP endpoints, allowing for CRUD operations and pagination. - Communication Service (
/backend/communication-service
): Developed the Communication Service, an ExpressJS application that allows users to communicate with one another in real-time via a chat function using Websockets - PeerPrep UI (
/frontend
): Developed features and UI elements on the frontend to serve users.
- To run all the services together, please follow the setup instructions for ALL the services.
- This is needed to run the assignments as well. (To view specific instructions for assignments, view the
ASSIGNMENTS.md
file in the root of the project)
- In the
/frontend/app
directory, copy the.env.example
file and rename it to.env.development
- For any missing env vars, check with the team to retrieve the secrets from the vault
- In the
/backend/api-gateway/app
directory, copy the.env.example
file and rename it to.env.development
- For any missing env vars, check with the team to retrieve the secrets from the vault
- In the
/backend/user-service/app
directory, copy the.env.example
file and rename it to.env.development
- For any missing env vars, check with the team to retrieve the secrets from the vault
- In the
/backend/question-service/server/app
directory, copy the.env.example
file and rename it to.env.development
- For any missing env vars, check with the team to retrieve the secrets from the vault
- In the
/backend/matching-service/app
directory, copy the.env.example
file and rename it to.env.development
- For any missing env vars, check with the team to retrieve the secrets from the vault
- In the
/backend/collaboration-service/app
directory, copy the.env.example
file and rename it to.env.development
- For any missing env vars, check with the team to retrieve the secrets from the vault
- In the
/backend/communication-service/app
directory, copy the.env.example
file and rename it to.env.development
- For any missing env vars, check with the team to retrieve the secrets from the vault
- Ensure you have Docker Desktop (>= v4.22.2) installed (https://docs.docker.com/desktop/install/mac-install/)
- Ensure you have followed the instructions above to setup the services for local development
- In the root of the project, run
docker compose up
- Visit the following endpoints for the respective services
- Frontend: http://localhost:8000
- API gateway service: http://localhost:8001
- Users service: http://localhost:8002
- Questions service: http://localhost:8003
- Matching service: http://localhost:8004
- Collaboration service: http://localhost:8005
- Communication service: http://localhost:8006
- Installing new dependencies causes the Docker image to not build properly. If this happens, run
docker compose down
and thendocker compose up --build
again.
- You should not have to do this as the GitHub actions will automatically deploy your changes to AWS
- However, if you do have a need to test deployment from locally quickly without having to wait for the GitHub actions to run, you can follow the instructions below
- Ensure you have completed the instructions above to set up the services for local development
- Install and setup Pulumi
- Move to infra directory of the service you want to deploy (e.g.
/<service>/infra
directory) - Ensure you are on the stack you want to test a deploy from (it should usually be
staging
)- You can verify this by running
pulumi stack
- If you are not on the right stack, run
pulumi stack select <stack-name>
to switch to the right stack
- You can verify this by running
- Run
pulumi up
to preview the changes and then deploy them
- Please refer to the README.md in the
/backend/template-service
directory for instructions to create your own service