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);
}
}