---
# System prepended metadata

title: Final Project

---

# Final Project 

## Requirements
### User
- [ ] User can register/login with email and password
- [ ] User can log in with Fb/Google account
- [ ] User stay logged in across browser refresh
- [ ] User can edit your profile
- [ ] User can search other users by name
- [ ] user can see recommand in detail page
- [ ] User can sort product by category, name, time,
- [ ] User can add product to cart before they login
- [ ] User can edit them cart, and after them accept this bill, them can see status of this bill(cancel, watting..)
- [ ] User can comment, ratting
### Shop
- [ ] Shop can add,delete,edit, sale, product
- [ ] shop can see all product
- [ ] Shop can add Staff to rep message, and delete them
- [ ] Shop can accept bill from user or delete it


Socket.io:

- [ ] User can chat with shop

## Implementation

### DB Design
- User
    - User Model: name, email, password, avatarUrl, phoneNumber address
    - product Model: name, category, createdAt, image, price,salePrice, quantily, description,rating, review
    - Review Model: from (ref User), body, createdAt
    - Cart: user, product, status,createdAt
    - Message Model: from (ref User), to (shop), body
- Backend
  - Setup project
    - npx express-generator --no-view
    - npm i nodemon, add: "dev": "nodemon bin/www"
    - npm i dotenv cors, add them to app.js
    - remove everthing in public/
    - .env: PORT=5000, MONGODB_URI=mongodb://localhost:27017/cs-final-project-trungle
    - Put in helpers/utils.helper.js
    - Put error handlers in app.js
    - Put in mongoose connect
    - Create controllers: user.controler.js, auth.controler.js, product.controler.js, cart.controler.js
    - Middlewares: authentication, passport
    - Socket.io
- Frontend
  - Setup React app with Login/Register, redux
  - Get Current user when the app restart
  - Add Fb/Google Login
  - UI
  - Setup Cart
  - Get the list of product
  - Get the list of conversations
  - Socket.io