From 782bd1fbd4f0460e163e8f7309dfef66f18b0296 Mon Sep 17 00:00:00 2001 From: "Adeel A. Bhutta" Date: Fri, 3 Jan 2025 16:30:31 -0500 Subject: [PATCH 1/4] ip1 instructions --- Assignments/ip1/ActionsTab.png | Bin 0 -> 10961 bytes Assignments/ip1/class-diagram.png | Bin 0 -> 69588 bytes Assignments/ip1/ip1.md | 411 ++++++++++++++++++++++++++++++ Assignments/ip1/linter-errors.png | Bin 0 -> 50522 bytes 4 files changed, 411 insertions(+) create mode 100644 Assignments/ip1/ActionsTab.png create mode 100644 Assignments/ip1/class-diagram.png create mode 100644 Assignments/ip1/ip1.md create mode 100644 Assignments/ip1/linter-errors.png diff --git a/Assignments/ip1/ActionsTab.png b/Assignments/ip1/ActionsTab.png new file mode 100644 index 0000000000000000000000000000000000000000..8f064c1a4f517e61708151d5d449cfd542165c69 GIT binary patch literal 10961 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 literal 0 HcmV?d00001 diff --git a/Assignments/ip1/class-diagram.png b/Assignments/ip1/class-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..4501dd424282b3310af1b53ca3d631f917c84379 GIT binary patch literal 69588 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 literal 0 HcmV?d00001 diff --git a/Assignments/ip1/ip1.md b/Assignments/ip1/ip1.md new file mode 100644 index 0000000..d8ddc29 --- /dev/null +++ b/Assignments/ip1/ip1.md @@ -0,0 +1,411 @@ +--- +layout: assignment +title: "Individual Project 1" +permalink: /assignments/ip1 +parent: Assignments +nav_order: 1 +due_date: "Wednesday January 22, 2025 12:00pm EST (Noon)" +submission_notes: Submit through Github Classroom +--- + +Welcome aboard to the Stack Overflow team! We're glad that you're here and ready to join our development team as a new software engineer. +We're building an interactive application for an online community to share their knowledge and experience, and are very happy to see that we have so many new developers who can help make this application a reality. +By the end of the semester, you'll be able to propose, design, implement, and test new features for our project. +We understand that some of you may have some web development experience, but don't expect that most of you do, and hence, we have created an individual project to help you get up to speed with our existing codebase and development environment. + +FakeStackOverFlow is a web application that consists of some code that runs in each client's web browser, and also code that runs on a server. + +This implementation effort will be split across two deliverables. In this first deliverable, you will implement and test the core backend components for this feature, and in the second deliverable, you will implement and test the frontend components. + +## Objectives of this assignment + +The objectives of this assignment are to: + +- Get you familiar with the basics of TypeScript, VSCode, and the project codebase +- Learn how to read and write code in TypeScript +- Translate high-level requirements into code +- Learn how to write unit tests with Jest + +## Getting started with this assignment + +Start by accepting our [invitation](https://classroom.github.com/a/2DE23Yji). It will create a Github repository for you which will include the starter code for this assignment. In case you have enrolled in the course recently, you may not find your name in the list. Please create a piazza post to contact us and we will add you to the Github Classroom roster. + +If you are new to Git, you may want to review the getting started page available in your project repository (look for "The Basics of GitHub.md")! + +### 1. Prerequisites + +#### 1.1 Install Node.js and npm + +If you haven't installed npm and node.js, follow the [tutorial on setting up a development environment for this class]({{site.baseurl}}{% link tutorials/week1-getting-started.md %}) + +#### 1.2 Install MongoDB + +We use MongoDB as the NoSQL database to store data related to this application. + +1. Follow the [instructions in the official MongoDB documentation](https://www.mongodb.com/docs/manual/administration/install-community/) to install the free community edition. +2. Choose 'Install on Linux', 'Install on macOS', or 'Install on Windows', depending on your system. (the following steps are for Windows) +3. Scroll down to the section labeled 'Install MongoDB Community Edition.' and click on [MongoDB Download Center](https://www.mongodb.com/try/download/community?tck=docs_server). +4. For Windows, in the Package dropdown, select `msi`. Then download and run the installer. +5. On Windows, select the _“Install MongoDB as a Service”_ checkbox and install. This will start MongoDB as a background service. +6. Install "MongoDB Compass" if prompted. +7. Verify if the MongoDB server is running using the Windows Services app. + +Mongo offers several methods of interacting with your Mongo databases. + +- MongoDB Compass is an interactive application for creating, modifying, and querying MongoDB connections. It should be started as part of the installation process, showing a connection to `mongodb://localhost:27017/`. + + For Windows, install MongoDB Compass using the instructions above. + + For Mac: + + - Download the dmg file from https://www.mongodb.com/try/download/compass. Once the application starts: + 1. Click on "Add new connection" in the left sidebar. + 2. Make sure the URI field contains `mongodb://localhost:27017` + 3. Click on "Connect" - MongoDB will need to be running as a macOS service + +- Mongo shell (_mongosh_) provides a command-line interface that can be used to interact with databases in MongoDB. + + For Windows: + + - Download it [here](https://www.mongodb.com/try/download/shell) using the msi package. You can also use _mongosh_ to see if the MongoDB server is running. Try the MongoDB Community Edition and the command `show dbs`; you should see a list of existing databases in your local instance. + + For Mac: + + - Mongo shell is automatically installed with MongoDB through the Mac installation instructions. To use it, make sure MongoDB is running as a macOS service, then type `mongosh` into the terminal. + +- Last and most important, you can use the [Mongoose api](https://mongoosejs.com/docs/index.html) to interact with MongoDB through your JavaScript or TypeScript programs. Mongoose will be installed as part of the installation process for the project starter code. + +### 2. Install the starter code and its dependencies + +The starter code package, of which this is a part, is divided into 3 main directories: _client_, _server_, and _testing_. + +1. Navigate to the root directory of the repo. +2. Install the dependencies for each directory by running the following commands: + +```shell +cd client/ +npm install +cd ../server +npm install +cd ../testing +npm install +``` + +Once you install the dependencies, you might see the following ESlint errors in some files. The linter error indicates that the code contains carriage return characters (\r, represented as ␍) at the end of each line and usually happens when the file has Windows-style line endings (\r\n) instead of Unix-style line endings (\n). To fix this, you can click on the "CRLF" icon on the lower right corner of VSCode and change it to "LF". Note that this does not count as a linting error when grading. +![image]({{site.baseurl}}{% link /Assignments/ip1/linter-errors.png %}) + +### 3. Setup Environment Variables\*\* + +1. Create a file called `.env` in `./client`. In `./client/.env` ensure the following lines: + +``` +REACT_APP_SERVER_URL=http://localhost:8000 +``` + +2. Create a file called `.env` in `./server`. In `./server/.env` ensure the following lines: + +``` +MONGODB_URI=mongodb://127.0.0.1:27017 +CLIENT_URL=http://localhost:3000 +PORT=8000 +``` + +### 4. Populate the initial database + +{: .note } +Right now, you may run into errors regarding unknown properties. Once you finish implementing both Task 1 and 2 and modify the schema, you should be able to populate the database correctly. + +1. In the `server` directory, run `npm run populate-db` to populate the `fake_so` database with example data that follows the schema definition. +2. If you want to delete all the data at any point, you can use `npm run delete-db` to delete all entries in the `fake_so` database. + +### 5. Familiarize Yourself with Project Dependencies + +1. Ensure the following packages are installed: mongoose, express, jest, eslint, axios, cors, and nodemon. +2. Refer to the documentation for the following packages: + +- [Express](https://expressjs.com/) is a framework to write server-side code. + +- The [mongoose data modeling library](https://mongoosejs.com/docs/index.html). Mongoose provides JS/TS bindings to MongoDB, so we can manage and manipulate the data from our JS/TS programs. +- [nodemon](https://www.npmjs.com/package/nodemon) accelerates the development by automatically restarting a node application when file changes in the directory are detected. +- We use the [axios](https://axios-http.com/docs/intro) library to send HTTP requests to our server from our client application. + +- We use [cors](https://www.npmjs.com/package/cors) to regulate the permissible connections between the + clients and the server. The current cors configuration allows all + connections to the server for convenience. This is fine for a development environment. In a + production environment where the application is deployed on a cloud service, the CORS policy needs to be specified more strictly. Read more about CORS [https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS). + +- We use [mockingoose](https://github.com/alonronin/mockingoose) to mock Mongoose functions when testing. + +### 6. Explore Useful Resources + +1. Express Tutorial: [https://expressjs.com/en/guide/routing.html](https://expressjs.com/en/guide/routing.html) +2. MongoDB tutorial: [A mini tutorial]({{site.baseurl}}{% link tutorials/week1-mongodb-mongoose.md %}). +3. Mongoose Queries: [https://mongoosejs.com/docs/queries.html](https://mongoosejs.com/docs/queries.html) +4. Mongoose Documents: [https://mongoosejs.com/docs/documents.html](https://mongoosejs.com/docs/documents.html) +5. Jest Basics: [https://jestjs.io/docs/getting-started](https://jestjs.io/docs/getting-started) +6. Mocking in Jest: [https://jestjs.io/docs/mock-functions](https://jestjs.io/docs/mock-functions) +7. Mocking Mongoose functions: [https://github.com/alonronin/mockingoose](https://github.com/alonronin/mockingoose) +8. Postman tutorial: [API Requests & Postman tutorial]({{site.baseurl}}{% link tutorials/week1-apirequests-postman.md %}) + +## Server/Client Architecture + +The schemas for the database are documented in the directory `server/models/schema`. +A class diagram for the schema definition is +shown below: + +![image]({{site.baseurl}}{% link /Assignments/ip1/class-diagram.png %}) + +The starter code package, of which this is a part, is divided into 3 main directories: _client_, _server_, and _testing_. + +### Client + +Running `npm run start` will start a client on port 3000. +The client code uses Axios to send HTTP method requests to the server. You should review the client code to understand +how axios sends requests and how the response from the server is processed. You don’t need to make any changes to the client code. + +### Server + +The server is responsible for taking HTTP requests from the client and executing them on the database. The server code resides in the `server/` directory. The server is responsible for all the data that is sent back and forth to the database. + +The main server script is in `server/server.ts`. Running `npm run start` +will start an HTTP server, which will take HTTP requests on [**https://localhost:8000**](https://localhost:8000/), and execute them on the running database instance. + +You can send requests to the server using a tool like Postman, or by writing scripts that use axios to send requests to `localhost:8000`, as you did in the Async activity. + +When the server is terminated (using CTRL+C), the message **“Server closed.”** should be displayed. However, the MongoDB service will still be running (You can run `mongosh` to confirm) + +### Testing + +Unit tests for the server are in `server/tests/*/*.spec.ts`. These are written in Jest, which you are already familiar with. + +To run the entire set of server tests, go to the server directory and say `npm run test`. Please ensure that the MongoDB server is up and running for the tests to pass. + +If you want to run specific tests, we recommend that you install vsc-jest-runner in your VSC, and select the test or tests that you would like to run. + +### Summary of the default host/port settings + +| | | +| :---------------- | :--------------------------------------------------------------------- | +| Client Instance | [https://localhost:3000/](https://localhost:3000/) | +| Server Instance | [https://localhost:8000/](https://localhost:8000/) | +| Database Instance | [mongodb://127.0.0.1:27017/fake_so](mongodb://127.0.0.1:27017/fake_so) | + +## Recommendations when working on the project + +1. Open the client application in a browser and interact with it. While interacting, monitor + the application tab in the browser’s developer tools. The application tab will give you + information about the HTTP requests the client sends to the server. The HTTP requests + will contain URIs in their headers. You can use this information to understand the + endpoints in the server. +2. Read the Jest tests. The Jest tests list all the endpoints the server should have, and the + types of HTTP method associated with them. Further, the tests also have information + about the Mongoose functions that need to be invoked for the service to send a + successful response. +3. Start by defining the schemas in the server/models/schema directory to ensure the data structure is consistent. +4. Ensure that you run all Jest tests. These tests are designed to catch issues early. Once all Jest tests pass, the Cypress tests should also pass, assuming no significant changes have been made to the client’s implementation. +5. Use Postman to interact with and manually test your solutions and verify that database queries work as expected. +6. Follow the [debugging policy](https://neu-se.github.io/CS4530-Spring-2025/policies/debugging/) to help in the debugging process. + +## Implementation Tasks + +This deliverable has 2 parts; each part will be graded on its own rubric. You should complete the assignment one part at a time, in the order presented here. + +### Task 1: Add `User`s + +Currently, our site doesn't allow for users to create unique accounts to use the forum. The objective of this task is to enhance the current functionality by allowing users to: + +1. Sign up +2. Get an account by the username +3. Log in +4. Reset their password +5. Delete their account + +As a security feature, make sure to NOT return the user's password in the result of an operation. We've defined a `SafeUser` type to indicate these kinds of objects. Make sure you follow TDD, so work your way up by making sure your code passes the initial tests provided. For all API endpoints, make sure to validate the provided request and return the appropriate success or error response from the route. Also, include appropriate error handling for functions added. + +#### Steps to Achieve This + +1. **Create the `User` schema** + + Define the mongoose schema for a `User` in `server/models/schema/user.schema.ts`. Each `User` should have a unique username, a password, and the date the account was created. + +2. **Define the `User` model** + + In `server/models/user.model.ts`, define the mongoose model to be able to perform database operations. + +3. **Define relevant TypeScript types** + + In `server/types/user.d.ts`, define the relevant `User` and `UserCredentials` types to mirror the schema definition. Make sure to avoid repeated definitions of fields between the interfaces. + +4. **Implement the `saveUser` function** + + In `server/services/user.service.ts`, implement the logic for creating a new `User` document in the database. + +5. **Implement the `createUser` endpoint** + + In `server/controllers/user.controller.ts`, implement the `createUser` endpoint. This route will handle POST requests to create a new user with the provided credentials in the request body. You do not need to encrypt the password when storing in the database. + +6. **Implement the `getUserByUsername` function** + + In the user service, write the logic finding a `User` document by the username in the database. + +7. **Implement the `getUser` route** + + In the user controller, complete the `getUser` endpoint so that it returns the user object that matches the provided username in the GET request params. + +8. **Implement the `loginUser` function** + + In the user service, write the logic to validate if the provided username and password match the document in the database. + +9. **Implement the `loginUser` route** + + In the user controller, complete the `loginUser` endpoint so that the provided credentials in the POST request are validated, and a 200 OK response is returned for a success. + +10. **Implement the `updateUser` function** + + In the user service, write code to update the `User` document that matches the provided username with the new values of `User` fields. + +11. **Implement the `resetPassword` endpoint** + + In the user controller, fill in the `resetPassword` PATCH endpoint to update the matching user's password field. + +12. **Implement the `deleteUser` function** + + In the user service, complete the function to delete the document with the matching username from the database. + +13. **Implement the `deleteUser` route** + + In the user controller, use the username provided in the DELETE request params to delete the user from the database. + +14. **Add the routes to the router** + + Define the appropriate API routes on the Express router for each of the functions implemented in the previous steps. + +15. **Test all added functions** + + We've provided initial tests to provide some information on the expected behavior of the routes and functions. Using the requirement descriptions above, write additional tests for all the added functions and routes, covering different branches, edge cases, etc. to verify the correctness of your code. + + In addition to automated tests, you should also manually test your route using Postman and MongoDBCompass to ensure that any database queries are correct since we use database mocks while testing with Jest. + +#### Grading (55 points) + +- Define schema, model, and User types = 5 points +- Implement `user.service.ts` functions = 10 points + - 2 points for each function +- Implement `user.controller.ts` endpoints = 20 points + - 4 points for each route +- Testing = 20 points + - 2 points for each function + +### Task 2: Implement Global Chat + +Our website only allows user communication by asking and answering questions. Although any changes to a question is reflected immediately through the use of Socket.io, it is still not an ideal way of real-time communication. In this task, we are going to add a Global Chat system, similar to a public chat room. + +#### Steps to Achieve This + +1. **Create the `Message` schema** + + Define the mongoose schema for a `Message` in `server/models/schema/message.schema.ts`. Each `Message` should be able to store the text content, the username of the sender, and the time it was sent. + +2. **Define the `Message` model** + + In `server/models/message.model.ts`, define the mongoose model to be able to perform database operations. + +3. **Define relevant TypeScript types** + + In `server/types/message.d.ts`, define the relevant `Message` type to reflect the schema defintion. + +4. **Implement the `saveMessage` function** + + In `server/services/message.service.ts`, implement the logic for creating a new `Message` document in the database. + +5. **Implement the `addMessageRoute` endpoint** + + In `server/controller/message.controller.ts`, implement the `addMessageRoute` endpoint. This route will handle POST requests to create a new message with the provided parameters in the request body. + +6. **Implement the `getMessages` function** + + In `server/services/message.service.ts`, implement the function for returning all messages from the database, sorted by date in ascending order. + +7. **Implement the `getMessagesRoute` endpoint** + + In `server/controller/message.controller.ts`, complete the `getMessagesRoute` endpoint so that it returns all messages. + +8. **Test all added functions** + + The frontend code of Task 2 is provided to you. If you have done everything correctly, you should now be able to run the webpage and test the functionality of the Global Chat feature manually. + + In addition, write additional automated tests in `server\tests\controllers\message.controller.spec.ts` and `server\tests\services\message.service.spec.ts`. + +{: .note } +Did you see the pattern in both Task 1 and Task 2? For your final project, when you add a new feature, consider if your new feature should follow this pattern and what change would be needed. For example, if you were to add a direct messaging feature, how should you modify `Message` so that the web app can send it to a specific user? + +#### Grading (35 points) + +- Define Schema, Model, and Message Types = 4 points +- Implement `message.service.ts` Functions = 4 points + - 2 pts for each function +- Implement `message.controller.ts` Endpoints = 13 points + - isRequestValid = 2 points + - isMessageValid = 2 pts + - addMessageRoute = 5 pts + - getMessagesRoute = 4 pts +- Testing = 12 points + - 1.5 points for each function + +## Submission Instructions & Grading + +You will submit your assignment using GitHub Classroom. + +This submission will be scored out of 100 points, 90 of which will be awarded for implementation of tasks and accompanying tests, and the remaining 10 for following style guidelines. + +Your code will automatically be evaluated for linter errors and warnings. + +- Each lint error or warning will result in a deduction of -2 points (up to a maximum of 30 points). +- This will not affect the 10 style points. +- Line endings will not be counted as errors. + +The starter code comes with some lint problems, You are expected you to fix these linter problems, many of them will be fixed as you implement the tasks. + +**The use of `eslint-disable` statements is NOT allowed. Each instance outside what is provided in the starter code will have points deducted.** + +You can run the following command within the client or server to fix some common lint errors + +``` +npm run lint:fix +``` + +#### Testing + +You will be provided with starter code that includes a set of tests. Your task is to ensure that all existing tests pass and to create additional tests to cover any new functionality or edge cases. + +### Manual Grading + +Your code will be manually evaluated for conformance to our [course style guide](https://neu-se.github.io/CS4530-Spring-2025/policies/style/). **Do not wait to run the linter until the last minute**. To check for linter errors, run the command `npm run lint` from the terminal. The handout contains the same ESlint configuration that is used by our grading script. + +This manual evaluation will account for 10% of your total grade on this assignment. We will manually evaluate your code for style on the following rubric: + +To receive all 10 points: + +- All new names (e.g. for local variables, methods, and properties) follow the naming conventions defined in our style guide +- There are no unused local variables +- All public properties and methods (other than getters, setters, and constructors) are documented with JSDoc-style comments that describe what the property/method does, as defined in our style guide +- The code and tests that you write generally follows the design principles discussed in week one. In particular, your design does not have duplicated code that could have been refactored into a shared method. +- No duplicate code is allowed. + +We will review your code and note each violation of this rubric. We will deduct 2 points for each violation, up to a maximum of deducting all 10 style points. + +#### GitHub Actions for Test and Lint Output + +Once your submission is pushed to your main branch, GitHub will automatically run linting and the tests in `server/tests` for your submission. Check the Actions tab on GitHub classroom to see the output of the run. This output will be used for grading, so ensure there are no errors in the Actions run. + +![image]({{site.baseurl}}{% link /Assignments/ip1/ActionsTab.png %}) + +#### Debugging + +If you need help troubleshooting a problem, be sure to follow all the steps outlined in the course's [debugging policy]({{ site.baseurl }}{% link debugging.md %}). This will ensure you have exhausted all initial debugging strategies before reaching out for assistance from the TAs. + +### Academic Integrity + +Please refer to the [course policy page](https://neu-se.github.io/CS4530-Spring-2025/policies/#academic-integrity) for more details. + +**For this assignment, the use of co-pilot or other generative AI technologies such as ChatGPT is not allowed.** diff --git a/Assignments/ip1/linter-errors.png b/Assignments/ip1/linter-errors.png new file mode 100644 index 0000000000000000000000000000000000000000..fba8b0f05bd694acb5f7f033e95615200289300b GIT binary patch literal 50522 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 literal 0 HcmV?d00001 From fd3c0ff9643157aeda63a7c465a76ea650977479 Mon Sep 17 00:00:00 2001 From: "Adeel A. Bhutta" Date: Fri, 3 Jan 2025 16:57:27 -0500 Subject: [PATCH 2/4] adding links for ip1 and announcement --- _announcements/week-1.md | 16 ++++++++++++++++ _data/modules.yml | 2 +- lectures/l1.md | 2 +- lectures/l2.md | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 _announcements/week-1.md diff --git a/_announcements/week-1.md b/_announcements/week-1.md new file mode 100644 index 0000000..481b199 --- /dev/null +++ b/_announcements/week-1.md @@ -0,0 +1,16 @@ +--- +title: Welcome to CS4530 - Spring 2025 +week: 1 +date: 2025-01-03 +--- + +On behalf of the entire [instructional team](https://neu-se.github.io/CS4530-Spring-2025/staff) (all 2 instructors and 18 TAs), welcome to the Spring 2025 edition of CS 4530! [This website](https://neu-se.github.io/CS4530-Spring-2025/) will contain all of the lectures, assignments and tutorials for the class. Our [Canvas site](https://northeastern.instructure.com/courses/202301) contains your gradebook as well as single-sign-on links to Piazza (for discussion), instructions for submitting assignments and replicates much of the material from the class website. + +In advance of the first week of class, we've shared the [calendars for each section](https://neu-se.github.io/CS4530-Spring-2025/calendar/), the first two lectures, and tutorials on installing your IDE, Typescript, Unit testing with Jest, MongoDB and API Requests. The schedule of office hours will also be posted on the staff page by MOnday. We will start holding office hours from Monday Jan 6th. + +The first [individual project deliverable](https://neu-se.github.io/CS4530-Spring-2025/assignments/ip1) is now available. This deliverable is due by January 22nd at 12pm (Noon) ET. Your work will be submitted through github Classroom. We would encourage you to start working on this assignment early. Feel free to use piazza to ask questions and use office hours if you need help. We have 72 hours of scheduled TA office hours per week. + +Zoom link for the online section can be found on Canvas -> Zoom Meetings. + +We are excited to meet you all next week! +{: .fs-5 } diff --git a/_data/modules.yml b/_data/modules.yml index 0118c11..bdd618d 100644 --- a/_data/modules.yml +++ b/_data/modules.yml @@ -92,7 +92,7 @@ dependency: ip1: name: Individual Project 1 type: deadline - page: + page: /assignments/ip1 ip2: name: Individual Project 2 type: deadline diff --git a/lectures/l1.md b/lectures/l1.md index a106071..5e05195 100644 --- a/lectures/l1.md +++ b/lectures/l1.md @@ -20,7 +20,7 @@ In this lecture, you will learn * two different ways to solicit and document our users' requirements ### Important Dates: -* Individual Project 1 **Due Wednesday, January 22 by 12pm (Noon)**{: .label .label-red } +* [Individual Project 1]({{ site.baseurl }}{% link Assignments/ip1/ip1.md %}) **Due Wednesday, January 22 by 12pm (Noon)**{: .label .label-red } {% include lesson.html %} diff --git a/lectures/l2.md b/lectures/l2.md index 96c221e..5d01eef 100644 --- a/lectures/l2.md +++ b/lectures/l2.md @@ -19,7 +19,7 @@ In this lecture, you will learn to: ### Important Dates: -* Individual Project 1 **Due Wednesday, January 22 by 12pm (Noon)**{: .label .label-red } +* [Individual Project 1]({{ site.baseurl }}{% link Assignments/ip1/ip1.md %}) **Due Wednesday, January 22 by 12pm (Noon)**{: .label .label-red } {% include lesson.html %} From bc7e63cb042ae35319037e63f917827b2ee2bf2d Mon Sep 17 00:00:00 2001 From: "Adeel A. Bhutta" Date: Fri, 3 Jan 2025 21:17:18 -0500 Subject: [PATCH 3/4] updated wk1 anncmnt --- _announcements/week-1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_announcements/week-1.md b/_announcements/week-1.md index 481b199..4f4f040 100644 --- a/_announcements/week-1.md +++ b/_announcements/week-1.md @@ -6,11 +6,11 @@ date: 2025-01-03 On behalf of the entire [instructional team](https://neu-se.github.io/CS4530-Spring-2025/staff) (all 2 instructors and 18 TAs), welcome to the Spring 2025 edition of CS 4530! [This website](https://neu-se.github.io/CS4530-Spring-2025/) will contain all of the lectures, assignments and tutorials for the class. Our [Canvas site](https://northeastern.instructure.com/courses/202301) contains your gradebook as well as single-sign-on links to Piazza (for discussion), instructions for submitting assignments and replicates much of the material from the class website. -In advance of the first week of class, we've shared the [calendars for each section](https://neu-se.github.io/CS4530-Spring-2025/calendar/), the first two lectures, and tutorials on installing your IDE, Typescript, Unit testing with Jest, MongoDB and API Requests. The schedule of office hours will also be posted on the staff page by MOnday. We will start holding office hours from Monday Jan 6th. +In advance of the first week of class, we've shared the [calendars for each section](https://neu-se.github.io/CS4530-Spring-2025/calendar/), the first two lectures (with related activities), and tutorials on installing your IDE, Typescript, Unit testing with Jest, MongoDB and API Requests. The schedule of office hours will also be posted on the staff page soon. We will start holding office hours from Monday Jan 6th. The first [individual project deliverable](https://neu-se.github.io/CS4530-Spring-2025/assignments/ip1) is now available. This deliverable is due by January 22nd at 12pm (Noon) ET. Your work will be submitted through github Classroom. We would encourage you to start working on this assignment early. Feel free to use piazza to ask questions and use office hours if you need help. We have 72 hours of scheduled TA office hours per week. -Zoom link for the online section can be found on Canvas -> Zoom Meetings. +Zoom link for the online section (Section 4) can be found on Canvas -> Zoom Meetings. We are excited to meet you all next week! {: .fs-5 } From 66315d58a00220d38e158b8b51be37a4adafc1cc Mon Sep 17 00:00:00 2001 From: Vatsal Mehta Date: Fri, 3 Jan 2025 21:56:06 -0500 Subject: [PATCH 4/4] fixed typos in instructions --- Assignments/ip1/ip1.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Assignments/ip1/ip1.md b/Assignments/ip1/ip1.md index d8ddc29..644ef36 100644 --- a/Assignments/ip1/ip1.md +++ b/Assignments/ip1/ip1.md @@ -210,7 +210,7 @@ If you want to run specific tests, we recommend that you install vsc-jest-runner This deliverable has 2 parts; each part will be graded on its own rubric. You should complete the assignment one part at a time, in the order presented here. -### Task 1: Add `User`s +### Task 1: Add Users Currently, our site doesn't allow for users to create unique accounts to use the forum. The objective of this task is to enhance the current functionality by allowing users to: @@ -234,7 +234,7 @@ As a security feature, make sure to NOT return the user's password in the result 3. **Define relevant TypeScript types** - In `server/types/user.d.ts`, define the relevant `User` and `UserCredentials` types to mirror the schema definition. Make sure to avoid repeated definitions of fields between the interfaces. + In `server/types/user.d.ts`, define the relevant types as marked by _TODO: Task 1_. Make sure to avoid repeated definitions of fields between the interfaces. 4. **Implement the `saveUser` function** @@ -284,7 +284,7 @@ As a security feature, make sure to NOT return the user's password in the result We've provided initial tests to provide some information on the expected behavior of the routes and functions. Using the requirement descriptions above, write additional tests for all the added functions and routes, covering different branches, edge cases, etc. to verify the correctness of your code. - In addition to automated tests, you should also manually test your route using Postman and MongoDBCompass to ensure that any database queries are correct since we use database mocks while testing with Jest. + In addition to automated tests, you should also manually test your route using Postman and MongoDB Compass to ensure that any database queries are correct since we use database mocks while testing with Jest. #### Grading (55 points) @@ -320,7 +320,7 @@ Our website only allows user communication by asking and answering questions. Al 5. **Implement the `addMessageRoute` endpoint** - In `server/controller/message.controller.ts`, implement the `addMessageRoute` endpoint. This route will handle POST requests to create a new message with the provided parameters in the request body. + In `server/controllers/message.controller.ts`, implement the `addMessageRoute` endpoint. This route will handle POST requests to create a new message with the provided parameters in the request body. 6. **Implement the `getMessages` function** @@ -328,13 +328,13 @@ Our website only allows user communication by asking and answering questions. Al 7. **Implement the `getMessagesRoute` endpoint** - In `server/controller/message.controller.ts`, complete the `getMessagesRoute` endpoint so that it returns all messages. + In `server/controllers/message.controller.ts`, complete the `getMessagesRoute` endpoint so that it returns all messages. 8. **Test all added functions** The frontend code of Task 2 is provided to you. If you have done everything correctly, you should now be able to run the webpage and test the functionality of the Global Chat feature manually. - In addition, write additional automated tests in `server\tests\controllers\message.controller.spec.ts` and `server\tests\services\message.service.spec.ts`. + In addition, write additional automated tests in `server/tests/controllers/message.controller.spec.ts` and `server/tests/services/message.service.spec.ts`. {: .note } Did you see the pattern in both Task 1 and Task 2? For your final project, when you add a new feature, consider if your new feature should follow this pattern and what change would be needed. For example, if you were to add a direct messaging feature, how should you modify `Message` so that the web app can send it to a specific user?