Feature comments - #3
Conversation
LexLippi
left a comment
There was a problem hiding this comment.
Привет!
Неплохая работа, но есть несколько замечаний, которые необходимо исправить, и вопросы на которые необходимо ответить.
Желаю удачи!!!
| @@ -1,10 +1,10 @@ | |||
| DROP TABLE IF EXISTS compilation_events,compilations,requests,events,categories,users; | |||
| DROP TABLE IF EXISTS rating, comments, compilation_events,compilations,requests,events,categories,users; | |||
There was a problem hiding this comment.
Может можно как-то не удалять таблицы?
Таким образом при каждом разворачивании наших сервисов данные будут теряться, а польо=зователи негодовать, не хотелось бы этого :)
| CREATE TABLE IF NOT EXISTS comments | ||
| ( | ||
| id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, | ||
| text VARCHAR(2000) NOT NULL, |
There was a problem hiding this comment.
Если мы пишем PostgreSQL-специфичный скрипт, то лучше не называть колонку text, так как в PostgreSQL есть тип данных с таким же названием, а это считается bad practice в любом ЯП.
Поэтому стоит подобрать какое-нибудь синонимичное название или на крайний случай comment_text
| text VARCHAR(2000) NOT NULL, | ||
| user_id BIGINT NOT NULL, | ||
| event_id BIGINT NOT NULL, | ||
| comment_time TIMESTAMP WITHOUT TIME ZONE, |
| state VARCHAR, | ||
| title VARCHAR(255) NOT NULL, | ||
| views BIGINT, | ||
| comment_switch BOOLEAN, |
There was a problem hiding this comment.
- Что означает это поле?
- Может ли оно быть
null?
There was a problem hiding this comment.
Это по сути своей рубильник который выключает и включает комментарии.
Была невнимательна null быть не может
| if (!event.getCommentSwitch()) { | ||
| return new ArrayList<>(); | ||
| } | ||
| Sort sort1 = Sort.by(DESC, "commentTime"); |
There was a problem hiding this comment.
Изначально был аргумент с таким же название, потом оно мне не понравилось и я изменила, а эта переменная осталась
| } | ||
|
|
||
| @Override | ||
| public CommentDto updateComment(Long userId, Long commId, NewAndUpdateCommentDto dto) { |
There was a problem hiding this comment.
commentIdможно польностью написать- а точно нужно такое сложное название для типа данных объекта
dto? Может простоCommentDto?
Или на крайний случай простоUpdateCommentDto?
| User user = objectCreator.getUserById(userId); | ||
| Event event = objectCreator.getEventById(dto.getEventId()); | ||
|
|
||
| if (!comment.getCommentator().equals(user)) { |
There was a problem hiding this comment.
можно сравнить на уровне идентификаторов, и если возникает ошибка, то не делать лишний запрос по получению пользователя
| throw new BadRequestException(String | ||
| .format("Только комментатор id = %d может изменить коментарий id = %d ", userId, commId)); | ||
| } | ||
| if (!comment.getEvent().equals(event)) { |
There was a problem hiding this comment.
Аналогичное замечание про сравнение идентификаторов
| User user = objectCreator.getUserById(userId); | ||
|
|
||
| if (!comment.getCommentator().equals(user)) { | ||
| throw new BadRequestException(String | ||
| .format("Только комментатор может удалить коментарий id = %d ", commId)); | ||
| } |
LexLippi
left a comment
There was a problem hiding this comment.
Привет!
Еще пару замечаний накинул!
Желаю удачи!!!
| public List<OutCommentDto> getCommentByEvent(@NotNull @RequestParam Long eventId, | ||
| @RequestParam(defaultValue = "false") Boolean rating, | ||
| @PositiveOrZero @RequestParam(defaultValue = "0") int from, | ||
| @Positive @RequestParam(defaultValue = "10") int size) { |
There was a problem hiding this comment.
Почему какие-то поля объектные, а какие-то примитивные, тем более если eventId не может быть null. Во всех контроллерах это вижу, давай к какому-то одному стилю придем
| return service.updateComment(userId, commId, dto); | ||
| } | ||
|
|
||
| @DeleteMapping("/{commId}") |
There was a problem hiding this comment.
Может на commentId всё-таки переделаем?
|
|
||
| @PostMapping | ||
| @ResponseStatus(HttpStatus.CREATED) | ||
| public OutCommentDto createComment(@PathVariable Long userId, |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Спасибо что подсказал. Не дружу с английским. Поэтому и названия кривые
|
|
||
| @Setter | ||
| @Getter | ||
| @NoArgsConstructor |
There was a problem hiding this comment.
Вот это ты где-то используешь? Если нет, то лучше удалить это из всех классов
There was a problem hiding this comment.
Когда дто приходи и десериализуется требует конструкторы. Неужели это так нагружает систему? Могу удалить билдер он тут не нужен.
There was a problem hiding this comment.
На самом деле систему это не нагружает, тут проблема в том, что такой доступный зоопарк возможностей по конструированию объекта приводит к тому, что каждый разработчик создает объекты по своему и это больно потом одному человеку сводить, когда надо довести горящий релиз до логического завершения.
А так в целом билдер это отличный шаблон, очень удобно с ним работать, и вообще это довольно интересная концепция.
| @AllArgsConstructor | ||
| @Builder |
There was a problem hiding this comment.
И Setter, и Builder, и AllArgsConstructor, может от чего-то можно отказаться?
There was a problem hiding this comment.
только от билдера. Хотя для написания тестов он был бы удобен. (очень он мне полюбился)
|
|
||
| public class CommentMapper { |
There was a problem hiding this comment.
Если все методы статические, то лучше сделать пустой конструктор этого класса приватным, чтобы везде гарантированно использовать его, как синглтон:
https://en.wikipedia.org/wiki/Singleton_pattern
Либо можно вместо класса использовать enum, как синглтон. Кстати, чтобы никто не испортил поведение нашего класса, то лучше пометить его как final, чтобы у него не могло быть наследников.
https://www.geeksforgeeks.org/advantages-and-disadvantages-of-using-enum-as-singleton-in-java/
| @Override | ||
| public OutCommentDto createComment(Long userId, InputCommentDto dto) { | ||
| Event event = objectCreator.getEventById(dto.getEventId()); | ||
| if (!event.getCommentSwitch()) { |
There was a problem hiding this comment.
Наверное лучше commentAvailable, чтобы было понятнее, а то switch немного пугает
There was a problem hiding this comment.
Это не я, это гугл переводчик тебя испугал))))).
Я буду скучать по твоим ревью :`(
Спасибо большое за твой труд и прости за кровавые слезы при прочтении моего кода =D
LexLippi
left a comment
There was a problem hiding this comment.
Привет!
Отличная работа!
Дипломный проект сдан!
Желаю удачи в свободном плавании!
No description provided.