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,55 @@
package clap.server.adapter.inbound.web.admin;

import clap.server.adapter.inbound.security.SecurityUserDetails;
import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest;
import clap.server.application.port.inbound.admin.AddLabelUsecase;
import clap.server.application.port.inbound.admin.DeleteLabelUsecase;
import clap.server.application.port.inbound.admin.UpdateLabelUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
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.*;

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

private final AddLabelUsecase addLabelUsecase;
private final UpdateLabelUsecase updateLabelUsecase;
private final DeleteLabelUsecase deleteLabelUsecase;

@Operation(summary = "구분(label) 추가 API")
@PostMapping
@Secured({"ROLE_ADMIN"})
public void addLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
@RequestBody AddAndEditLabelRequest request) {
addLabelUsecase.addLabel(userInfo.getUserId(), request);
}

@Operation(summary = "구분(label) 수정 API")
@Parameter(name = "labelId", description = "구분(label) 고유 ID", required = true, in = ParameterIn.PATH)
@PatchMapping("/{labelId}")
@Secured({"ROLE_ADMIN"})
public void updateLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
@PathVariable Long labelId,
@RequestBody AddAndEditLabelRequest request) {
updateLabelUsecase.editLabel(userInfo.getUserId(), labelId, request);

}

@Operation(summary = "구분(label) 삭제 API")
@Parameter(name = "labelId", description = "구분(label) 고유 ID", required = true, in = ParameterIn.PATH)
@DeleteMapping("/{labelId}")
@Secured({"ROLE_ADMIN"})
public void deleteLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
@PathVariable Long labelId) {
deleteLabelUsecase.deleteLabel(userInfo.getUserId(), labelId);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package clap.server.adapter.inbound.web.dto.label;

import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;
import io.swagger.v3.oas.annotations.media.Schema;

public record AddAndEditLabelRequest(

@Schema(description = "구분(label) 이름")
String labelName,
@Schema(description = "구분(label) 색상")
LabelColor labelColor
) {}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package clap.server.adapter.inbound.web.dto.label;

import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor;
import io.swagger.v3.oas.annotations.media.Schema;

public record FindLabelListResponse(
@Schema(description = "구분(label) 고유 ID")
Long labelId,
@Schema(description = "구분(label) 이름")
String labelName,
@Schema(description = "구분(label) 색상")
LabelColor labelColor
) {
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package clap.server.application.port.inbound.admin;

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

public interface AddLabelUsecase {

void addLabel(Long adminId, AddLabelRequest request);
void addLabel(Long adminId, AddAndEditLabelRequest request);


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package clap.server.application.port.inbound.admin;

public interface DeleteLabelUsecase {
void deleteLabel(Long adminId, Long labelId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package clap.server.application.port.inbound.admin;

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

public interface UpdateLabelUsecase {
void editLabel(Long adminId, Long labelId, AddAndEditLabelRequest request);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package clap.server.application.service.label;

import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest;
import clap.server.application.port.inbound.admin.AddLabelUsecase;
import clap.server.application.port.inbound.domain.MemberService;
import clap.server.application.port.outbound.task.CommandLabelPort;
Expand All @@ -19,7 +19,7 @@ public class AddLabelService implements AddLabelUsecase {

@Transactional
@Override
public void addLabel(Long adminId, AddLabelRequest request) {
public void addLabel(Long adminId, AddAndEditLabelRequest request) {
Member admin = memberService.findActiveMember(adminId);
Label label = Label.addLabel(admin, request);
commandLabelPort.save(label);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package clap.server.application.service.label;

import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest;
import clap.server.application.port.inbound.admin.DeleteLabelUsecase;
import clap.server.application.port.inbound.admin.UpdateLabelUsecase;
import clap.server.application.port.inbound.domain.MemberService;
import clap.server.application.port.outbound.task.CommandLabelPort;
import clap.server.application.port.outbound.task.LoadLabelPort;
import clap.server.common.annotation.architecture.ApplicationService;
import clap.server.domain.model.task.Label;
import clap.server.exception.ApplicationException;
import clap.server.exception.code.LabelErrorCode;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;

@ApplicationService
@RequiredArgsConstructor
public class ManageLabelService implements UpdateLabelUsecase, DeleteLabelUsecase {

private final MemberService memberService;
private final LoadLabelPort loadLabelPort;
private final CommandLabelPort commandLabelPort;

@Transactional
@Override
public void editLabel(Long adminId, Long labelId, AddAndEditLabelRequest request) {
memberService.findActiveMember(adminId);

Label label = loadLabelPort.findById(labelId)
.orElseThrow(() -> new ApplicationException(LabelErrorCode.LABEL_NOT_FOUND));

label.updateLabel(request);
commandLabelPort.save(label);
}


@Transactional
@Override
public void deleteLabel(Long adminId, Long labelId) {
memberService.findActiveMember(adminId);

Label label = loadLabelPort.findById(labelId)
.orElseThrow(() -> new ApplicationException(LabelErrorCode.LABEL_NOT_FOUND));

label.deleteLabel();
commandLabelPort.save(label);
}
}
14 changes: 11 additions & 3 deletions src/main/java/clap/server/domain/model/task/Label.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package clap.server.domain.model.task;

import clap.server.adapter.inbound.web.dto.label.AddLabelRequest;
import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest;
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 @@ -20,12 +19,21 @@ public class Label extends BaseTime {
private LabelColor labelColor;
private boolean isDeleted;

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

public void updateLabel(AddAndEditLabelRequest request) {
this.labelName = request.labelName();
this.labelColor = request.labelColor();
}

public void deleteLabel() {
this.isDeleted = true;
}
}