Skip to content

COMMENTS-PRIVATE: Обновление своего комментария #86

@impatient0

Description

@impatient0

Зависимости:

  • COMMENTS-CORE: Сущность Comment, репозиторий и базовый маппинг (полностью).
  • COMMENTS-PRIVATE: Создание комментария пользователем (для наличия комментариев для теста).
  • GlobalExceptionHandler.

Описание Задачи:

Реализовать эндпоинт PATCH /users/{userId}/comments/{commentId} и сервисную логику для обновления пользователем текста своего комментария. Обновление возможно только в течение 6 часов после создания и если комментарий не был "мягко" удален.

Основные шаги:

  1. Repository (CommentRepository):
    • Метод findById(commentId) уже есть от JpaRepository.
  2. 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.
  3. Controller (PrivateCommentController):
    • Добавить эндпоинт PATCH /users/{userId}/comments/{commentId}.
    • Принимает @PathVariable Long userId, @PathVariable Long commentId, @Valid @RequestBody UpdateCommentDto updateCommentDto.
    • Вызывает метод сервиса.
    • Возвращает CommentDto со статусом 200 OK.
  4. Тесты: Юнит-тесты для сервиса и контроллера.

Критерии готовности:

  • Эндпоинт PATCH /users/{userId}/comments/{commentId} реализован.
  • Пользователь может обновить только свой комментарий.
  • Обновление возможно только в течение 6 часов и если комментарий не удален.
  • Устанавливается флаг isEdited и обновляется updatedOn.
  • Возвращается обновленный CommentDto.
  • Написаны юнит-тесты.

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions