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
Expand Up @@ -16,7 +16,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [작업 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [작업 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [회원 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

import java.util.List;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [회원 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase;

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.tags.Tag;
Expand All @@ -16,7 +17,8 @@
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.*;

@RestController
@Tag(name = "05. Admin [회원 관리]")
@WebAdapter
@RequestMapping("/api/managements")
@RequiredArgsConstructor
public class FindMemberController {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,41 @@

import clap.server.adapter.inbound.security.service.SecurityUserDetails;
import clap.server.adapter.inbound.web.dto.admin.request.UpdateMemberRequest;
import clap.server.adapter.inbound.web.dto.admin.response.MemberDetailsResponse;
import clap.server.application.port.inbound.admin.MemberDetailUsecase;
import clap.server.application.port.inbound.admin.UpdateMemberUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [회원 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements/members")
public class ManageMemberController {
private final UpdateMemberUsecase updateMemberUsecase;
private final MemberDetailUsecase memberDetailUsecase;

@Operation(summary = "회원 정보 수정 API")
@PostMapping("/{memberId}")
@Secured("ROLE_ADMIN")
public void registerMember(@AuthenticationPrincipal SecurityUserDetails userInfo,
@PathVariable Long memberId,
@RequestBody @Valid UpdateMemberRequest request){
@RequestBody @Valid UpdateMemberRequest request) {
updateMemberUsecase.updateMemberInfo(userInfo.getUserId(), memberId, request);
}

@Operation(summary = "회원 상세 정보 조회 API")
@GetMapping("/{memberId}/details")
@Secured("ROLE_ADMIN")
public ResponseEntity<MemberDetailsResponse> getMemberDetail(@AuthenticationPrincipal SecurityUserDetails userInfo,
@PathVariable Long memberId) {
return ResponseEntity.ok(memberDetailUsecase.getMemberDetail(memberId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [작업 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements/labels")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [회원 관리]")
@WebAdapter
@RequestMapping("/api/managements")
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import java.io.IOException;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [회원 관리]")
@WebAdapter
@RequestMapping("/api/managements")
public class RegisterMemberCsvController {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.*;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [회원 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

@Tag(name = "05. Admin")
@Tag(name = "05. Admin [작업 관리]")
@WebAdapter
@RequiredArgsConstructor
@RequestMapping("/api/managements")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package clap.server.adapter.inbound.web.dto.admin.response;

import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;

public record MemberDetailsResponse(
String profileImageUrl,
@Schema(description = "회원 이름", example = "서주원")
String name,
@Schema(description = "회원 아이디", example = "siena.it")
String nicknanme,
@Schema(description = "회원 이메일", example = "siena.it@gmail.com")
String email,
@Schema(description = "승인 권한 여부")
Boolean isReviewer,
@Schema(description = "회원 역할")
MemberRole role,
@NotNull @Schema(description = "부서 ID")
Long departmentId,
@Schema(description = "부서")
String departmentName,
@Schema(description = "직무")
String departmentRole
) {}

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package clap.server.application.mapper;


import clap.server.adapter.inbound.web.dto.admin.response.MemberDetailsResponse;
import clap.server.adapter.inbound.web.dto.member.response.MemberDetailInfoResponse;
import clap.server.adapter.inbound.web.dto.member.response.MemberProfileResponse;
import clap.server.domain.model.member.Member;
Expand Down Expand Up @@ -56,4 +57,18 @@ public static Member toMember(MemberInfo memberInfo) {
.build();
}

public static MemberDetailsResponse toMemberDetailsResponse(Member member) {
return new MemberDetailsResponse(
member.getImageUrl(),
member.getMemberInfo().getName(),
member.getMemberInfo().getNickname(),
member.getImageUrl(),
member.isReviewer(),
member.getMemberInfo().getRole(),
member.getMemberInfo().getDepartment().getDepartmentId(),
member.getMemberInfo().getDepartment().getName(),
member.getMemberInfo().getDepartmentRole()
);
}

}
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.admin.response.MemberDetailsResponse;

public interface MemberDetailUsecase {
MemberDetailsResponse getMemberDetail(Long memberId);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package clap.server.application.service.admin;

import clap.server.adapter.inbound.web.dto.admin.request.UpdateMemberRequest;
import clap.server.adapter.inbound.web.dto.admin.response.MemberDetailsResponse;
import clap.server.application.mapper.MemberResponseMapper;
import clap.server.application.port.inbound.admin.MemberDetailUsecase;
import clap.server.application.port.inbound.admin.UpdateMemberUsecase;
import clap.server.application.port.inbound.domain.MemberService;
import clap.server.application.port.outbound.member.CommandMemberPort;
Expand All @@ -15,13 +18,13 @@

@ApplicationService
@RequiredArgsConstructor
@Transactional
class UpdateMemberService implements UpdateMemberUsecase {
class ManageMemberService implements UpdateMemberUsecase, MemberDetailUsecase {
private final MemberService memberService;
private final CommandMemberPort commandMemberPort;
private final LoadDepartmentPort loadDepartmentPort;

@Override
@Transactional
public void updateMemberInfo(Long adminId, Long memberId, UpdateMemberRequest request) {
Member member = memberService.findActiveMember(memberId);
Department department = loadDepartmentPort.findById(request.departmentId()).orElseThrow(() ->
Expand All @@ -33,4 +36,11 @@ public void updateMemberInfo(Long adminId, Long memberId, UpdateMemberRequest re
department, request.role(), request.departmentRole());
commandMemberPort.save(member);
}

@Override
@Transactional(readOnly = true)
public MemberDetailsResponse getMemberDetail(Long memberId) {
Member member = memberService.findActiveMember(memberId);
return MemberResponseMapper.toMemberDetailsResponse(member);
}
}