We decided to create a virtual wine cellar where we could virtually store all of the wines we loved, and hoard all of the ones we hadn't tried yet!
- Visit it here: https://vinevibe.herokuapp.com/
- 404: As an anon/user I can see a 404 page if I try to reach a page that does not exist so that I know it's my fault
- 500: As an anon/user I can see a 500 page when the developers broke something, so that I know that is not my fault
- Signup: As an anon I can sign up in the platform so that I can start saving favorite restaurants
- Login: As a user I can login to the platform so that I can see my favorite restaurants
- Logout: As a user I can logout from the platform so no one else can use it
- Add Wine As a user I can add a new pool so that I can share it with friends
- List Members As a user I want to see the list of all the wines
- Search Wines As a user I want to search wines by name, variety and country
User profile:
- see other users profile, and their wine types
Setting up Third Party Wines:
- Morality is as importanrt as avoiding pyramid schemes that sell drugs
- / - Homepage
- /auth/signup - Signup form
- /auth/login - Login form
- /wines - wines list
- /wines/create - create a wines
- /wines/:id - restaurant detail
- /profile/me - my details and favorite wines
- 404
- Home Page (public)
- Sign in Page (anon only)
- Log in Page (anon only)
- Wine List Page (public only)
- Wine Create (user only)
- Wine Detail Page (public only)
- My Profile Page (user only)
- 404 Page (public)
- Wine Card component
- Input: wine: any
- Output: favorite(wineId: string, on: boolean)
- Search component
- Output: change(terms: string)
- Auth Service
- auth.login(user)
- auth.signup(user)
- auth.logout()
- auth.me()
- auth.getUser() // synchronous
- Wine Service
- wine.list()
- wine.create(data)
- wine.detail(id)
- wine.addFavorite(id)
- wine.removeFavorite(id)
User model
username - String // required
email - String // required & unique
password - String // required
favorites - [ObjectID<Wine>]
Wine model
owner - ObjectID<User> // required
name - String // required
phone - String
address - String
- GET /auth/me
- POST /auth/signup
- body:
- username
- password
- body:
- POST /auth/login
- body:
- username
- password
- body:
- POST /auth/logout
- body: (empty)
- POST /user/me/favorite
- body:
- wineId
- body:
- DELETE /user/me/favorite/:wineId
- body: (empty)
- GET /wine
- POST /wine
- body:
- name
- phone
- address
- body:
- GET /wine/:id