By Team 5 (Raphaella, Osman, Benjamin, Kay, Ed)
Tech stack:
- Express web framework for Node.js.
- Nodemon to reload the server automatically.
- Jade to render view templates.
- Mongoose to model objects in MongoDB.
- ESLint for linting.
- Jest for testing.
- Cypress for end-to-end testing.
- MongoDB Atlas for AWS cloud database
- Heroku to deploy the app.
ββββββββββββββββββββββ
β β
β ROUTES ββββββββββββββββ HTTP Response
β β (HTML)
βββββββββββ¬βββββββββββ
β
Forward request to
ββββββββββββββ appropriate controller
β β β
β β βββββββββββΌββββββββββββ
β β βββββββββββββββ β β
ββββββββββββββ€ββββββββ€ ββββββββββββββΊβ β
β DATABASE β β β β βββββββββββββ β HTTP Response
ββββββββββββββΌβββββββΊβ MODELS βββββββββββββββ€ βCONTROLLERSβ βββββββββββββββΊ (HTML)
β β β β read/write β βββββββββββββ β
β β β β data β β
β β βββββββββββββββ β β
β β βββββββββββββ²ββββββββββ
ββββββββββββββ β
β
β
ββββββββββ΄ββββββββββ
β β
β VIEWS β
β (templates) β
β β
ββββββββββββββββββββ
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
β CLIENT β β ROUTES β β CONTROLLER β β MODEL β β VIEW β
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
βββββββββββββββββββ βββββββββββββββββββ
β β β β βββββββββββββββββββββββββββββββ
β β β β β β
β β GET β β Request β HTML Home β
β βββββββββββββββββββΊβ ββββββββββββββββββββββββββββββββΊβ β
β β β β β INDEX β
β HOME β β βββββββββββββββββββββββββββββββββ€ (list all shops) β
β β β β HTML β β
Home Page β ('/openbook') β β index.js β βββββββββββββββββββββββββββββββ
β β β β
β β β β
β β β β
β ββββββββββββββββββββ€ β
β β RESPONSE β β (database link)
β β β βfindAllββββββββββββββββββββ
β β β ββββββββ²β β (user does not
β β β ββΌβββββββ€ Shop.js β need to be signed
β β β β β β up to see lists)
βββββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββββ
response
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
β CLIENT β β ROUTES β β CONTROLLER β β MODEL β β VIEW β
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
βββββββββββββββββββ βββββββββββββββββββ
β β β β βββββββββββββββββββββββββββββββ
β β β β β β
β β GET β β Request β HTML Home β
β Users βββββββββββββββββββΊβ ββββββββββββββββββββββββββββββββΊβ β
β β β β β INDEX β
β ('/users/new') ββββββββββββββββββββ€ βββββββββββββββββββββββββββββββββ€ (Lists all β
USERS β β β β HTML β the posts) β
(Sign up) β β β sessions.js β βββββββββββββββββββββββββββββββ
β β β β
β β POST β β
β complete form βββββββββββββββββββ²β β
β & submit ββΌββββββββββββββββββ€ β
β β RESPONSE β β (database link)
β β β βcreate ββββββββββββββββββββ
β β β ββββββββ²β β (user needs to be
β β β ββΌβββββββ€ User.js β signed up to post
β β β β β β or favourite a shop)
βββββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββββ
response
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
β CLIENT β β ROUTES β β CONTROLLER β β MODEL β β VIEW β
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
βββββββββββββββββββ βββββββββββββββββββ
β β β β βββββββββββββββββββββββββββββββ
β β β β β β
β β β β Request β β
β ββββββββGETββββββββΊβ ββββββββββββββββββββββββββββββββΊβ β
β β β β β HTML Sessions β
β Session ββββββRESPONSEββββββ€ βββββββββββββββββββββββββββββββββ€ β
Sessions β('/sessions/new')β β β HTML β β
(log in) β β β sessions.js β βββββββββββββββββββββββββββββββ
β ββββββββPOSTβββββββΊβ β
β β β β
β ββββββRESPONSEββββββ€ β
β β β β
β β redirect/ β β (database link)
β β users/account β βfindOneββββββββββββββββββββ
β β β ββββββββ²β β (user needs to be
β β β ββΌβββββββ€ User.js β signed up to post
β β β β β β or favourite a shop)
βββββββββββββββββββ βββββββββββββββββββ ββββββββββββββββββββ
response
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
β CLIENT β β ROUTES β β CONTROLLER β β MODEL β β VIEW β
ββββββββββββββ ββββββββββ βββββββββββββββ βββββββββββ βββββββββ
βββββββββββββββββββ βββββββββββββββββββ
β β β β βββββββββββββββββββββββββββββββ
β β β β β β
β β β β Request β β
β ββββββββGETββββββββΊβ ββββββββββββββββββββββββββββββββΊβ INDEX β
β β β β β (Lists all β
β Shops ββββββRESPONSEββββββ€ βββββββββββββββββββββββββββββββββ€ the posts) β
Users area β ('/shops/new') β β β HTML β β
β β β shops.js β βββββββββββββββββββββββββββββββ
β ββββββββPOSTβββββββΊβ β
β β β β
β ββββββRESPONSEββββββ€ β
β β β β
β β redirect/ β β (database link)
β β users/account β βfindOneββββββββββββββββββββ
β β β ββββββββ²β β (user needs to be
β β β ββΌβββββββ€ User.js β signed up to post
β β β β β β or favourite a shop)
βββββββββββββββββββ ββββββββββββ²βββ¬ββββ ββββββββββββββββββββ
β β response
β β
β β ββββββββββββββββββββ
β ββββββββββββΊβ β findOne
β β Shop.js β findMany
ββββββββββββββββ€ β findAndModify
ββββββββββββββββββββ
Using TDD, we implemented the following user stories:
As a user,
So I can ...
I'd like to be able to ...
We used Trello to manage our project.
- Install Node Version Manager (NVM)
Then follow the instructions to update your
brew install nvm~/.bash_profile. - Open a new terminal
- Install the latest version of Node.js, currently
18.1.0.nvm install 18
- Fork this repository
- Rename your fork if desired to
OPENBOOK-<team name> - Clone your fork to your local machine
- Install Node.js dependencies
npm install - Install an ESLint plugin for your editor. For example: linter-eslint for Atom.
- Install MongoDB
Note: If you see a message that says
brew tap mongodb/brew brew install mongodb-community@5.0If you need to have mongodb-community@5.0 first in your PATH, run:, follow the instruction. Restart your terminal after this. - Start MongoDB
brew services start mongodb-community@5.0
- Start the server
npm start - Browse to http://localhost:3000
The server must be running locally with test configuration for the integration tests to pass.
npm run start:test
This starts the server on port 3030 and uses the OPENBOOK_test MongoDB database,
so that integration tests do not interact with the development server.
- Run all tests
npm test - Run a check
npm run lint # linter only npm run test:unit # unit tests only npm run test:integration # integration tests only




