From 302e9e42c7312e74e2bc99f43ec6f27941c5bea7 Mon Sep 17 00:00:00 2001 From: ckkim817 Date: Sun, 14 Jul 2024 05:22:56 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[FEAT/#82]=20Memberjoin=20DTO=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/dto/MemberJoinRequest.java | 20 +++++++++++++++++++ .../domain/member/dto/MemberJoinResponse.java | 9 +++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinRequest.java create mode 100644 src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinResponse.java diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinRequest.java b/src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinRequest.java new file mode 100644 index 0000000..3c0df68 --- /dev/null +++ b/src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinRequest.java @@ -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 departmentList, + String businessCard, + String company, + String position, + String detailPosition, + String level +) { +} diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinResponse.java b/src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinResponse.java new file mode 100644 index 0000000..2eb9dd6 --- /dev/null +++ b/src/main/java/org/sopt/seonyakServer/domain/member/dto/MemberJoinResponse.java @@ -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); + } +} From 6e6c1672a773bd9abd977b915ec9dc3e422067db Mon Sep 17 00:00:00 2001 From: ckkim817 Date: Sun, 14 Jul 2024 05:23:49 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[FEAT/#82]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/model/Member.java | 40 ++++++++++++++++++- .../domain/member/service/MemberService.java | 32 +++++++++++++++ .../domain/senior/service/SeniorService.java | 19 +++++++++ 3 files changed, 89 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/model/Member.java b/src/main/java/org/sopt/seonyakServer/domain/member/model/Member.java index 8fdefe3..6c9e2ba 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/member/model/Member.java +++ b/src/main/java/org/sopt/seonyakServer/domain/member/model/Member.java @@ -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; @@ -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 departmentList; @OneToOne(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Senior senior; @@ -85,4 +89,36 @@ public static Member createMember( .email(email) .build(); } + + public void updateMember( + Boolean isSubscribed, + String nickname, + String image, + String phoneNumber, + String univName, + String field, + List 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; + } + } } diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java b/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java index 94cca73..4b1d3b6 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java +++ b/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java @@ -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; @@ -15,6 +19,7 @@ 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 @@ -22,8 +27,10 @@ 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}$"; @@ -101,4 +108,29 @@ 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()); + + System.out.println("Department List: " + memberJoinRequest.departmentList()); // 로그 추가 + + 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()); + } } diff --git a/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java b/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java index 3f958c3..7ed3381 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java +++ b/src/main/java/org/sopt/seonyakServer/domain/senior/service/SeniorService.java @@ -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; @@ -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()) From dbd38c2ed9229a36964541737727137d68ed4644 Mon Sep 17 00:00:00 2001 From: ckkim817 Date: Sun, 14 Jul 2024 05:24:07 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[FEAT/#82]=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/MemberController.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java b/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java index 64a0514..712c208 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java +++ b/src/main/java/org/sopt/seonyakServer/domain/member/controller/MemberController.java @@ -3,6 +3,8 @@ 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; @@ -10,6 +12,7 @@ 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; @@ -32,6 +35,13 @@ public ResponseEntity login( return ResponseEntity.ok(memberService.create(authorizationCode, loginRequest)); } + @PatchMapping("/auth/join") + public ResponseEntity join( + @RequestBody final MemberJoinRequest memberJoinRequest + ) { + return ResponseEntity.ok(memberService.patchMemberJoin(memberJoinRequest)); + } + @PostMapping("/nickname") public ResponseEntity validNickname( @Valid @RequestBody final NicknameRequest nicknameRequest From 1aaaec8db1b4a73e36c57ec451f5e233525d3ccb Mon Sep 17 00:00:00 2001 From: ckkim817 Date: Sun, 14 Jul 2024 05:40:47 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[DEL/#82]=20=ED=99=95=EC=9D=B8=EC=9A=A9=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/seonyakServer/domain/member/service/MemberService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java b/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java index 4b1d3b6..8aaa5f9 100644 --- a/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java +++ b/src/main/java/org/sopt/seonyakServer/domain/member/service/MemberService.java @@ -113,8 +113,6 @@ public void validNickname(final NicknameRequest nicknameRequest) { public MemberJoinResponse patchMemberJoin(MemberJoinRequest memberJoinRequest) { Member member = memberRepository.findMemberByIdOrThrow(principalHandler.getUserIdFromPrincipal()); - System.out.println("Department List: " + memberJoinRequest.departmentList()); // 로그 추가 - member.updateMember( memberJoinRequest.isSubscribed(), memberJoinRequest.nickname(),