Skip to content

Commit

Permalink
🚀 feat(join): 가입 플로우 초기 구성 #20
Browse files Browse the repository at this point in the history
  • Loading branch information
gengminy committed Oct 1, 2022
1 parent ee390c2 commit 54be8d1
Show file tree
Hide file tree
Showing 10 changed files with 237 additions and 74 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.tikitaka.naechinso.domain.recommend;

import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendDTO;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendJoinRequestDTO;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendListResponseDTO;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendRequestDTO;
import com.tikitaka.naechinso.domain.recommend.dto.*;
import com.tikitaka.naechinso.global.annotation.AuthMember;
import com.tikitaka.naechinso.global.config.CommonApiResponse;
import com.tikitaka.naechinso.global.config.security.jwt.JwtTokenProvider;
Expand All @@ -19,6 +16,7 @@

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;

@Slf4j
@RestController
Expand Down Expand Up @@ -53,6 +51,17 @@ public CommonApiResponse<RecommendDTO> createRecommendNewSender(
return CommonApiResponse.of(recommendDTO);
}

@GetMapping("/find")
@ApiOperation(value = "[Admin]모든 추천사 정보를 가져온다 (AccessToken)")
public CommonApiResponse<List<RecommendDTO>> getAllRecommends(
@ApiIgnore @AuthMember Member member)
{
if (member == null) {
throw new UnauthorizedException(ErrorCode.UNAUTHORIZED_USER);
}
return CommonApiResponse.of(recommendService.findAll());
}

@PostMapping("/request")
@ApiOperation(value = "다른 유저에게 추천서 작성을 요청한다 (registerToken 필요)")
public CommonApiResponse<RecommendDTO> createRecommendRequest(
Expand All @@ -71,36 +80,35 @@ public CommonApiResponse<RecommendDTO> createRecommendRequest(



//제일 아래에 있어야함
@GetMapping("/{uuid}")
@ApiOperation(value = "추천 요청받은 uuid 를 가진 추천사 정보를 가져온다 (Register / AccessToken 필요)")
public CommonApiResponse<RecommendDTO> getRecommendByUuid(
HttpServletRequest request,
@PathVariable("uuid") String uuid)
{
//토큰 장착 확인
String token = request.getHeader("Authorization");
String phone = parseRegisterToken(token);

RecommendDTO recommendDTO = RecommendDTO.of(recommendService.findByUuid(uuid));
return CommonApiResponse.of(recommendDTO);
}

// //제일 아래에 있어야함
// @GetMapping("/{uuid}")
// @ApiOperation(value = "추천 요청받은 uuid 를 가진 추천사 정보를 가져온다")
// public CommonApiResponse<RecommendDTO> getRecommendByUuid(
// HttpServletRequest request,
// @PathVariable("uuid") String uuid,
// @Valid @RequestBody RecommendRequestDTO dto)
// {
// String registerToken = request.getHeader("Authorization");
// String phone = parseRegisterToken(registerToken);
//
//// RecommendDTO recommendDTO = recommendService.findAllRecommendRequestsByUuid(uuid);
// return CommonApiResponse.of(recommendDTO);
// }
@PatchMapping("/{uuid}")
@ApiOperation(value = "요청받은 uuid 추천사에 자신을 추천인으로 등록한다 (Register / AccessToken 필요)")
public CommonApiResponse<RecommendDTO> getRecommendByUuid(
HttpServletRequest request,
@PathVariable("uuid") String uuid,
@Valid @RequestBody RecommendAcceptRequestDTO dto)
{
//토큰 장착 확인
String token = request.getHeader("Authorization");
String phone = parseRegisterToken(token);

// //제일 아래에 있어야함
// @PatchMapping("/{uuid}")
// @ApiOperation(value = "요청받은 uuid 추천사에 추천인을 등록한다")
// public CommonApiResponse<RecommendDTO> getRecommendByUuid(
// HttpServletRequest request,
// @PathVariable("uuid") String uuid,
// @Valid @RequestBody RecommendRequestDTO dto)
// {
// String registerToken = request.getHeader("Authorization");
// String phone = parseRegisterToken(registerToken);
//
//// RecommendDTO recommendDTO = recommendService.findAllRecommendRequestsByUuid(uuid);
// return CommonApiResponse.of(recommendDTO);
// }
RecommendDTO recommendDTO = recommendService.updateRecommendRequest(uuid, phone, dto);
return CommonApiResponse.of(recommendDTO);
}

private String parseRegisterToken(String registerToken) {
if (StringUtils.isBlank(registerToken) || !jwtTokenService.validateToken(registerToken)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import java.util.List;
import java.util.Optional;
import java.util.UUID;

@Repository
public interface RecommendRepository extends JpaRepository<Recommend, Long> {
Expand All @@ -16,5 +17,9 @@ public interface RecommendRepository extends JpaRepository<Recommend, Long> {
List<Recommend> findAllBySender_Id(Long id);
List<Recommend> findAllBySenderPhone(String phone);

List<Recommend> findAllByIdNotNull();

Optional<Recommend> findByUuid(String uuid);

Boolean existsByReceiverPhone(String phone);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

import com.tikitaka.naechinso.domain.member.MemberRepository;
import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendDTO;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendJoinRequestDTO;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendListResponseDTO;
import com.tikitaka.naechinso.domain.recommend.dto.RecommendRequestDTO;
import com.tikitaka.naechinso.domain.recommend.dto.*;
import com.tikitaka.naechinso.domain.recommend.entity.Recommend;
import com.tikitaka.naechinso.global.error.ErrorCode;
import com.tikitaka.naechinso.global.error.exception.BadRequestException;
Expand All @@ -17,6 +14,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

@Service
@RequiredArgsConstructor
Expand All @@ -39,6 +37,11 @@ public RecommendDTO createRecommendJoin(String senderPhone, RecommendJoinRequest
throw new BadRequestException(ErrorCode.USER_ALREADY_EXIST);
}

//자기 자신을 추천하면 종료
if (senderPhone == dto.getReceiverPhone()) {
throw new BadRequestException(ErrorCode.CANNOT_RECOMMEND_MYSELF);
}

Member sender = dto.toSender(senderPhone);

Member receiver = memberRepository.findByPhone(dto.getReceiverPhone())
Expand Down Expand Up @@ -70,6 +73,11 @@ public RecommendDTO createRecommendJoin(String senderPhone, RecommendJoinRequest
}

public RecommendDTO createRecommendRequest(String receiverPhone, RecommendRequestDTO dto) {
//이미 추천사 요청을 보냄
if (existsByReceiverPhone(receiverPhone)) {
throw(new NotFoundException(ErrorCode.RECOMMEND_ALREADY_EXIST));
}

Member receiver = dto.toReceiver(receiverPhone);
Recommend recommend = Recommend.builder()
.sender(null)
Expand All @@ -86,6 +94,55 @@ public RecommendDTO createRecommendRequest(String receiverPhone, RecommendReques
return RecommendDTO.of(recommend);
}

public RecommendDTO updateRecommendRequest(String uuid, String senderPhone, RecommendAcceptRequestDTO dto) {

Recommend recommend = findByUuid(uuid);

//자기 자신을 추천하면 종료
if (senderPhone == recommend.getReceiverPhone()) {
throw new BadRequestException(ErrorCode.CANNOT_RECOMMEND_MYSELF);
}

//유저가 없으면 회원가입 시킴 있으면 그대로 사용
Member sender = memberRepository.findByPhone(senderPhone)
.orElse(dto.toSender(senderPhone));

recommend.setSender(sender);
recommend.setSenderPhone(senderPhone);
recommend.setSenderName(dto.getName());
recommend.setSenderAge(dto.getAge());
recommend.setSenderGender(dto.getGender());
recommend.setSenderJobName(dto.getJobName());
recommend.setSenderJobPart(dto.getJobPart());
recommend.setSenderJobLocation(dto.getJobLocation());
recommend.setReceiverName(dto.getReceiverName());
recommend.setReceiverAge(dto.getReceiverAge());
recommend.setReceiverAppeal(dto.getAppeal());
recommend.setReceiverGender(dto.getReceiverGender());
recommend.setReceiverMeet(dto.getMeet());
recommend.setReceiverPersonality(dto.getPersonality());

memberRepository.save(sender);
recommendRepository.save(recommend);

return RecommendDTO.of(recommend);
}


public List<RecommendDTO> findAll() {
List<RecommendDTO> recommendDTOList = new ArrayList<>();

recommendRepository.findAllByIdNotNull().forEach(
recommend -> recommendDTOList.add(RecommendDTO.of(recommend))
);

recommendDTOList.forEach(
recommendDTO -> System.out.println("recommendDTO = " + recommendDTO)
);

return recommendDTOList;
}

public List<RecommendDTO> findAllBySenderPhone(String phone) {
List<RecommendDTO> recommendDTOList = new ArrayList<>();
recommendRepository.findAllBySenderPhone(phone).stream().map(
Expand All @@ -94,12 +151,10 @@ public List<RecommendDTO> findAllBySenderPhone(String phone) {
return recommendDTOList;
}

// //링크로 요청한
// public RecommendDTO findAllRecommendRequestsByUuid(String uuid){
// RecommendMeta meta = recommendMetaRepository.findByUuid(uuid)
// .orElseThrow(() -> new NotFoundException(ErrorCode.USER_NOT_FOUND));
// return RecommendDTO.of(meta.getRecommend());
// }
public Recommend findByUuid(String uuid) {
return recommendRepository.findByUuid(uuid)
.orElseThrow(() -> new NotFoundException(ErrorCode.RECOMMEND_NOT_FOUND));
}

public Boolean existsByReceiverPhone(String phone){
return recommendRepository.existsByReceiverPhone(phone);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package com.tikitaka.naechinso.domain.recommend.dto;

import com.tikitaka.naechinso.domain.member.constant.Gender;
import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.global.annotation.Enum;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import javax.validation.constraints.*;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Builder
@ToString
public class RecommendAcceptRequestDTO {
@ApiModelProperty(example = "닉")
@NotBlank(message = "이름을 입력해주세요")
private String name;

@ApiModelProperty(example = "M")
@Enum(enumClass = Gender.class, message = "성별 입력이 올바르지 않습니다. M 또는 W가 필요합니다")
private Gender gender;

@ApiModelProperty(example = "25")
@Min(value = 25, message = "25-33세까지만 가입 가능합니다")
@Max(value = 33, message = "25-33세까지만 가입 가능합니다")
private int age;

@NotNull(message = "서비스 이용약관 동의가 필요합니다")
@AssertTrue(message = "서비스 이용약관 동의가 필요합니다")
private boolean acceptsService;

@NotNull(message = "개인정보 이용 동의가 필요합니다")
@AssertTrue(message = "개인정보 이용 동의가 필요합니다")
private boolean acceptsInfo;

@NotNull(message = "종교 정보 제공 동의가 필요합니다")
@AssertTrue(message = "종교 정보 제공 동의가 필요합니다")
private boolean acceptsReligion;

@NotNull(message = "위치 정보 제공 동의 여부가 필요합니다")
private boolean acceptsLocation;

@NotNull(message = "마케팅 동의 여부가 필요합니다")
private boolean acceptsMarketing;

@ApiModelProperty(example = "카카오")
@NotBlank(message = "직장명을 입력해주세요")
private String jobName;

@ApiModelProperty(example = "개발자")
@NotBlank(message = "직장 부서를 입력해주세요")
private String jobPart;

@ApiModelProperty(example = "판교")
@NotBlank(message = "직장 위치를 입력해주세요")
private String jobLocation;


@ApiModelProperty(example = "박스")
@NotBlank(message = "친구의 이름을 입력해주세요")
private String receiverName;

@ApiModelProperty(example = "M")
@Enum(enumClass = Gender.class, message = "친구의 성별 입력이 올바르지 않습니다. M 또는 W가 필요합니다")
private Gender receiverGender;

@ApiModelProperty(example = "25")
@Min(value = 25, message = "25-33세까지만 추천 및 가입 가능합니다")
@Max(value = 33, message = "25-33세까지만 추천 및 가입 가능합니다")
private int receiverAge;

@ApiModelProperty(example = "CMC 에서")
@NotBlank(message = "만나게 된 계기를 입력해주세요")
private String meet;

@ApiModelProperty(example = "최고")
@NotBlank(message = "친구의 성격 키워드를 입력해주세요")
private String personality;

@ApiModelProperty(example = "짱")
@NotBlank(message = "친구의 매력을 입력해주세요")
private String appeal;


public Member toSender(String phone){
return Member.builder()
.phone(phone)
.name(this.name)
.gender(this.gender)
.age(this.age)
.acceptsService(this.acceptsService)
.acceptsInfo(this.acceptsInfo)
.acceptsReligion(this.acceptsReligion)
.acceptsLocation(this.acceptsLocation)
.acceptsMarketing(this.acceptsMarketing)
.jobName(this.jobName)
.jobPart(this.jobPart)
.jobLocation(this.jobLocation)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import lombok.*;

import javax.persistence.*;
import java.util.UUID;

@AllArgsConstructor
@NoArgsConstructor
Expand All @@ -14,11 +15,9 @@
@ToString
public class RecommendDTO {

private String phone;

private Long senderId;
private String uuid;

private Long receiverId;
private String phone;

private String name;

Expand All @@ -28,6 +27,10 @@ public class RecommendDTO {

private String appeal;

private Long senderId;

private Long receiverId;


public static RecommendDTO of(Recommend recommend) {
Long senderId;
Expand All @@ -45,6 +48,7 @@ public static RecommendDTO of(Recommend recommend) {
}

return RecommendDTO.builder()
.uuid(recommend.getUuid())
.phone(recommend.getReceiverPhone())
.senderId(senderId)
.receiverId(receiverId)
Expand Down
Loading

0 comments on commit 54be8d1

Please sign in to comment.