Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

πŸš€ [Feature] - μœ μ € 연관관계, 쑰회 및 λ””ν…ŒμΌ μ„€μ • κ΅¬ν˜„ #22

Merged
merged 2 commits into from
Sep 29, 2022
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
@@ -1,7 +1,9 @@
package com.tikitaka.naechinso.domain.member;

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.MemberDetailJoinRequestDto;
import com.tikitaka.naechinso.domain.member.dto.MemberDetailResponseDto;
import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.global.annotation.AuthMember;
import com.tikitaka.naechinso.global.config.CommonApiResponse;
Expand All @@ -11,9 +13,11 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

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

@Slf4j
@RestController
Expand All @@ -24,22 +28,59 @@ public class MemberController {
private final MemberService memberService;

@GetMapping("/")
@ApiOperation(value = "μœ μ € μžμ‹ μ˜ 정보λ₯Ό κ°€μ Έμ˜¨λ‹€ (AccessToken ν•„μš”)")
public CommonApiResponse<MemberCommonJoinResponseDto> getMyInformation(HttpServletRequest request, @AuthMember Member member) {
@ApiOperation(value = "μœ μ € μžμ‹ μ˜ λͺ¨λ“  정보λ₯Ό κ°€μ Έμ˜¨λ‹€ (AccessToken ν•„μš”)")
public CommonApiResponse<MemberCommonResponseDto> getMyInformation(
HttpServletRequest request, @ApiIgnore @AuthMember Member member) {
//둜그인 μƒνƒœκ°€ μ•„λ‹Œ 경우 401
if (member == null) {
throw new UnauthorizedException(ErrorCode.UNAUTHORIZED_USER);
}
return CommonApiResponse.of(MemberCommonJoinResponseDto.of(member));
return CommonApiResponse.of(MemberCommonResponseDto.of(member));
}

@PostMapping("/join")
@ApiOperation(value = "곡톡 μœ μ €λ₯Ό κΈ°λ³Έ μ •λ³΄λ‘œ νšŒμ›κ°€μž… μ‹œν‚¨λ‹€")
public CommonApiResponse<MemberCommonResponseDto> joinCommonMember(
@Valid @RequestBody MemberCommonJoinRequestDto dto)
{
final MemberCommonResponseDto res = memberService.createCommonMember(dto);
return CommonApiResponse.of(res);
}

@GetMapping("/detail")
@ApiOperation(value = "νšŒμ›κ°€μž… μ„ΈλΆ€ 정보λ₯Ό κ°€μ Έμ˜¨λ‹€ (AccessToken ν•„μš”)")
public CommonApiResponse<MemberDetailResponseDto> getMemberDetail(
@ApiIgnore @AuthMember Member member)
{
//둜그인 μƒνƒœκ°€ μ•„λ‹Œ 경우 401
if (member == null) {
throw new UnauthorizedException(ErrorCode.UNAUTHORIZED_USER);
}
final MemberDetailResponseDto res = memberService.readDetail(member);
return CommonApiResponse.of(res);
}

@PostMapping("/join")
public CommonApiResponse<MemberCommonJoinResponseDto> joinCommonMember(@Valid @RequestBody MemberCommonJoinRequestDto dto) {
final MemberCommonJoinResponseDto res = memberService.joinCommonMember(dto);
@PostMapping("/detail")
@ApiOperation(value = "νšŒμ›κ°€μž… μ„ΈλΆ€ 정보λ₯Ό μž…λ ₯ν•œλ‹€ (AccessToken ν•„μš”)")
public CommonApiResponse<MemberDetailResponseDto> setMemberDetail(
@Valid @RequestBody MemberDetailJoinRequestDto dto,
@ApiIgnore @AuthMember Member member)
{
//둜그인 μƒνƒœκ°€ μ•„λ‹Œ 경우 401
if (member == null) {
throw new UnauthorizedException(ErrorCode.UNAUTHORIZED_USER);
}
final MemberDetailResponseDto res = memberService.createDetail(member, dto);
return CommonApiResponse.of(res);
}

//νŽ˜μ΄μ§• 처리 μΆ”κ°€ν•  μ˜ˆμ •
@GetMapping("/find")
@ApiOperation(value = "ν˜„μž¬ κ°€μž…ν•œ λͺ¨λ“  μœ μ €λ₯Ό λΆˆλŸ¬μ˜¨λ‹€")
public CommonApiResponse<List<MemberCommonResponseDto>> getMyInformation() {
return CommonApiResponse.of(memberService.findAll());
}

// @PostMapping("/login")


Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package com.tikitaka.naechinso.domain.member;

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.MemberDetailJoinRequestDto;
import com.tikitaka.naechinso.domain.member.dto.MemberDetailResponseDto;
import com.tikitaka.naechinso.domain.member.entity.Member;
import com.tikitaka.naechinso.domain.member.entity.MemberDetail;
import com.tikitaka.naechinso.global.common.response.TokenResponseDTO;
import com.tikitaka.naechinso.global.config.security.MemberAdapter;
import com.tikitaka.naechinso.global.config.security.dto.JwtDTO;
import com.tikitaka.naechinso.global.config.security.jwt.JwtTokenProvider;
import com.tikitaka.naechinso.global.error.ErrorCode;
import com.tikitaka.naechinso.global.error.exception.BadRequestException;
import com.tikitaka.naechinso.global.error.exception.NotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
Expand All @@ -17,8 +21,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
Expand All @@ -30,7 +36,14 @@ public class MemberService {
private final AuthenticationManagerBuilder authenticationManagerBuilder;
private final JwtTokenProvider jwtTokenProvider;

public MemberCommonJoinResponseDto joinCommonMember(MemberCommonJoinRequestDto dto) {
public List<MemberCommonResponseDto> findAll() {
List<MemberCommonResponseDto> memberList = memberRepository.findAll().stream()
.map(member -> MemberCommonResponseDto.of(member)).collect(Collectors.toList());
return memberList;
}


public MemberCommonResponseDto createCommonMember(MemberCommonJoinRequestDto dto) {

//이미 μ‘΄μž¬ν•˜λŠ” μœ μ €μΌ 경우 400
Optional<Member> checkMember = memberRepository.findByPhone(dto.getPhone());
Expand All @@ -41,13 +54,12 @@ public MemberCommonJoinResponseDto joinCommonMember(MemberCommonJoinRequestDto d
Member member = MemberCommonJoinRequestDto.toCommonMember(dto);
memberRepository.save(member);

MemberCommonJoinResponseDto res = MemberCommonJoinResponseDto.of(member);
MemberCommonResponseDto res = MemberCommonResponseDto.of(member);
return res;
}

public TokenResponseDTO login(String phone) {

System.out.println("phone = " + phone);
Member checkMember = memberRepository.findByPhone(phone)
.orElseThrow(() -> new BadRequestException(ErrorCode.USER_NOT_FOUND));

Expand All @@ -63,6 +75,26 @@ public TokenResponseDTO login(String phone) {
return tokenResponseDTO;
}


public MemberDetailResponseDto readDetail(Member member) {
//
// Member checkMember = memberRepository.findByPhone(phone)
// .orElseThrow(() -> new BadRequestException(ErrorCode.USER_NOT_FOUND));

MemberDetailResponseDto dto = MemberDetailResponseDto.of(member);

return dto;
}

public MemberDetailResponseDto createDetail(Member authMember, MemberDetailJoinRequestDto dto) {
//μ˜μ†μ„± μœ μ§€λ₯Ό μœ„ν•œ fetch
Member member = memberRepository.findById(authMember.getId())
.orElseThrow(() -> new NotFoundException(ErrorCode.USER_NOT_FOUND));
MemberDetail detail = MemberDetail.of(member, dto);
memberDetailRepository.save(detail);
return MemberDetailResponseDto.of(detail);
}

//
// public MemberCommonJoinResponseDto joinMemberWithDetail(MemberCommonJoinRequestDto dto) {
// //이미 μ‘΄μž¬ν•˜λŠ” μœ μ €μΌ 경우 400
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
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 org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;

Expand All @@ -18,16 +18,20 @@
@Builder
@ToString
public class MemberCommonJoinRequestDto {
@ApiModelProperty(example = "01010001000")
@NotBlank(message = "μ „ν™”λ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”")
@Pattern(regexp = "[0-9]{10,11}", message = "ν•˜μ΄ν”ˆ μ—†λŠ” 10~11자리 숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”")
private String phone;

@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;
Expand All @@ -50,12 +54,15 @@ public class MemberCommonJoinRequestDto {
@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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@
import com.tikitaka.naechinso.domain.member.entity.Member;
import lombok.*;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

/**
* μΆ”μ²œμΈ 및 μΆ”μ²œ λ°›λŠ” μ‚¬λžŒ 곡톡 κ°€μž…μ„ μœ„ν•œ Dtoμž…λ‹ˆλ‹€
* @author gengminy 220924
Expand All @@ -18,7 +13,7 @@
@Getter
@Builder
@ToString
public class MemberCommonJoinResponseDto {
public class MemberCommonResponseDto {
private String phone;

private String name;
Expand All @@ -27,8 +22,8 @@ public class MemberCommonJoinResponseDto {

private int age;

public static MemberCommonJoinResponseDto of(Member member) {
MemberCommonJoinResponseDto res = MemberCommonJoinResponseDto.builder()
public static MemberCommonResponseDto of(Member member) {
MemberCommonResponseDto res = MemberCommonResponseDto.builder()
.phone(member.getPhone())
.name(member.getName())
.gender(member.getGender())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.tikitaka.naechinso.domain.member.dto;

public class MemberDTO {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import com.tikitaka.naechinso.domain.member.constant.Gender;
import com.tikitaka.naechinso.domain.member.entity.Member;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import org.hibernate.validator.constraints.Length;

import javax.persistence.Column;
import javax.validation.constraints.*;

/**
Expand All @@ -16,61 +19,57 @@
@Builder
@ToString
public class MemberDetailJoinRequestDto {
@NotBlank(message = "μ „ν™”λ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”")
@Pattern(regexp = "[0-9]{10,11}", message = "ν•˜μ΄ν”ˆ μ—†λŠ” 10~11자리 숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”")
private String phone;
//μΆ”μ²œμΈ 정보
//
@ApiModelProperty(example = "180")
@Positive(message = "ν‚€λŠ” μ–‘μˆ˜μ—¬μ•Ό ν•©λ‹ˆλ‹€")
private int height;

@NotBlank(message = "이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”")
private String name;
@ApiModelProperty(example = "μ„œμšΈμ‹œ 강남ꡬ")
@NotBlank(message = "μ£Όμ†Œ 정보λ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String address;

@NotNull(message = "성별을 μž…λ ₯ν•΄μ£Όμ„Έμš”")
private Gender gender;
@NotBlank(message = "쒅ꡐ 정보λ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String religion;

@Min(value = 25, message = "25-33μ„ΈκΉŒμ§€λ§Œ κ°€μž… κ°€λŠ₯ν•©λ‹ˆλ‹€")
@Max(value = 33, message = "25-33μ„ΈκΉŒμ§€λ§Œ κ°€μž… κ°€λŠ₯ν•©λ‹ˆλ‹€")
private int age;
@NotBlank(message = "음주 정보λ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String drink;

@NotNull(message = "μ„œλΉ„μŠ€ μ΄μš©μ•½κ΄€ λ™μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
@AssertTrue(message = "μ„œλΉ„μŠ€ μ΄μš©μ•½κ΄€ λ™μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
private boolean acceptsService;
@NotBlank(message = "흑연 정보λ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String smoke;

@NotNull(message = "κ°œμΈμ •λ³΄ 이용 λ™μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
@AssertTrue(message = "κ°œμΈμ •λ³΄ 이용 λ™μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
private boolean acceptsInfo;
@ApiModelProperty(example = "ESTJ")
@Length(max = 4, message = "μ˜¬λ°”λ₯Ό MBTI 정보λ₯Ό μž…λ ₯ν•˜μ„Έμš”")
private String mbti = "";

@NotNull(message = "쒅ꡐ 정보 제곡 λ™μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
@AssertTrue(message = "쒅ꡐ 정보 제곡 λ™μ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
private boolean acceptsReligion;
@NotBlank(message = "성격 정보λ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String personality;

@NotNull(message = "μœ„μΉ˜ 정보 제곡 λ™μ˜ μ—¬λΆ€κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
private boolean acceptsLocation;
@NotBlank(message = "자기 μ†Œκ°œλ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String introduce = "";

@NotNull(message = "λ§ˆμΌ€νŒ… λ™μ˜ μ—¬λΆ€κ°€ ν•„μš”ν•©λ‹ˆλ‹€")
private boolean acceptsMarketing;
@NotBlank(message = "μ·¨λ―Έ 정보λ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String hobby = "";

@NotBlank(message = "직μž₯λͺ…을 μž…λ ₯ν•΄μ£Όμ„Έμš”")
private String jobName;
@NotBlank(message = "μ—°μ•  μŠ€νƒ€μΌμ„ μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String style = "";

@NotBlank(message = "직μž₯ λΆ€μ„œλ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”")
private String jobPart;
@NotBlank(message = "사진을 μ—…λ‘œλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€")
private String picture;

@ApiModelProperty(example = "μ„œμšΈ")
private String school;

@ApiModelProperty(example = "컴퓨터곡학과")
private String major;

@ApiModelProperty(example = "λŒ€ν•™κ΅")
private String eduLevel;

@NotBlank(message = "직μž₯ μœ„μΉ˜λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš”")
private String jobLocation;

public static Member toCommonMember(MemberDetailJoinRequestDto dto) {
Member member = Member.builder()
.phone(dto.phone)
.name(dto.name)
.gender(dto.gender)
.age(dto.age)
.acceptsService(dto.acceptsService)
.acceptsInfo(dto.acceptsInfo)
.acceptsReligion(dto.acceptsReligion)
.acceptsLocation(dto.acceptsLocation)
.acceptsMarketing(dto.acceptsMarketing)
.jobName(dto.jobName)
.jobPart(dto.jobPart)
.jobLocation(dto.jobLocation)

.build();

return member;
Expand Down
Loading