Design and implement a REST API using Hibernate/Spring-Boot without frontend.
The task is:
Build a voting system for deciding where to have lunch.
2 types of users: admin and regular users
Admin can input a restaurant and it's lunch menu of the day (2-5 items usually, just a dish name and price)
Menu changes each day (admins do the updates)
Users can vote on which restaurant they want to have lunch at
Only one vote counted per user
If user votes again the same day:
If it is before 11:00 we assume that he changed his mind.
If it is after 11:00 then it is too late, vote can't be changed
Each restaurant provides a new menu each day.
- Maven
- Spring Boot
- Spring Data JPA (Hibernate)
- Spring Security
- Spring Cache + Caffeine
- REST
- JUnit 5
curl -s http://localhost:8080/api/menu/1/ --user user@gmail.com:password
curl -s http://localhost:8080/api/menu/ --user user@gmail.com:password
curl -s -i -X POST -d '[{"name":"New dish","priceInDollars":10},{"name": "Dish2","priceInDollars":30}]' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/api/menu/2/ --user admin@bzz.su:admin
curl -s -i -X POST -d '[{"name":"New dish only","priceInDollars":400, "date":"2021-07-30"}]' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/api/menu/2/every-day --user admin@bzz.su:admin
curl -s -X PUT -d '{"name": "New dish222", "priceInDollars": 200, "date":"2021-07-30"}' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/api/menu/dish/4 --user admin@bzz.su:admin
curl -s -X DELETE http://localhost:8080/api/menu/dish/3 --user admin@bzz.su:admin
curl -s -X PUT -d '{"priceInDollars": 200, "date":"2021-07-30"}' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/api/menu/dish/3 --user admin@bzz.su:admin
curl -s -i -X POST -d '[{"name":"New dish only","priceInDollars":1000}]' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/api/menu/2/every-day --user admin@bzz.su:admin
Restaurants: http://localhost:8080/api/restaurant
curl -s http://localhost:8080/api/restaurant --user user@gmail.com:password
curl -s http://localhost:8080/api/restaurant/1 --user user@gmail.com:password
curl -s -i -X POST -d '{"name": "NewRestaurant"}' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/api/restaurant/ --user admin@bzz.su:admin
curl -s -X PUT -d '{"name": "UpdateRestaurant"}' -H 'Content-Type:application/json;charset=UTF-8' http://localhost:8080/api/restaurant/1 --user admin@bzz.su:admin
curl -s -X DELETE http://localhost:8080/api/restaurant/1 --user admin@bzz.su:admin
curl -s -X DELETE http://localhost:8080/api/restaurant/1 --user user@gmail.com:password
curl -s -i -X POST http://localhost:8080/api/vote/2 --user user@gmail.com:password
curl -s -i -X PUT http://localhost:8080/api/vote/3 --user user@gmail.com:password
curl -s http://localhost:8080/api/vote/all --user user@gmail.com:password
curl -s -i -X POST http://localhost:8080/api/vote/2 --user user@gmail.com:password