CSE 341 Projects

Each of these projects will last for about 1/3 of the course. This page is here to provide you with overall expectations, requirements and guidelines for these projects to help direct you through this course.

Project Requirements

This is an independent project that you will complete as you do your personal assignments for lessons 1-4 in this course.

  • This project is called Contacts API. Database should store contact info and some extra info about each person. As a minimum, each contact should have: firstName, lastName, email, favoriteColor, and birthday.
  • Node project successfully connects to MongoDB
  • API routes perform GET, POST, PUT, DELETE requests that are fully functional
  • API Documentation is professional, comprehensive, relevant, and accurate
  • API is published to Render and can be called from external sources
  • YouTube video demonstration of roughly 1 minute demonstrating each API route in API documentation, and showing the database being modified.
  • Submit the following links in I-learn: GitHub repo, Render site, and YouTube video.

Grading Criteria

  • Your assignment will receive a zero if it doesn't have a YouTube link, a GitHub link, AND a Render link submitted in I-learn.
  • Your assignment will receive a zero if any type of cheating takes place.
  • The grading breakdown is depicted in the rubric below:

Extra Credit Opportunity

  • 10% for demonstrating the use of your API with the frontend React application provided in the lesson 4 assignment. Successfully perform GET, POST, PUT and DELETE through the frontend UI for full 10% extra credit.
  • Discuss details with your instructor

Rubric

CriteriaWeightMasteryProficientDevelopingBeginningMissing/Incomplete
100%90%78%65%0%
HTTP Requests

(Graded via YouTube)
25%Meets Proficient criteria and performs PUT request. MongoDB is updatedMeets Developing criteria and performs POST and DELETE requests. MongoDB is updatedMeets Beginning criteria and performs GET requests from MongoDBNode project has evidence of http requestsGitHub link, or YouTube link not submitted. Or no evidence of HTTP requests
API Documentation

(Graded via YouTube)
25%Meets Proficient criteria and the swagger.json contains a contact schema that is used in all of the routesMeets Developing criteria and the route: "/api-docs" is accessible and is able to test the endpointsMeets Beginning criteria and the following routes are present in the swagger.json: GET all, GET by id, PUT, POST, and DELETENode project contains a swagger.json file with some content in it relevant to the "contacts" projectNo API documentation present (no swagger.json or "api-docs" route in project for swagger)
Deployment

(Graded via YouTube)
25%Meets Proficient criteria and uses Render Config Vars (no database credentials stored in GitHub - must show GitHub repo in video)Meets Developing criteria and video shows project functionality using Render (not localhost)Meets Beginning criteria, project is deployed to Render and Render shows no errorsRender project has been createdRender link, GitHub link, or YouTube link not submitted
Database

(Graded via YouTube)
15%Meets Proficient criteria and the contacts in the database have the following fields: firstName, lastName, email, favoriteColor, and birthdayMeets Developing criteria and the contacts collection has at least five contactsMeets Beginning criteria and MongoDB has a collection called "contacts"MongoDB account exists and was demonstrated in the videoNo evidence of database present or no YouTube link
Architecture

(Graded via GitHub)
10%Meets Proficient criteria plus includes a .rest file with routes for localhost and RenderMeets Developing criteria plus each route calls a function imported from a controllerMeets Beginning criteria plus server connects to routes in project "routes" folder using only a single line of codeServer file is present in root folder (server.js, index.js or app.js) to run the Node projectRender link not submitted
Extra Credit
Frontend Integration

(Graded via YouTube)
10%Meets Developing criteria and the backend PUT works on the frontend and the data change shows in MongoDBMeets Developing criteria and the backend POST works on the frontend and the data change shows in MongoDBMeets Beginning criteria and the backend DELETE works on the frontend and the data change shows in MongoDBThe backend GET works on the frontendNo attempt made or nothing works

Project Requirements

This is an independent project that you will complete as you do your personal assignments for lessons 5-8 in this course.

  • You get to choose what this project is
  • Database should store at least two collections
  • At least one collection should store documents that have 7 fields or more
  • Node project successfully connects to MongoDB
  • API routes perform GET, POST, PUT, DELETE requests that are fully functional
  • All routes should include data validation and error handling
  • Project must incorporate use of OAuth for user management.
  • API Documentation is professional, comprehensive, relevant, and accurate
  • API is published to Render and can be called from external sources
  • YouTube video demonstration of roughly 1 minute demonstrating each API route in API documentation, and showing the database being modified.
  • Submit the following links in I-learn: GitHub repo, Render site, and YouTube video.

Grading Criteria

  • Your assignment will receive a zero if it doesn't have a YouTube link, a GitHub link, AND a Render link submitted in I-learn.
  • Your assignment will receive a zero if any type of cheating takes place.
  • The grading breakdown is depicted in the rubric below

Extra Credit Opportunity

  • 20% for using GraphQL instead of REST
  • 20% for using valid TypeScript for your entire Node project
  • Discuss details with your instructor

Rubric

CriteriaWeightMasteryProficientDevelopingBeginningMissing/Incomplete
100%90%78%65%0%
Deployed to the Web

(Graded via YouTube)
20%Meets Proficient criteria and video shows use of Render CONFIG VARS to connect to MongoDBMeets Developing criteria and app connects to MongoDBMeets Beginning criteria and Render url can be opened without any errorsNode.js app deployed to RenderRender link or YouTube link not submitted
OAuth

(Graded via YouTube)
20%Meets Proficient criteria and the video shows that each protected route (needs authentication) requires authentication before accessMeets Developing criteria and user can log out using OAuthMeets Beginning criteria and user can log in using OAuthEvidence of OAuth is in the Node.js projectGitHub link or YouTube link not submitted, or No evidence of OAuth in project
Database

(Graded via YouTube)
15%Meets Proficient criteria and at least one collection features documents with at least 7 fieldsMeets Developing criteria and database has at least 2 collectionsMeets Beginning criteria and database has a single collectionDatabase exists and is shown in the videoGitHub link or YouTube link not submitted, or No evidence of Database in project
HTTP Requests

(Graded via YouTube)
15%Meets Proficient criteria plus at least 2 collections have a PUT or DELETE request (MongoDB change is shown in video)Meets Developing criteria plus at least 2 collections have a POST request (MongoDB change is shown in video)Meets Beginning criteria plus at least one HTTP Request is present for each collection in the databaseSeveral HTTP Requests are in the project and work (shown in video)GitHub link, Render link or YouTube link not submitted
API Documentation

(Graded via Render)
10%Meets Proficient criteria and the documentation can test each endpoint (GET, POST, PUT, DELETE are all modified when testing from the documentation)Meets Developing criteria and the documentation is published (either to Render at "/api-docs" route, or to apollo server)Meets Beginning criteria and documentation is organized by collectionThe swagger.json file is present (or Apollo server is shown in video for graphql extra credit)Render link, GitHub link, or YouTube link not submitted. Or no evidence of API documentation
Data Validation

(Graded via GitHub)
10%Meets Proficient criteria and each route has data validation, and returns some type of 400 or 500 error if data requirements aren't metMeets Developing criteria and data validation is being used for each PUT and DELETE routeMeets Beginning criteria and data validation is being used for each GET and POST routeNode project has evidence of data validation (for example: checks for at least one variable's existence before continuing)GitHub link or Render link not submitted
Error Handling

(Graded via GitHub)
10%Meets Proficient criteria and each route has error handling, and returns some type of 400 or 500 status when errors get thrownMeets Developing criteria and error handling is being used for each PUT and DELETE routeMeets Beginning criteria and error handling is being used for each GET and POST routeNode project has evidence of error handling (for example: at least one try/catch)GitHub link or Render link not submitted
Extra Credit
GraphQL instead of REST

(Graded via YouTube)
20%Meets Proficient criteria and REST is not used at all, only GraphQL (should be shown in YouTube video)Meets Developing criteria and project uses GraphQL to access and modify MongoDB (should be shown in YouTube video)Meets Beginning criteria and project uses GraphQL for some aspects (should be shown in YouTube video)GitHub link (perhaps in previous commits) and YouTube video show that GraphQL was attemptedGitHub link, Render link, or YouTube link not submitted
Extra Credit
TypeScript

(Graded via YouTube)
20%Meets Proficient criteria and there is not a single file in project with ".js" extension. All JavaScript files have been replaced with error-free TypeScript (.ts) filesMeets Developing criteria and project uses TypeScript for all files in "controllers" folderMeets Beginning criteria and project uses TypeScript for some aspects (should be shown in YouTube video and evident in GitHub repository)GitHub link (perhaps in previous commits) and YouTube video show that TypeScript was attemptedGitHub link, Render link, or YouTube link not submitted

Project Requirements

This is a team project that you will complete as you do your team assignments for lessons 9-13 in this course. Because of the scope of this project, you will not have any personal assignments for the duration of it so that you can focus all of your time on this team project.

  • You get to choose what this project is
  • Database should store at least 4 collections
  • At least one collection should store documents that have 7 fields or more
  • Node project successfully connects to MongoDB
  • API routes perform GET, POST, PUT, DELETE requests that are fully functional
  • All routes should include data validation and error handling
  • All routes should include unit tests
  • Project must use OAuth to handle authentication and user management.
  • API Documentation is professional, comprehensive, relevant, accurate, and functional as a REST client.
  • API is published to Render and can be accessed at this route: '/api-docs'
  • YouTube video demonstration (3-5 minutes) made with your team.
  • Submit the following links in I-learn: GitHub repo, Render site, and YouTube video.

Grading Criteria

  • Your assignment will receive a zero if it doesn't have a YouTube link, a GitHub link, AND a Render link submitted in I-learn.
  • Your assignment will receive a zero if any type of cheating takes place.
  • The grading breakdown is depicted in the rubric below. Remember that this rubric is for the project as a whole. Students on teams will all receive individual grades based on their participation in the group. This data will be gathered in I-learn from weeks 9-13 to assess the participation of each group member, and in turn calculate their final project grade. Your instructor will input all of the data from each member of your team during the project and input it into a copy of this spreadsheet. You may put numbers in here if you wish to understand more fully how your data will be used each lesson.

Extra Credit Opportunity

  • 20% for using GraphQL instead of REST
  • 20% for using valid TypeScript for your entire Node project
  • Discuss details with your instructor

Rubric

CriteriaWeightMasteryProficientDevelopingBeginningMissing/Incomplete
100%90%78%65%0%
Deployed to the Web

(Graded via YouTube)
15%Meets Proficient criteria and video shows use of Render CONFIG VARS to connect to MongoDBMeets Developing criteria and app connects to MongoDBMeets Beginning criteria and Render url can be opened without any errorsNode.js app deployed to RenderRender link or YouTube link not submitted
OAuth

(Graded via YouTube)
15%Meets Proficient criteria and the video shows that each protected route (needs authentication) requires authentication before accessMeets Developing criteria and user can log out using OAuthMeets Beginning criteria and user can log in using OAuthEvidence of OAuth is in the Node.js projectGitHub link or YouTube link not submitted, or No evidence of OAuth in project
HTTP Requests

(Graded via YouTube)
15%Meets Proficient criteria plus at least 4 collections have a PUT or DELETE request (MongoDB change is shown in video)Meets Developing criteria plus at least 4 collections have a POST request (MongoDB change is shown in video)Meets Beginning criteria plus at least one HTTP Request is present for each collection in the databaseSeveral HTTP Requests are in the project and work (shown in video)GitHub link, Render link or YouTube link not submitted, or no evidence of HTTP Requests
Testing

(Graded via YouTube and GitHub)
15%Meets Proficient criteria and unit tests exist and pass for main server.js file and .js files in routes folderMeets Developing criteria and YouTube video shows all tests running and passingMeets Beginning criteria and GitHub shows at least one unit test file for each .js file in the controllers folderGitHub shows that at least one unit test file exists (".spec.js")GitHub link or YouTube link not submitted, or No evidence of unit testing in project
Database

(Graded via YouTube)
10%Meets Proficient criteria and at least one collection features documents with at least 7 fieldsMeets Developing criteria and database has at least 4 collectionsMeets Beginning criteria and database has a single collectionDatabase exists and is shown in the videoGitHub link or YouTube link not submitted, or No evidence of Database in project
API Documentation

(Graded via Render)
10%Meets Proficient criteria and the documentation can test each endpoint (video should show MongoDB being updatedMeets Developing criteria and the documentation is published (either to Render at "/api-docs" route, or to apollo server)Meets Beginning criteria and documentation is organized by collectionThe swagger.json file is present (or Apollo server is shown in video for graphql extra credit)Render link, GitHub link, or YouTube link not submitted. Or no evidence of API documentation
Data Validation

(Graded via GitHub)
10%Meets Proficient criteria and each route has data validation, and returns some type of 400 or 500 error if data requirements aren't metMeets Developing criteria and data validation is being used for each PUT and DELETE routeMeets Beginning criteria and data validation is being used for each GET and POST routeNode project has evidence of data validation (for example: checks for at least one variable's existence before continuing)GitHub link or Render link not submitted. Or no evidence of Data Validation
Error Handling

(Graded via GitHub)
10%Meets Proficient criteria and each route has error handling, and returns some type of 400 or 500 errors get thrownMeets Developing criteria and error handling is being used for each PUT and DELETE routeMeets Beginning criteria and error handling is being used for each GET and POST routeNode project has evidence of error handling (for example: at least one try/catch)GitHub link or Render link not submitted. Or no evidence of Error Handling
Extra Credit
GraphQL instead of REST

(Graded via YouTube)
20%Meets Proficient criteria and REST is not used at all, only GraphQL (should be shown in YouTube video)Meets Developing criteria and project uses GraphQL to access and modify MongoDB (should be shown in YouTube video)Meets Beginning criteria and project uses GraphQL for some aspects (should be shown in YouTube video)GitHub link (perhaps in previous commits) and YouTube video show that GraphQL was attemptedGitHub link, Render link, or YouTube link not submitted
Extra Credit
TypeScript

(Graded via YouTube)
20%Meets Proficient criteria and there is not a single file in project with ".js" extension. All JavaScript files have been replaced with error-free TypeScript (.ts) filesMeets Developing criteria and project uses TypeScript for all files in "controllers" folderMeets Beginning criteria and project uses TypeScript for some aspects (should be shown in YouTube video and evident in GitHub repository)GitHub link (perhaps in previous commits) and YouTube video show that TypeScript was attemptedGitHub link, Render link, or YouTube link not submitted