Skip to content

Commit

Permalink
🚀 feat(pend): 어드민 요청 승인 및 거절 구현 #37
Browse files Browse the repository at this point in the history
  • Loading branch information
gengminy committed Oct 10, 2022
1 parent 9d51f61 commit 1348bbc
Show file tree
Hide file tree
Showing 17 changed files with 175 additions and 49 deletions.
18 changes: 18 additions & 0 deletions src/main/java/com/tikitaka/naechinso/domain/TestController.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.tikitaka.naechinso.domain;

import com.tikitaka.naechinso.domain.member.MemberRepository;
import com.tikitaka.naechinso.domain.member.MemberService;
import com.tikitaka.naechinso.domain.member.constant.Gender;
import com.tikitaka.naechinso.domain.member.dto.MemberCommonJoinRequestDTO;
import com.tikitaka.naechinso.domain.member.dto.MemberCommonJoinResponseDTO;
import com.tikitaka.naechinso.domain.member.dto.MemberCommonResponseDTO;
import com.tikitaka.naechinso.domain.member.dto.MemberUpdateJobRequestDTO;
import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.domain.pending.PendingService;
Expand All @@ -15,6 +17,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -28,6 +31,8 @@
@RequestMapping("/test")
public class TestController {
private final MemberService memberService;

private final MemberRepository memberRepository;
private final RecommendService recommendService;
private final PendingService pendingService;

Expand Down Expand Up @@ -216,4 +221,17 @@ public CommonApiResponse<Object> createJobPendingMemberAndRecommendOther(
// .build()));
//
// }

@GetMapping("/set-admin-member/{id}")
@ApiOperation(value = "[*TEST*] 특정 고유 아이디의 유저를 어드민으로 만든다")
public CommonApiResponse<Object> createJobPendingMemberAndRecommendOther(
@PathVariable("id") Long id
) {
Member member = memberService.findById(id);
member.setAdmin();

memberRepository.save(member);

return CommonApiResponse.of(MemberCommonResponseDTO.of(member));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public CommonApiResponse<MemberCommonJoinResponseDTO> updateCommonMember(

@PatchMapping("/job")
@ApiOperation(value = "직업 인증 정보 업데이트 요청을 보낸다 (AccessToken)")
public CommonApiResponse<PendingFindResponseDTO> updateJob(
public CommonApiResponse<MemberCommonResponseDTO> updateJob(
@Valid @RequestBody MemberUpdateJobRequestDTO dto,
@ApiIgnore @AuthMember Member member
) {
Expand All @@ -86,7 +86,7 @@ public CommonApiResponse<PendingFindResponseDTO> updateJob(

@PatchMapping("/edu")
@ApiOperation(value = "학력 정보 업데이트 요청을 보낸다 (AccessToken)")
public CommonApiResponse<PendingFindResponseDTO> updateEdu(
public CommonApiResponse<MemberCommonResponseDTO> updateEdu(
@Valid @RequestBody MemberUpdateEduRequestDTO dto,
@ApiIgnore @AuthMember Member member
) {
Expand All @@ -95,7 +95,7 @@ public CommonApiResponse<PendingFindResponseDTO> updateEdu(

@PatchMapping("/image")
@ApiOperation(value = "프로필 이미지를 업데이트 한다 (AccessToken)")
public CommonApiResponse<PendingFindResponseDTO> updateImage(
public CommonApiResponse<MemberDetailResponseDTO> updateImage(
@Valid @RequestBody MemberUpdateImageRequestDTO dto,
@ApiIgnore @AuthMember Member member
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public MemberDetailResponseDTO createDetail(Member authMember, MemberDetailJoinR
* 직업 정보 업데이트 요청 처리
* 사진 필드는 Pending 에서 승인 후 처리한다
* */
public PendingFindResponseDTO updateJobRequest(Member authMember, MemberUpdateJobRequestDTO dto){
public MemberCommonResponseDTO updateJobRequest(Member authMember, MemberUpdateJobRequestDTO dto){
// member.updateJob(dto);
// memberRepository.save(member);

Expand All @@ -140,15 +140,15 @@ public PendingFindResponseDTO updateJobRequest(Member authMember, MemberUpdateJo
* 학력 정보 업데이트 요청 처리
* 사진 필드는 Pending 에서 승인 후 처리한다
* */
public PendingFindResponseDTO updateEduRequest(Member authMember, MemberUpdateEduRequestDTO dto){
public MemberCommonResponseDTO updateEduRequest(Member authMember, MemberUpdateEduRequestDTO dto){
//학력 정보 승인 요청
return pendingService.createPendingByEdu(authMember, dto);
}

/**
* MemberDetail 의 프로필 이미지를 업로드 한다
* */
public PendingFindResponseDTO updateImage(Member authMember, MemberUpdateImageRequestDTO dto){
public MemberDetailResponseDTO updateImage(Member authMember, MemberUpdateImageRequestDTO dto){
return pendingService.createPendingByMemberImage(authMember, dto);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public class MemberFindResponseDTO {

private String eduImage;

private LocalDateTime createdAt;
private String createdAt;


public static MemberFindResponseDTO of(Member member) {
Expand All @@ -65,7 +65,7 @@ public static MemberFindResponseDTO of(Member member) {
.eduMajor(member.getEduMajor())
.eduLevel(member.getEduLevel())
.eduImage(member.getEduImage())
.createdAt(member.getCreatedAt())
.createdAt(member.getCreatedAt().toString())
.build();

return res;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ public class MemberUpdateEduRequestDTO {
@NotBlank(message = "인증 사진을 업로드 해주세요")
private String eduImage;

public static MemberUpdateEduRequestDTO of(String content) {
JSONObject json = new JSONObject(content);
public static MemberUpdateEduRequestDTO of(String jsonStringContent) {
JSONObject json = new JSONObject(jsonStringContent);
try {
final String eduName = json.getString("eduName");
final String eduMajor = json.getString("eduMajor");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,20 @@ public void acceptEduImage() {
}





/**
* 테스트 이후 삭제합니다
* 테스트 이후 삭제합니다
* 테스트 이후 삭제합니다
* 테스트 이후 삭제합니다
* 테스트 이후 삭제합니다
* 테스트 이후 삭제합니다
* 테스트 이후 삭제합니다
* */
public void setAdmin() {
this.role = Role.ADMIN;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.domain.pending.dto.PendingRejectRequestDTO;
import com.tikitaka.naechinso.domain.pending.dto.PendingFindResponseDTO;
import com.tikitaka.naechinso.domain.pending.dto.PendingResponseDTO;
import com.tikitaka.naechinso.global.annotation.AuthMember;
import com.tikitaka.naechinso.global.config.CommonApiResponse;
import io.swagger.annotations.ApiOperation;
Expand All @@ -24,7 +25,7 @@ public class PendingController {

@GetMapping
@ApiOperation(value = "내 승인 대기 정보를 가져온다 (AccessToken)")
public CommonApiResponse<List<PendingFindResponseDTO>> getPendingByMember(
public CommonApiResponse<List<PendingResponseDTO>> getPendingByMember(
@ApiIgnore @AuthMember Member member
) {
return CommonApiResponse.of(pendingService.findAllByMemberId(member.getId()));
Expand All @@ -33,20 +34,28 @@ public CommonApiResponse<List<PendingFindResponseDTO>> getPendingByMember(
@GetMapping("/find")
@ApiOperation(value = "[Admin]모든 가입 대기 정보를 가져온다 (AccessToken)")
public CommonApiResponse<List<PendingFindResponseDTO>> getAllPending(
// @ApiIgnore @AuthMember Member member
@ApiIgnore @AuthMember Member adminMember
) {
return CommonApiResponse.of(pendingService.findAll());
}


@PostMapping("/accept/{id}")
@ApiOperation(value = "[테스트]요청을 승인한다 (AccessToken)")
@ApiOperation(value = "[Admin] 요청을 승인한다 (AccessToken)")
public CommonApiResponse<PendingFindResponseDTO> acceptPending(
@PathVariable("id") Long id
// @ApiIgnore @AuthMember Member member
@PathVariable("id") Long id,
@ApiIgnore @AuthMember Member adminMember
) {
Member member = Member.builder().id(10L).build(); /////
return CommonApiResponse.of(pendingService.acceptPending(adminMember, id));
}

return CommonApiResponse.of(pendingService.acceptPending(member, id));
@PostMapping("/reject/{id}")
@ApiOperation(value = "요청을 거부한다 (AccessToken)")
public CommonApiResponse<PendingFindResponseDTO> rejectPending(
@PathVariable("id") Long id,
@RequestBody PendingRejectRequestDTO dto,
@ApiIgnore @AuthMember Member adminMember
) {
return CommonApiResponse.of(pendingService.rejectPending(adminMember, id, dto));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import com.tikitaka.naechinso.domain.member.MemberRepository;
import com.tikitaka.naechinso.domain.member.dto.MemberUpdateEduRequestDTO;
import com.tikitaka.naechinso.domain.member.dto.MemberUpdateImageRequestDTO;
import com.tikitaka.naechinso.domain.member.dto.MemberUpdateJobRequestDTO;
import com.tikitaka.naechinso.domain.member.dto.*;
import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.domain.pending.constant.PendingType;
import com.tikitaka.naechinso.domain.pending.dto.PendingFindResponseDTO;
import com.tikitaka.naechinso.domain.pending.dto.PendingRejectRequestDTO;
import com.tikitaka.naechinso.domain.pending.dto.PendingResponseDTO;
import com.tikitaka.naechinso.domain.pending.dto.PendingUpdateMemberImageRequestDTO;
import com.tikitaka.naechinso.domain.pending.entity.Pending;
import com.tikitaka.naechinso.global.error.ErrorCode;
Expand Down Expand Up @@ -50,7 +50,7 @@ public class PendingService {
/**
* 학력 인증 정보 검토를 요청한다
* */
public PendingFindResponseDTO createPendingByEdu(Member authMember, MemberUpdateEduRequestDTO dto) {
public MemberCommonResponseDTO createPendingByEdu(Member authMember, MemberUpdateEduRequestDTO dto) {
//영속성 컨텍스트 가져오기
Member member = memberRepository.findById(authMember.getId())
.orElseThrow(() -> new NotFoundException(ErrorCode.USER_NOT_FOUND));
Expand All @@ -71,14 +71,14 @@ public PendingFindResponseDTO createPendingByEdu(Member authMember, MemberUpdate
.build();

pendingRepository.save(pending);
return PendingFindResponseDTO.of(pending);
return MemberCommonResponseDTO.of(member);
}


/**
* 직장 인증 정보 검토를 요청한다
* */
public PendingFindResponseDTO createPendingByJob(Member authMember, MemberUpdateJobRequestDTO dto) {
public MemberCommonResponseDTO createPendingByJob(Member authMember, MemberUpdateJobRequestDTO dto) {
//영속성 컨텍스트 가져오기
Member member = memberRepository.findById(authMember.getId())
.orElseThrow(() -> new NotFoundException(ErrorCode.USER_NOT_FOUND));
Expand All @@ -99,13 +99,13 @@ public PendingFindResponseDTO createPendingByJob(Member authMember, MemberUpdate
.build();

pendingRepository.save(pending);
return PendingFindResponseDTO.of(pending);
return MemberCommonResponseDTO.of(member);
}

/**
* 유저의 프로필 사진 검토를 요청한다
* */
public PendingFindResponseDTO createPendingByMemberImage(Member authMember, MemberUpdateImageRequestDTO dto) {
public MemberDetailResponseDTO createPendingByMemberImage(Member authMember, MemberUpdateImageRequestDTO dto) {
//영속성 컨텍스트 가져오기
Member member = memberRepository.findById(authMember.getId())
.orElseThrow(() -> new NotFoundException(ErrorCode.USER_NOT_FOUND));
Expand All @@ -130,7 +130,7 @@ public PendingFindResponseDTO createPendingByMemberImage(Member authMember, Memb
.build();

pendingRepository.save(pending);
return PendingFindResponseDTO.of(pending);
return MemberDetailResponseDTO.of(member);
}

/**
Expand All @@ -146,6 +146,11 @@ public PendingFindResponseDTO acceptPending(Member adminMember, Long pendingId)
throw new BadRequestException(ErrorCode.USER_NOT_FOUND);
}

//이미 처리 완료된 요청
if (pending.getAdminId() != null) {
throw new BadRequestException(ErrorCode.PENDING_ALREADY_PROCESSED);
}

//어드민 유저가 아니면 접근 거부
// if (adminMember.getRole().getDetail() != "ROLE_ADMIN") {
// throw new UnauthorizedException(ErrorCode.UNAUTHORIZED_USER);
Expand All @@ -170,6 +175,35 @@ else if (pending.getType() == PendingType.MEMBER) {
return PendingFindResponseDTO.of(pending);
}

/**
* 유저의 요청을 거절하고 이유를 작성한다
* */
public PendingFindResponseDTO rejectPending(Member adminMember, Long pendingId, PendingRejectRequestDTO dto) {
Pending pending = pendingRepository.findById(pendingId)
.orElseThrow(() -> new NotFoundException(ErrorCode.PENDING_NOT_FOUND));

// Member pendingMember = pending.getMember();
// //유저 정보가 없는 요청
// if (pendingMember == null) {
// throw new BadRequestException(ErrorCode.USER_NOT_FOUND);
// }

//어드민 유저가 아니면 접근 거부
// if (adminMember.getRole().getDetail() != "ROLE_ADMIN") {
// throw new UnauthorizedException(ErrorCode.UNAUTHORIZED_USER);
// }

//이미 승인 되었거나 거부한 적 있는 요청
if (pending.getAdminId() != null) {
throw new BadRequestException(ErrorCode.PENDING_ALREADY_PROCESSED);
}

//요청을 거부함
pending.reject(adminMember, dto.getReason(), dto.getRejectImages());
pendingRepository.save(pending);

return PendingFindResponseDTO.of(pending);
}


//대기 승인 중인 정보를 모두 가져온다
Expand All @@ -178,10 +212,11 @@ public List<PendingFindResponseDTO> findAllByMemberIdAndIsAcceptedIsTrue(Long me
.stream().map(PendingFindResponseDTO::of).collect(Collectors.toList());
}

public List<PendingFindResponseDTO> findAllByMemberId(Long memberId) {
public List<PendingResponseDTO> findAllByMemberId(Long memberId) {
return pendingRepository.findAllByMemberId(memberId)
.stream().map(PendingFindResponseDTO::of).collect(Collectors.toList());
.stream().map(PendingResponseDTO::of).collect(Collectors.toList());
}

public List<PendingFindResponseDTO> findAll() {
return pendingRepository.findAll()
.stream().map(PendingFindResponseDTO::of).collect(Collectors.toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
import java.util.List;
import java.util.Map;

/**
* 사진 변경 및 인증 승인 요청에 대한 어드민용 응답 DTO
* @author gengminy 221010
* */
@AllArgsConstructor
@NoArgsConstructor
@Getter
Expand All @@ -35,8 +39,9 @@ public class PendingFindResponseDTO {

private List<String> images;

private String createdAt;
private List<String> rejectImages;

private String createdAt;

public static PendingFindResponseDTO of(Pending pending) {
Long memberId;
Expand All @@ -58,9 +63,11 @@ public static PendingFindResponseDTO of(Pending pending) {
.memberId(memberId)
.type(pending.getType())
.content(content)
.isAccepted(pending.getIsAccepted())
.reason(pending.getReason())
.isAccepted(pending.getIsAccepted())
.images(pending.getImages())
.reason(pending.getReason())
.rejectImages(pending.getRejectImages())
.adminId(pending.getAdminId())
.createdAt(pending.getCreatedAt().toString())
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import com.tikitaka.naechinso.domain.pending.constant.PendingType;
import com.tikitaka.naechinso.domain.pending.entity.Pending;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Positive;
import java.util.List;

@AllArgsConstructor
Expand All @@ -12,15 +15,10 @@
@Builder
@ToString
public class PendingRejectRequestDTO {

private PendingType type;

private Boolean isAccepted;

@ApiModelProperty(example = "개못씀")
@NotEmpty(message = "요청을 거부하는 이유를 작성해야 합니다")
private String reason;

private List<String> images;

private Long adminId;

@ApiModelProperty(example = "[\"img1.png\"]")
private List<String> rejectImages;
}
Loading

0 comments on commit 1348bbc

Please sign in to comment.