Comments (3)
Chciałbym spróbować się tym zająć. Według mnie implementacja będzie wyglądać tak:
- Endpoint z metodą patch na adres
/book/{id}/update-opinion
, obiekt opinii w ciele, wywołanie metody update z OpinionBean - Funkcja update w OpinionBean sprawdzająca poprawność danej opinii i używająca funkcji z Dao.
- Prywatna funkcja w OpinionBean weryfikująca czy użytkownik edytujący opinię jest jej właścicielem (jaka powinna być reakcja w momencie niepowodzenia? wyjątek?) i czy obie wersje opinii dotyczą tej samej książki (jeżeli nie to ignorować czy odrzucić update?)
Jeżeli gdzieś myślę błędnie to mnie popraw.
from akai-bookcrossing.
Proponowałbym zrobić od razu drobny refactor BookRestController i było by fajnie gdybyś się tym zajął.
Obecnie BookRestController łamie lekko zasadę Single Responsibility, bo zajmuje się książkami i opiniami.
Dlatego chciałbym byś:
- stworzył nowa klasę OpinionRestController i w niej umieścił swój nowy endpoint oraz przeniósł tam już napisany do dodawania opinii.
- Zmień endpoint odpowiedzialny za dodawanie opinii z
/book/{id}/add-opinion
na/opinion
. Będzie to wymagało dodanie w modelu pola bookId i drobnych zmian w OpinionBean oraz OpinionDao jak i mapperze, ale nie powinieneś mieć z nimi problemu. Obecnie ID książki przekazywane jest jako osobny argument, teraz będzie wewnątrz modelu. - Dodatkowe zmiany będzie wymagał JS po stronie strony, jesli nie miałes kontaktu nigdy z JSem, to daj znać i mogę ci z tym pomóc
- W związku z tymi zmianami twój enpoint będzie z metodą PATCH i adresem
/opinion/{id}
- Jest to REST API, więc rzucanie wyjątku użytkownikowi jest bardzo złą praktyką. Zamiast tego powinniśmy mu zwrócić:
- 404 jesli opinia o danym ID nie istnieje
- 403 jeśli nie jest właścicielem opinii
- Przypadku edycji opinii należącej do innej książki nie trzeba uwzględniać dzięki refactorowi
from akai-bookcrossing.
Mówiąc o wyjątkach miałem na myśli rzucanie stworzonego przeze mnie z adnotacją @ResponseStatus
lub wyjątku typu ResponseStatusException
, które automatycznie zostaną przetłumaczone na 403 lub 404 w kontrolerze
Edit: tak by to wyglądało:
public void updateOpinion(Opinion newOpinion) {
var opinion = opinionDao.getOpinionById(newOpinion.getId());
if (opinion == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
if (isCurrentUserTheAuthor(opinion)) {
throw new ResponseStatusException(HttpStatus.FORBIDDEN);
}
opinionDao.updateOpinion(newOpinion);
}
private boolean isCurrentUserTheAuthor(Opinion opinion) {
return opinion.getAuthor()
.getId() != currentUserService.getCurrentUser()
.getId();
}
from akai-bookcrossing.
Related Issues (20)
- Podłączenie RestControllerów do frontu
- Aktualizacja opinii - frontend
- Dodać opcje usunięcia opinii - backend HOT 2
- Dodać opcje usunięcia opinii - frontend
- Dodanie możliwości edycji ksiażki i ebooka
- Synchronizacja zbioru ebooków z dyskiem Google
- Automatyczne dodawanie tagów do ebooków
- Lista ebooków - frontend
- Lista ebooków - backend
- Szczegóły ebooka - backend
- Szczegóły ebooka - frontend
- Dodanie componentu Multiselect
- Paginacja książek i ebooków
- Zablokowanie możliwości wysyłania zapytań o książkę samemu sobie
- Powiadomienia o zaakceptowaniu/odrzuceniu prośby o książkę
- Podłączenie Liquibase
- Dodać RestEndpoint do wylistowania wszystkich książek HOT 1
- Dodać Rest endpoint do dodawania książek
- Dodać endpoint do listowania szczegółów książki HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from akai-bookcrossing.