Skip to content

Commit b21cb72

Browse files
committed
CLAP-170 Feat: 구분 추가 기능 API 구현
1 parent 001eb7b commit b21cb72

File tree

7 files changed

+101
-1
lines changed

7 files changed

+101
-1
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package clap.server.adapter.inbound.web.admin;
2+
3+
import clap.server.adapter.inbound.security.SecurityUserDetails;
4+
import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
5+
import clap.server.application.port.inbound.admin.AddLabelUsecase;
6+
import clap.server.common.annotation.architecture.WebAdapter;
7+
import io.swagger.v3.oas.annotations.Operation;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.security.access.annotation.Secured;
11+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
12+
import org.springframework.web.bind.annotation.PostMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
16+
@Tag(name = "05. Admin")
17+
@WebAdapter
18+
@RequiredArgsConstructor
19+
@RequestMapping("/api/management/label")
20+
public class UpdateLabelController {
21+
22+
private final AddLabelUsecase addLabelUsecase;
23+
24+
@Operation(summary = "구분(label) 추가 API")
25+
@PostMapping
26+
@Secured({"ROLE_ADMIN"})
27+
public void addLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
28+
@RequestBody AddLabelRequest request) {
29+
addLabelUsecase.addLabel(userInfo.getUserId(), request);
30+
}
31+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package clap.server.adapter.inbound.web.dto.label;
2+
3+
import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;
4+
5+
public record AddLabelRequest(
6+
7+
String labelName,
8+
LabelColor labelColor
9+
) {}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import clap.server.adapter.outbound.persistense.repository.task.LabelRepository;
99
import clap.server.application.mapper.LabelMapper;
1010
import clap.server.application.mapper.NotificationMapper;
11+
import clap.server.application.port.outbound.task.CommandLabelPort;
1112
import clap.server.application.port.outbound.task.LoadLabelPort;
1213
import clap.server.common.annotation.architecture.PersistenceAdapter;
1314
import clap.server.domain.model.notification.Notification;
@@ -22,7 +23,7 @@
2223

2324
@PersistenceAdapter
2425
@RequiredArgsConstructor
25-
public class LabelPersistenceAdapter implements LoadLabelPort {
26+
public class LabelPersistenceAdapter implements LoadLabelPort, CommandLabelPort {
2627

2728
private final LabelRepository labelRepository;
2829
private final LabelPersistenceMapper labelPersistenceMapper;
@@ -51,4 +52,10 @@ public SliceResponse<FindLabelListResponse> findLabelListBySlice(Pageable pageab
5152
labelList.map(LabelMapper::toFindLabelListResponse)
5253
);
5354
}
55+
56+
@Override
57+
public void save(Label label) {
58+
LabelEntity labelEntity = labelPersistenceMapper.toEntity(label);
59+
labelRepository.save(labelEntity);
60+
}
5461
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package clap.server.application.port.inbound.admin;
2+
3+
import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
4+
5+
public interface AddLabelUsecase {
6+
7+
void addLabel(Long adminId, AddLabelRequest request);
8+
9+
10+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package clap.server.application.port.outbound.task;
2+
3+
import clap.server.domain.model.task.Label;
4+
5+
public interface CommandLabelPort {
6+
void save(Label label);
7+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package clap.server.application.service.label;
2+
3+
import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
4+
import clap.server.application.port.inbound.admin.AddLabelUsecase;
5+
import clap.server.application.port.inbound.domain.MemberService;
6+
import clap.server.application.port.outbound.task.CommandLabelPort;
7+
import clap.server.common.annotation.architecture.ApplicationService;
8+
import clap.server.domain.model.member.Member;
9+
import clap.server.domain.model.task.Label;
10+
import lombok.RequiredArgsConstructor;
11+
12+
@ApplicationService
13+
@RequiredArgsConstructor
14+
public class AddLabelService implements AddLabelUsecase {
15+
16+
private final MemberService memberService;
17+
private final CommandLabelPort commandLabelPort;
18+
19+
@Override
20+
public void addLabel(Long adminId, AddLabelRequest request) {
21+
Member admin = memberService.findActiveMember(adminId);
22+
Label label = Label.addLabel(admin, request);
23+
commandLabelPort.save(label);
24+
}
25+
}

src/main/java/clap/server/domain/model/task/Label.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package clap.server.domain.model.task;
22

3+
import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
34
import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;
5+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
46
import clap.server.domain.model.common.BaseTime;
57
import clap.server.domain.model.member.Member;
68
import lombok.AccessLevel;
@@ -17,4 +19,13 @@ public class Label extends BaseTime {
1719
private String labelName;
1820
private LabelColor labelColor;
1921
private boolean isDeleted;
22+
23+
public static Label addLabel(Member admin, AddLabelRequest request) {
24+
return Label.builder()
25+
.admin(admin)
26+
.labelName(request.labelName())
27+
.labelColor(request.labelColor())
28+
.isDeleted(false)
29+
.build();
30+
}
2031
}

0 commit comments

Comments
 (0)