Skip to content

Commit 2ba9780

Browse files
authored
Merge branch 'develop' into CLAP-140
2 parents afb2dbe + be511ef commit 2ba9780

File tree

25 files changed

+256
-54
lines changed

25 files changed

+256
-54
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package clap.server.adapter.inbound.web.dto.task;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
5+
import java.time.LocalDateTime;
6+
7+
public record ApprovalTaskRequest(
8+
@NotNull
9+
Long categoryId,
10+
@NotNull
11+
Long processorId,
12+
@NotNull
13+
LocalDateTime dueDate,
14+
@NotNull
15+
Long labelId
16+
17+
) {
18+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package clap.server.adapter.inbound.web.dto.task;
2+
3+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
4+
5+
import java.time.LocalDateTime;
6+
7+
public record ApprovalTaskResponse(
8+
Long taskId,
9+
String processorName,
10+
String reviewerName,
11+
LocalDateTime deadLine,
12+
String labelName,
13+
TaskStatus taskStatus
14+
) {
15+
}

src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public record FilterTaskListRequest(
3232
@NotNull
3333
List<TaskStatus> taskStatus,
3434

35-
@Schema(description = "정렬 기준", implementation = OrderRequest.class)
35+
@Schema(description = "정렬 기준", implementation = OrderTaskRequest.class)
3636
@NotNull
37-
OrderRequest orderRequest
37+
OrderTaskRequest orderRequest
3838
) {
3939
}

src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java renamed to src/main/java/clap/server/adapter/inbound/web/dto/task/OrderTaskRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import io.swagger.v3.oas.annotations.media.Schema;
44

5-
public record OrderRequest(
5+
public record OrderTaskRequest(
66
@Schema(description = "정렬 기준", example = "REQUESTED_AT")
77
String sortBy,
88

src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class FindTaskController {
2727
private final FindTaskListUsecase taskListUsecase;
2828

2929
@Operation(summary = "사용자 요청 작업 목록 조회")
30-
@Secured({"ROLE_USER"})
30+
@Secured({"ROLE_USER", "ROLE_MANAGER"})
3131
@GetMapping("/requests")
3232
public ResponseEntity<Page<FilterTaskListResponse>> findTasksRequestedByUser(
3333
@RequestParam(defaultValue = "0") int page,

src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package clap.server.adapter.inbound.web.task;
22

33
import clap.server.adapter.inbound.security.SecurityUserDetails;
4-
import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest;
5-
import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse;
6-
import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest;
7-
import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse;
4+
import clap.server.adapter.inbound.web.dto.task.*;
5+
import clap.server.application.port.inbound.task.ApprovalTaskUsecase;
86
import clap.server.application.port.inbound.task.CreateTaskUsecase;
97
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
108
import clap.server.common.annotation.architecture.WebAdapter;
@@ -15,6 +13,7 @@
1513
import lombok.RequiredArgsConstructor;
1614
import org.springframework.http.MediaType;
1715
import org.springframework.http.ResponseEntity;
16+
import org.springframework.security.access.annotation.Secured;
1817
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1918
import org.springframework.web.bind.annotation.*;
2019
import org.springframework.web.multipart.MultipartFile;
@@ -31,9 +30,11 @@ public class ManagementTaskController {
3130

3231
private final CreateTaskUsecase createTaskUsecase;
3332
private final UpdateTaskUsecase updateTaskUsecase;
33+
private final ApprovalTaskUsecase approvalTaskUsecase;
3434

3535
@Operation(summary = "작업 요청 생성")
3636
@PostMapping(consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
37+
@Secured({"ROLE_MANAGER, ROLE_USER"})
3738
public ResponseEntity<CreateTaskResponse> createTask(
3839
@RequestPart(name = "taskInfo") @Valid CreateTaskRequest createTaskRequest,
3940
@RequestPart(name = "attachment") @NotNull List<MultipartFile> attachments,
@@ -44,11 +45,22 @@ public ResponseEntity<CreateTaskResponse> createTask(
4445

4546
@Operation(summary = "작업 수정")
4647
@PatchMapping(value = "/{taskId}", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
48+
@Secured({"ROLE_MANAGER, ROLE_USER"})
4749
public ResponseEntity<UpdateTaskResponse> updateTask(
4850
@PathVariable @NotNull Long taskId,
4951
@RequestPart(name = "taskInfo") @Valid UpdateTaskRequest updateTaskRequest,
5052
@RequestPart(name = "attachment") @NotNull List<MultipartFile> attachments,
5153
@AuthenticationPrincipal SecurityUserDetails userInfo){
5254
return ResponseEntity.ok(updateTaskUsecase.updateTask(userInfo.getUserId(), taskId, updateTaskRequest, attachments));
5355
}
56+
57+
@Operation(summary = "작업 승인")
58+
@Secured({"ROLE_MANAGER"})
59+
@PostMapping("/approval/{taskId}")
60+
public ResponseEntity<ApprovalTaskResponse> approvalTask(
61+
@RequestBody @Valid ApprovalTaskRequest approvalTaskRequest,
62+
@PathVariable Long taskId,
63+
@AuthenticationPrincipal SecurityUserDetails userInfo){
64+
return ResponseEntity.ok(approvalTaskUsecase.approvalTaskByReviewer(userInfo.getUserId(), taskId, approvalTaskRequest));
65+
}
5466
}

src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,5 @@ public List<Task> findTasksByMemberIdAndStatus(Long memberId, List<TaskStatus> t
8585
.map(taskPersistenceMapper::toDomain)
8686
.collect(Collectors.toList());
8787
}
88-
8988
}
9089

src/main/java/clap/server/adapter/outbound/persistense/entity/task/LabelEntity.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity;
44
import clap.server.adapter.outbound.persistense.entity.member.MemberEntity;
5-
import clap.server.adapter.outbound.persistense.entity.task.constant.LabelType;
5+
import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;
66
import jakarta.persistence.*;
77
import lombok.AccessLevel;
88
import lombok.Getter;
@@ -24,9 +24,12 @@ public class LabelEntity extends BaseTimeEntity {
2424
@JoinColumn(name = "admin_id", nullable = false)
2525
private MemberEntity admin;
2626

27+
@Column(nullable = false)
28+
private String labelName;
29+
2730
@Column(nullable = false)
2831
@Enumerated(EnumType.STRING)
29-
private LabelType labelType;
32+
private LabelColor labelColor;
3033

3134
@Column(nullable = false)
3235
private boolean isDeleted;

src/main/java/clap/server/adapter/outbound/persistense/entity/task/constant/LabelType.java renamed to src/main/java/clap/server/adapter/outbound/persistense/entity/task/constant/LabelColor.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55

66
@Getter
77
@RequiredArgsConstructor
8-
public enum LabelType {
9-
EMERGENCY("긴급"),
10-
NORMAL("일반"),
11-
REGULAR("정기");
8+
public enum LabelColor {
9+
RED("빨강"),
10+
ORANGE("주황"),
11+
YELLOW("노랑"),
12+
GREEN("초록"),
13+
BLUE("파랑"),
14+
PURPLE("보라"),
15+
GREY("회색");
1216

1317
private final String description;
1418
}
15-
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package clap.server.adapter.outbound.persistense.repository;
2+
3+
import clap.server.adapter.outbound.persistense.entity.task.LabelEntity;
4+
import clap.server.adapter.outbound.persistense.entity.task.TaskEntity;
5+
import clap.server.adapter.outbound.persistense.mapper.LabelPersistenceMapper;
6+
import clap.server.adapter.outbound.persistense.repository.task.LabelRepository;
7+
import clap.server.application.port.outbound.task.LoadLabelPort;
8+
import clap.server.common.annotation.architecture.PersistenceAdapter;
9+
import clap.server.domain.model.task.Label;
10+
import lombok.RequiredArgsConstructor;
11+
12+
import java.util.Optional;
13+
14+
@PersistenceAdapter
15+
@RequiredArgsConstructor
16+
public class LabelPersistenceAdapter implements LoadLabelPort {
17+
18+
private final LabelRepository labelRepository;
19+
private final LabelPersistenceMapper labelPersistenceMapper;
20+
21+
@Override
22+
public Optional<Label> findById(Long id) {
23+
Optional<LabelEntity> labelEntity = labelRepository.findById(id);
24+
return labelEntity.map(labelPersistenceMapper::toDomain);
25+
}
26+
}

0 commit comments

Comments
 (0)