Skip to content

Commit

Permalink
[MERGE/#82] 회원가입 API 구현
Browse files Browse the repository at this point in the history
[FEAT] #82 - 회원가입 API 구현
  • Loading branch information
ckkim817 authored Jul 15, 2024
2 parents a28cd57 + 1aaaec8 commit ade9605
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.sopt.seonyakServer.domain.member.dto.LoginSuccessResponse;
import org.sopt.seonyakServer.domain.member.dto.MemberJoinRequest;
import org.sopt.seonyakServer.domain.member.dto.MemberJoinResponse;
import org.sopt.seonyakServer.domain.member.dto.NicknameRequest;
import org.sopt.seonyakServer.domain.member.dto.SendCodeRequest;
import org.sopt.seonyakServer.domain.member.dto.VerifyCodeRequest;
import org.sopt.seonyakServer.domain.member.service.MemberService;
import org.sopt.seonyakServer.domain.member.service.MessageService;
import org.sopt.seonyakServer.global.common.external.client.dto.MemberLoginRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -32,6 +35,13 @@ public ResponseEntity<LoginSuccessResponse> login(
return ResponseEntity.ok(memberService.create(authorizationCode, loginRequest));
}

@PatchMapping("/auth/join")
public ResponseEntity<MemberJoinResponse> join(
@RequestBody final MemberJoinRequest memberJoinRequest
) {
return ResponseEntity.ok(memberService.patchMemberJoin(memberJoinRequest));
}

@PostMapping("/nickname")
public ResponseEntity<Void> validNickname(
@Valid @RequestBody final NicknameRequest nicknameRequest
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.sopt.seonyakServer.domain.member.dto;

import java.util.List;

public record MemberJoinRequest(
String role,
Boolean isSubscribed,
String nickname,
String image,
String phoneNumber,
String univName,
String field,
List<String> departmentList,
String businessCard,
String company,
String position,
String detailPosition,
String level
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.sopt.seonyakServer.domain.member.dto;

public record MemberJoinResponse(
String role
) {
public static MemberJoinResponse of(final String role) {
return new MemberJoinResponse(role);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import java.util.List;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.sopt.seonyakServer.domain.senior.model.Senior;
import org.sopt.seonyakServer.global.common.model.BaseTimeEntity;

Expand Down Expand Up @@ -57,8 +60,9 @@ public class Member extends BaseTimeEntity {
@Column(name = "field")
private String field;

@Column(name = "department")
private String department;
@Column(name = "departmentList", columnDefinition = "jsonb")
@JdbcTypeCode(SqlTypes.JSON)
private List<String> departmentList;

@OneToOne(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Senior senior;
Expand All @@ -85,4 +89,36 @@ public static Member create(
.email(email)
.build();
}

public void updateMember(
Boolean isSubscribed,
String nickname,
String image,
String phoneNumber,
String univName,
String field,
List<String> department
) {
if (isSubscribed != null) {
this.isSubscribed = isSubscribed;
}
if (nickname != null) {
this.nickname = nickname;
}
if (image != null) {
this.image = image;
}
if (phoneNumber != null) {
this.phoneNumber = phoneNumber;
}
if (univName != null) {
this.univName = univName;
}
if (field != null) {
this.field = field;
}
if (department != null) {
this.departmentList = department;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

import lombok.RequiredArgsConstructor;
import org.sopt.seonyakServer.domain.member.dto.LoginSuccessResponse;
import org.sopt.seonyakServer.domain.member.dto.MemberJoinRequest;
import org.sopt.seonyakServer.domain.member.dto.MemberJoinResponse;
import org.sopt.seonyakServer.domain.member.dto.NicknameRequest;
import org.sopt.seonyakServer.domain.member.model.Member;
import org.sopt.seonyakServer.domain.member.model.SocialType;
import org.sopt.seonyakServer.domain.member.repository.MemberRepository;
import org.sopt.seonyakServer.domain.senior.service.SeniorService;
import org.sopt.seonyakServer.global.auth.MemberAuthentication;
import org.sopt.seonyakServer.global.auth.PrincipalHandler;
import org.sopt.seonyakServer.global.auth.jwt.JwtTokenProvider;
import org.sopt.seonyakServer.global.common.external.client.dto.MemberInfoResponse;
import org.sopt.seonyakServer.global.common.external.client.dto.MemberLoginRequest;
Expand All @@ -15,15 +19,18 @@
import org.sopt.seonyakServer.global.exception.model.CustomException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class MemberService {

private final MemberRepository memberRepository;
private final JwtTokenProvider jwtTokenProvider;
private final PrincipalHandler principalHandler;
private final GoogleSocialService googleSocialService;
private final MemberManagementService memberManagementService;
private final SeniorService seniorService;

private static final String NICKNAME_PATTERN = "^[a-zA-Z0-9가-힣]{2,8}$";

Expand Down Expand Up @@ -101,4 +108,27 @@ public void validNickname(final NicknameRequest nicknameRequest) {
throw new CustomException(ErrorType.NICKNAME_DUP_ERROR);
}
}

@Transactional
public MemberJoinResponse patchMemberJoin(MemberJoinRequest memberJoinRequest) {
Member member = memberRepository.findMemberByIdOrThrow(principalHandler.getUserIdFromPrincipal());

member.updateMember(
memberJoinRequest.isSubscribed(),
memberJoinRequest.nickname(),
memberJoinRequest.image(),
memberJoinRequest.phoneNumber(),
memberJoinRequest.univName(),
memberJoinRequest.field(),
memberJoinRequest.departmentList()
);

memberRepository.save(member);

if (memberJoinRequest.role().equals("SENIOR")) {
return MemberJoinResponse.of(seniorService.createSenior(memberJoinRequest, member));
}

return MemberJoinResponse.of(memberJoinRequest.role());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.util.List;
import lombok.RequiredArgsConstructor;
import org.sopt.seonyakServer.domain.member.dto.MemberJoinRequest;
import org.sopt.seonyakServer.domain.member.model.Member;
import org.sopt.seonyakServer.domain.senior.dto.SeniorListResponse;
import org.sopt.seonyakServer.domain.senior.dto.SeniorProfileRequest;
import org.sopt.seonyakServer.domain.senior.model.PreferredTimeList;
Expand All @@ -20,6 +22,23 @@ public class SeniorService {
private final SeniorRepository seniorRepository;
private final PrincipalHandler principalHandler;

@Transactional
public String createSenior(final MemberJoinRequest memberJoinRequest, Member member) {

Senior senior = Senior.createSenior(
member,
memberJoinRequest.businessCard(),
memberJoinRequest.detailPosition(),
memberJoinRequest.company(),
memberJoinRequest.position(),
memberJoinRequest.level()
);

seniorRepository.save(senior);

return memberJoinRequest.role();
}

@Transactional
public void patchSeniorProfile(SeniorProfileRequest seniorProfileRequest) {
Senior senior = seniorRepository.findSeniorByMemberId(principalHandler.getUserIdFromPrincipal())
Expand Down

0 comments on commit ade9605

Please sign in to comment.