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 @@ -2,17 +2,13 @@

import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
import clap.server.application.mapper.RetrieveAllMemberMapper;
import clap.server.application.port.inbound.admin.FindAllMembersUsecase;
import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase;
import clap.server.domain.model.member.Member;
import clap.server.exception.ApplicationException;
import clap.server.exception.code.MemberErrorCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import jakarta.validation.Valid;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
Expand All @@ -23,9 +19,7 @@
@RequestMapping("/api/managements")
@RequiredArgsConstructor
public class FindMemberController {
private final FindAllMembersUsecase findAllMembersUsecase;
private final FindMembersWithFilterUsecase findMembersWithFilterUsecase;
private final RetrieveAllMemberMapper retrieveAllMemberMapper;

@Tag(name = "05. Admin")
@Secured({"ROLE_ADMIN"})
Expand All @@ -38,26 +32,13 @@ public class FindMemberController {
}
)
@GetMapping("/members")
public ResponseEntity<Page<RetrieveAllMemberResponse>> getAllMembers(
public ResponseEntity<PageResponse<RetrieveAllMemberResponse>> getAllMembers(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int pageSize,
@RequestBody FindMemberRequest filterRequest) {

if (filterRequest.name() != null && filterRequest.name().trim().isEmpty()) {
throw ApplicationException.from(MemberErrorCode.NAME_CANNOT_BE_EMPTY);
}
@ModelAttribute @Valid FindMemberRequest filterRequest) {

Pageable pageable = PageRequest.of(page, pageSize);
Page<Member> members;

if (filterRequest.name() != null || filterRequest.email() != null || filterRequest.nickName() != null ||
filterRequest.departmentName() != null || filterRequest.role() != null) {
members = findMembersWithFilterUsecase.findMembersWithFilter(pageable, filterRequest);
} else {
members = findAllMembersUsecase.findAllMembers(pageable);
}

Page<RetrieveAllMemberResponse> response = members.map(retrieveAllMemberMapper::toResponse);
PageResponse<RetrieveAllMemberResponse> response = findMembersWithFilterUsecase.findMembersWithFilter(pageable, filterRequest);
return ResponseEntity.ok(response);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,26 @@

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 FindMemberRequest(
@NotNull
@Schema(description = "회원 이름", example = "양시훈")
String name,

@NotNull
@Schema(description = "회원 이메일", example = "sihun123@gmail.com")
String email,

@NotNull
@Schema(description = "회원 닉네임", example = "leo.sh")
String nickName,

@NotNull
@Schema(description = "부서 이름", example = "1")
String departmentName,

@NotNull
@Schema(description = "회원 역할", example = "ROLE_USER")
MemberRole role
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ public Page<Member> findAllMembers(Pageable pageable) {
@Override
public Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest) {
return memberRepository.findMembersWithFilter(pageable, filterRequest).map(memberPersistenceMapper::toDomain);

}
}

Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,17 @@ private BooleanBuilder createMemberFilter(FindMemberRequest filterRequest) {
BooleanBuilder whereClause = new BooleanBuilder();
whereClause.and(memberEntity.status.ne(MemberStatus.DELETED));

if (filterRequest.name() != null) {
if (!filterRequest.name().isBlank()) {
whereClause.and(memberEntity.name.containsIgnoreCase(filterRequest.name()));
}
if (filterRequest.email() != null) {
if (!filterRequest.email().isBlank()) {
whereClause.and(memberEntity.email.containsIgnoreCase(filterRequest.email()));
}
if (filterRequest.nickName() != null) {
if (!filterRequest.nickName().isBlank()) {
whereClause.and(memberEntity.nickname.containsIgnoreCase(filterRequest.nickName()));
}
if (filterRequest.departmentName() != null) {
whereClause.and(memberEntity.department.name.eq(filterRequest.departmentName()));
if (!filterRequest.departmentName().isBlank()) {
whereClause.and(memberEntity.department.name.contains(filterRequest.departmentName()));
}
if (filterRequest.role() != null) {
whereClause.and(memberEntity.role.eq(filterRequest.role()));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package clap.server.application.port.inbound.admin;

import clap.server.domain.model.member.Member;
import org.springframework.data.domain.Page;
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
import clap.server.adapter.inbound.web.dto.common.PageResponse;
import org.springframework.data.domain.Pageable;

public interface FindAllMembersUsecase {
Page<Member> findAllMembers(Pageable pageable);
}
PageResponse<RetrieveAllMemberResponse> findAllMembers(Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package clap.server.application.port.inbound.admin;

import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
import clap.server.domain.model.member.Member;
import org.springframework.data.domain.Page;
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
import clap.server.adapter.inbound.web.dto.common.PageResponse;

import org.springframework.data.domain.Pageable;

public interface FindMembersWithFilterUsecase {
Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest);
}
PageResponse<RetrieveAllMemberResponse> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest);
}

This file was deleted.

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

import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
import clap.server.domain.model.member.Member;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

public interface FindMembersWithFilterUsecase {
Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest);
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
package clap.server.application.service.admin;

import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.application.mapper.RetrieveAllMemberMapper;
import clap.server.application.port.inbound.admin.FindAllMembersUsecase;
import clap.server.application.port.outbound.member.LoadMemberPort;
import clap.server.domain.model.member.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class FindAllMembersService implements FindAllMembersUsecase {
private final LoadMemberPort loadMemberPort;
private final RetrieveAllMemberMapper retrieveAllMemberMapper;


@Transactional(readOnly = true)
@Override
public Page<Member> findAllMembers(Pageable pageable) {
return loadMemberPort.findAllMembers(pageable);
public PageResponse<RetrieveAllMemberResponse> findAllMembers(Pageable pageable) {
Page<Member> members = loadMemberPort.findAllMembers(pageable);
return PageResponse.from(members.map(retrieveAllMemberMapper::toResponse));
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
package clap.server.application.service.admin;


import clap.server.adapter.inbound.web.dto.admin.request.FindMemberRequest;
import clap.server.adapter.inbound.web.dto.admin.response.RetrieveAllMemberResponse;
import clap.server.adapter.inbound.web.dto.common.PageResponse;
import clap.server.application.mapper.RetrieveAllMemberMapper;
import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase;
import clap.server.application.port.outbound.member.LoadMemberPort;
import clap.server.domain.model.member.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class FindMembersWithFilterService implements FindMembersWithFilterUsecase {
private final LoadMemberPort loadMemberPort;
private final RetrieveAllMemberMapper retrieveAllMemberMapper;


@Transactional(readOnly = true)
@Override
public Page<Member> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest) {
return loadMemberPort.findMembersWithFilter(pageable, filterRequest);
public PageResponse<RetrieveAllMemberResponse> findMembersWithFilter(Pageable pageable, FindMemberRequest filterRequest) {
Page<Member> members = loadMemberPort.findMembersWithFilter(pageable, filterRequest);
return PageResponse.from(members.map(retrieveAllMemberMapper::toResponse));
}
}
Loading