Skip to content

COMMENTS-PRIVATE: Создание комментария пользователем #84

@impatient0

Description

@impatient0

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

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

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

Реализовать эндпоинт POST /users/{userId}/comments?eventId={eventId} и соответствующую сервисную логику для создания нового комментария авторизованным пользователем.

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

  1. Service (CommentService интерфейс и CommentServiceImpl):
    • Создать метод addComment(Long userId, Long eventId, NewCommentDto newCommentDto).
    • Логика:
      • Найти User по userId (автор). Если не найден -> EntityNotFoundException.
      • Найти Event по eventId. Если не найден -> EntityNotFoundException.
      • Проверить, что событие PUBLISHED. Если нет -> BusinessRuleViolationException (409 Conflict).
      • Проверить, что у события commentsEnabled == true. Если нет -> BusinessRuleViolationException (409 Conflict).
      • Создать сущность Comment из NewCommentDto (используя CommentMapper).
      • Установить author и event для комментария.
      • Сохранить комментарий через CommentRepository.
      • Вернуть CommentDto созданного комментария (через CommentMapper).
  2. Controller (PrivateCommentController):
    • Создать контроллер и эндпоинт POST /users/{userId}/comments.
    • Принимает @PathVariable Long userId, @RequestParam Long eventId, @Valid @RequestBody NewCommentDto newCommentDto.
    • Вызывает метод сервиса.
    • Возвращает ResponseEntity<CommentDto> со статусом 201 CREATED.
  3. Тесты: Юнит-тесты для сервиса и контроллера.

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

  • Эндпоинт POST /users/{userId}/comments?eventId={eventId} реализован и работает.
  • Выполняются все проверки (существование пользователя/события, статус события, разрешение комментариев).
  • Новый комментарий корректно сохраняется в БД.
  • Возвращается CommentDto с кодом 201.
  • Написаны юнит-тесты.

Sub-issues

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions