CollabCommentController.java

package com.yumu.noveltranslator.adapter.in.rest.collab;

import com.yumu.noveltranslator.port.dto.collab.CommentResponse;
import com.yumu.noveltranslator.port.dto.collab.CreateCommentRequest;
import com.yumu.noveltranslator.port.in.CollabCommentPort;
import com.yumu.noveltranslator.util.SecurityUtil;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import com.yumu.noveltranslator.port.dto.common.Result;
import com.yumu.noveltranslator.port.dto.common.PageResponse;

@RestController
@RequestMapping("/v1/collab")
@RequiredArgsConstructor
@Slf4j
public class CollabCommentController {

    private final CollabCommentPort collabCommentPort;

    @PostMapping("/chapters/{chapterTaskId}/comments")
    public Result<CommentResponse> createComment(@PathVariable Long chapterTaskId,
                                                   @Valid @RequestBody CreateCommentRequest request) {
        Long userId = SecurityUtil.getRequiredUserId();
        CommentResponse comment = collabCommentPort.createComment(chapterTaskId, userId, request);
        return Result.ok(comment);
    }

    @GetMapping("/chapters/{chapterTaskId}/comments")
    public Result<PageResponse<CommentResponse>> listComments(
            @PathVariable Long chapterTaskId,
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "20") int size) {
        Long userId = SecurityUtil.getRequiredUserId();
        com.yumu.noveltranslator.port.dto.common.PageResult<CommentResponse> pageResult =
            collabCommentPort.getCommentsByChapterPage(chapterTaskId, userId, page, size);
        PageResponse<CommentResponse> response = PageResponse.of(
            (int) pageResult.getCurrent(), (int) pageResult.getSize(), pageResult.getTotal(), pageResult.getRecords());
        return Result.ok(response);
    }

    @PutMapping("/comments/{commentId}/resolve")
    public Result<Void> resolveComment(@PathVariable Long commentId) {
        Long userId = SecurityUtil.getRequiredUserId();
        collabCommentPort.resolveComment(commentId, userId);
        return Result.ok(null);
    }

    @DeleteMapping("/comments/{commentId}")
    public Result<Void> deleteComment(@PathVariable Long commentId) {
        Long userId = SecurityUtil.getRequiredUserId();
        collabCommentPort.deleteComment(commentId, userId);
        return Result.ok(null);
    }
}