diff --git a/src/main/java/com/issueDive/controller/LabelController.java b/src/main/java/com/issueDive/controller/LabelController.java index 0be61e7..76d829c 100644 --- a/src/main/java/com/issueDive/controller/LabelController.java +++ b/src/main/java/com/issueDive/controller/LabelController.java @@ -4,7 +4,9 @@ import com.issueDive.dto.CreateLabelRequest; import com.issueDive.dto.LabelResponse; import com.issueDive.dto.UpdateLabelRequest; +import com.issueDive.dto.IssueLabelsResponse; import com.issueDive.service.LabelService; +import com.issueDive.service.IssueLabelService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -18,6 +20,7 @@ @RequiredArgsConstructor public class LabelController { private final LabelService labelService; + private final IssueLabelService issueLabelService; //라벨 생성 @PostMapping("/labels") @@ -40,27 +43,43 @@ public ResponseEntity>> getLabels(){ } //단일 라벨 조회 - @GetMapping("/labels/{id}") - public ResponseEntity> getLabelById(@PathVariable Long id){ - LabelResponse data = labelService.getLabel(id); + @GetMapping("/labels/{labelId}") + public ResponseEntity> getLabelById(@PathVariable Long labelId){ + LabelResponse data = labelService.getLabel(labelId); return ResponseEntity.ok(ApiResponse.ok(data)); } //라벨 수정 - @PatchMapping("/labels/{id}") + @PatchMapping("/labels/{labelId}") public ResponseEntity> updateLabel( - @PathVariable Long id, + @PathVariable Long labelId, @Valid @RequestBody UpdateLabelRequest request){ - LabelResponse data = labelService.updateLabel(id, request); + LabelResponse data = labelService.updateLabel(labelId, request); return ResponseEntity.ok(ApiResponse.ok(data)); } //라벨 삭제 - @DeleteMapping("/labels/{id}") - public ResponseEntity>> deleteLabel(@PathVariable Long id){ - labelService.deleteLabel(id); - return ResponseEntity.ok(ApiResponse.ok(Map.of("message", "Label " + id + " deleted successfully"))); + @DeleteMapping("/labels/{labelId}") + public ResponseEntity>> deleteLabel(@PathVariable Long labelId){ + labelService.deleteLabel(labelId); + return ResponseEntity.ok(ApiResponse.ok(Map.of("message", "Label " + labelId + " deleted successfully"))); + } + + @PostMapping("/issues/{issueId}/labels") + public ResponseEntity> addLabels( + @PathVariable Long issueId, + @RequestBody List labelIds) { + IssueLabelsResponse data = issueLabelService.addLabelsToIssue(issueId, labelIds); + return ResponseEntity.ok(ApiResponse.ok(data)); + } + + @DeleteMapping("/issues/{issueId}/labels/{labelId}") + public ResponseEntity> deleteLabelFromIssue( + @PathVariable Long issueId, + @PathVariable Long labelId) { + LabelResponse data = issueLabelService.deleteLabelFromIssue(issueId, labelId); + return ResponseEntity.ok(ApiResponse.ok(data)); } } diff --git a/src/main/java/com/issueDive/dto/IssueLabelsResponse.java b/src/main/java/com/issueDive/dto/IssueLabelsResponse.java new file mode 100644 index 0000000..a62175c --- /dev/null +++ b/src/main/java/com/issueDive/dto/IssueLabelsResponse.java @@ -0,0 +1,39 @@ +package com.issueDive.dto; + + +import com.issueDive.entity.Label; +import lombok.*; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@AllArgsConstructor +@Builder +public class IssueLabelsResponse { + private Long id; + private List labels; + + @Getter + @AllArgsConstructor + @Builder + public static class LabelSummary { + private Long id; + private String name; + } + + public static IssueLabelsResponse of(Long issueId, List