generated from yandex-praktikum/java-explore-with-me-plus
-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Description
Зависимости:
COMMENTS-CORE: Сущность Comment, репозиторий и базовый маппинг(полностью).COMMENTS-PRIVATE: Создание комментария пользователем(для наличия комментариев для теста).GlobalExceptionHandler.
Описание Задачи:
Реализовать эндпоинт PATCH /users/{userId}/comments/{commentId} и сервисную логику для обновления пользователем текста своего комментария. Обновление возможно только в течение 6 часов после создания и если комментарий не был "мягко" удален.
Основные шаги:
- Repository (
CommentRepository):- Метод
findById(commentId)уже есть отJpaRepository.
- Метод
- Service (
CommentServiceImpl):- Создать метод
updateUserComment(Long userId, Long commentId, UpdateCommentDto updateCommentDto). - Логика:
- Найти
CommentпоcommentId. Если не найден ->EntityNotFoundException. - Проверить, что
comment.getAuthor().getId()совпадает сuserId. Если нет ->AccessDeniedExceptionилиEntityNotFoundException(чтобы не раскрывать существование чужого комментария). - Проверить, что
comment.isDeleted() == false. Если удален ->BusinessRuleViolationException(409 Conflict, "Нельзя редактировать удаленный комментарий"). - Проверить, что с момента
comment.getCreatedOn()прошло не более 6 часов. Если прошло больше ->BusinessRuleViolationException(409 Conflict, "Время для редактирования истекло"). - Обновить
comment.setText(updateCommentDto.getText()). - Установить
comment.setEdited(true). comment.setUpdatedOn(LocalDateTime.now())(если@LastModifiedDateне используется или для явности).- Сохранить обновленный комментарий.
- Вернуть
CommentDto.
- Найти
- Создать метод
- Controller (
PrivateCommentController):- Добавить эндпоинт
PATCH /users/{userId}/comments/{commentId}. - Принимает
@PathVariable Long userId,@PathVariable Long commentId,@Valid @RequestBody UpdateCommentDto updateCommentDto. - Вызывает метод сервиса.
- Возвращает
CommentDtoсо статусом200 OK.
- Добавить эндпоинт
- Тесты: Юнит-тесты для сервиса и контроллера.
Критерии готовности:
- Эндпоинт
PATCH /users/{userId}/comments/{commentId}реализован. - Пользователь может обновить только свой комментарий.
- Обновление возможно только в течение 6 часов и если комментарий не удален.
- Устанавливается флаг
isEditedи обновляетсяupdatedOn. - Возвращается обновленный
CommentDto. - Написаны юнит-тесты.