Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package clap.server.adapter.inbound.web.admin;

import clap.server.adapter.inbound.security.SecurityUserDetails;
import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
import clap.server.application.port.inbound.admin.AddLabelUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Tag(name = "05. Admin")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/management/label")
public class UpdateLabelController {

private final AddLabelUsecase addLabelUsecase;

@Operation(summary = "구분(label) 추가 API")
@PostMapping
@Secured({"ROLE_ADMIN"})
public void addLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
@RequestBody AddLabelRequest request) {
addLabelUsecase.addLabel(userInfo.getUserId(), request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package clap.server.adapter.inbound.web.dto.label;

import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;

public record AddLabelRequest(

String labelName,
LabelColor labelColor
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import clap.server.adapter.outbound.persistense.repository.task.LabelRepository;
import clap.server.application.mapper.LabelMapper;
import clap.server.application.mapper.NotificationMapper;
import clap.server.application.port.outbound.task.CommandLabelPort;
import clap.server.application.port.outbound.task.LoadLabelPort;
import clap.server.common.annotation.architecture.PersistenceAdapter;
import clap.server.domain.model.notification.Notification;
Expand All @@ -22,7 +23,7 @@

@PersistenceAdapter
@RequiredArgsConstructor
public class LabelPersistenceAdapter implements LoadLabelPort {
public class LabelPersistenceAdapter implements LoadLabelPort, CommandLabelPort {

private final LabelRepository labelRepository;
private final LabelPersistenceMapper labelPersistenceMapper;
Expand Down Expand Up @@ -51,4 +52,10 @@ public SliceResponse<FindLabelListResponse> findLabelListBySlice(Pageable pageab
labelList.map(LabelMapper::toFindLabelListResponse)
);
}

@Override
public void save(Label label) {
LabelEntity labelEntity = labelPersistenceMapper.toEntity(label);
labelRepository.save(labelEntity);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package clap.server.application.port.inbound.admin;

import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;

public interface AddLabelUsecase {

void addLabel(Long adminId, AddLabelRequest request);


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package clap.server.application.port.outbound.task;

import clap.server.domain.model.task.Label;

public interface CommandLabelPort {
void save(Label label);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package clap.server.application.service.label;

import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
import clap.server.application.port.inbound.admin.AddLabelUsecase;
import clap.server.application.port.inbound.domain.MemberService;
import clap.server.application.port.outbound.task.CommandLabelPort;
import clap.server.common.annotation.architecture.ApplicationService;
import clap.server.domain.model.member.Member;
import clap.server.domain.model.task.Label;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;

@ApplicationService
@RequiredArgsConstructor
public class AddLabelService implements AddLabelUsecase {

private final MemberService memberService;
private final CommandLabelPort commandLabelPort;

@Transactional
@Override
public void addLabel(Long adminId, AddLabelRequest request) {
Member admin = memberService.findActiveMember(adminId);
Label label = Label.addLabel(admin, request);
commandLabelPort.save(label);
}
Comment on lines +21 to +26
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

트랜잭션 작업의 단위로 묶는 것이 필요해보입니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 그거 빼먹었네요ㅠ 감사합니다

}
11 changes: 11 additions & 0 deletions src/main/java/clap/server/domain/model/task/Label.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package clap.server.domain.model.task;

import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
import clap.server.domain.model.common.BaseTime;
import clap.server.domain.model.member.Member;
import lombok.AccessLevel;
Expand All @@ -17,4 +19,13 @@ public class Label extends BaseTime {
private String labelName;
private LabelColor labelColor;
private boolean isDeleted;

public static Label addLabel(Member admin, AddLabelRequest request) {
return Label.builder()
.admin(admin)
.labelName(request.labelName())
.labelColor(request.labelColor())
.isDeleted(false)
.build();
}
}