You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The individual and team project for this class are designed to mirror the experiences of a software engineer joining a new development team: you will be “onboarded” to our codebase, make several individual contributions, and then form a team to propose, develop and implement new features. The codebase that we’ll be developing on is a Fake Stack Overflow project (let’s call it HuskyFlow). You will get an opportunity to work with the starter code which provides basic skeleton for the app and then additional features will be proposed and implemented by you! All implementation will take place in the TypeScript programming language, using React for the user interface.
To run this project locally:
Run npm install in the root directory to install all dependencies for the client, server, and shared folders.
{ : .note } Refer to IP1 and IP2 for further instructions related to setting up MongoDB, setting environment variables, and running the client and server.
Codebase Folder Structure
client: Contains the frontend application code, responsible for the user interface and interacting with the backend. This directory includes all React components and related assets.
server: Contains the backend application code, handling the logic, APIs, and database interactions. It serves requests from the client and processes data accordingly.
shared: Contains all shared type definitions that are used by both the client and server. This helps maintain consistency and reduces duplication of code between the two folders. The type definitions are imported and shared within each folder's types/types.ts file.
Database Architecture
The schemas for the database are documented in the directory server/models/schema.
A class diagram for the schema definition is shown below:
API Routes
/answer
Endpoint
Method
Description
/addAnswer
POST
Add a new answer
/comment
Endpoint
Method
Description
/addComment
POST
Add a new comment
/messaging
Endpoint
Method
Description
/addMessage
POST
Add a new message
/getMessages
GET
Retrieve all messages
/question
Endpoint
Method
Description
/getQuestion
GET
Fetch questions by filter
/getQuestionById/
GET
Fetch a specific question by ID
/addQuestion
POST
Add a new question
/upvoteQuestion
POST
Upvote a question
/downvoteQuestion
POST
Downvote a question
/getCommunityQuestions/
GET
Fetchs questions from a community
/tag
Endpoint
Method
Description
/getTagsWithQuestionNumber
GET
Fetch tags along with the number of questions
/getTagByName/
GET
Fetch a specific tag by name
/user
Endpoint
Method
Description
/signup
POST
Create a new user account
/login
POST
Log in as a user
/resetPassword
PATCH
Reset user password
/getUser/
GET
Fetch user details by username
/getUsers
GET
Fetch all users
/deleteUser/
DELETE
Delete a user by username
/updateBiography
PATCH
Update user biography
/chat
Endpoint
Method
Description
/createChat
POST
Create a new chat.
/:chatId/addMessage
POST
Add a new message to an existing chat.
/:chatId
GET
Retrieve a chat by its ID, optionally populating participants and messages.
/:chatId/addParticipant
POST
Add a new participant to an existing chat.
/getChatsByUser/:username
GET
Retrieve all chats for a specific user based on their username.
/games
Endpoint
Method
Description
/create
POST
Create a new game
/join
POST
Join an existing game
/leave
POST
Leave a game
/games
GET
Retrieve all games
/contributions
Endpoint
Method
Description
/getContributions
GET
Fetch a user's contributions
/community
Endpoint
Method
Description
/addCommunity
POST
Create a new community
/getCommunity/
GET
Fetch community by communityId
/getAllCommunities
GET
Fetch all communities
/getCommunitiesByUser/
GET
Fetch all community by userId
/addMember/
POST
Add a member to community
/addModerator/
POST
Add a moderator to community
/addMemberRequest/
POST
Add a member request to community
/removeMember/
DELETE
Remove a member to community
/removeModerator/
DELETE
Remove a moderator to community
/rejectMemberRequest/
DELETE
Reject a member request to community
/updateName/
PATCH
Update community name
/updateDescription/
PATCH
Update community description
/notifications
Endpoint
Method
Description
/getNotifications
GET
Gets a users notifications
/viewNotification
PUT
Marks a notification as viewed
/clearAllNotifications
PUT
Marks all notifications as viewed
/gamer
Endpoint
Method
Description
/createGamer
POST
Create a new gamer
/getGamer/
GET
Gets a gamer by username
/getGamers
GET
Gets all gamers
/deleteGamer/
DELETE
Deletes a gamer
/updateGamerInfo
PATCH
Updates gamer information
/getLeaderboard
GET
Gets gamer leaderboard
/star
Endpoint
Method
Description
/getStars
GET
Get a user's stars
/addStar
POST
Add a star to a question
/removeStar
DELETE
Remove a star from a question
Running Stryker Mutation Testing
Mutation testing helps you measure the effectiveness of your tests by introducing small changes (mutations) to your code and checking if your tests catch them. To run mutation testing with Stryker, use the following command in server/:
npm run stryker
{ : .note } In case you face an "out of memory" error while running Stryker, use the following command to increase the memory allocation to 4GB for Node.js:
node --max-old-space-size=4096 ./node_modules/.bin/stryker run