From 537c34965e1659c9efc25fb21d878721bba22190 Mon Sep 17 00:00:00 2001 From: RTUnu12 Date: Tue, 28 Jan 2025 21:26:53 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat=20:=20=EB=A9=94=EB=AA=A8=20ID=EB=A1=9C?= =?UTF-8?q?=20=EA=B0=9C=EC=9D=B8=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reevserver/domain/memo/controller/MemoController.java | 7 ++++++- .../dnd/reevserver/domain/memo/service/MemoService.java | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/dnd/reevserver/domain/memo/controller/MemoController.java b/src/main/java/com/dnd/reevserver/domain/memo/controller/MemoController.java index 141f1fa..f6a4c32 100644 --- a/src/main/java/com/dnd/reevserver/domain/memo/controller/MemoController.java +++ b/src/main/java/com/dnd/reevserver/domain/memo/controller/MemoController.java @@ -16,9 +16,14 @@ public class MemoController { private final MemoService memoService; + @GetMapping("/{memoId}") + public ResponseEntity findMemoById(@PathVariable Long memoId) { + return ResponseEntity.ok(memoService.findMemoById(memoId)); + } + @Operation(summary = "유저의 전체 메모 조회") @GetMapping("/{userId}") - public ResponseEntity> getMemosByUserId(@PathVariable String userId) { + public ResponseEntity> findMemosByUserId(@PathVariable String userId) { List memos = memoService.findMemosByUserId(userId); return ResponseEntity.ok(memos); } diff --git a/src/main/java/com/dnd/reevserver/domain/memo/service/MemoService.java b/src/main/java/com/dnd/reevserver/domain/memo/service/MemoService.java index 18ad72e..0be629f 100644 --- a/src/main/java/com/dnd/reevserver/domain/memo/service/MemoService.java +++ b/src/main/java/com/dnd/reevserver/domain/memo/service/MemoService.java @@ -22,8 +22,11 @@ public Memo findById(Long id) { return memoRepository.findById(id).orElseThrow(MemoNotFoundException::new); } + public MemoResponseDto findMemoById(Long id) { + return new MemoResponseDto(findById(id)); + } + // 유저의 전체 메모 조회 - // todo : 페이지네이션 필요 public List findMemosByUserId(String userId){ return memoRepository.findMemosByMember(memberService.findById(userId)).stream() .map(MemoResponseDto::new).collect(Collectors.toList()); From 7a6d751dc9bade222cf2243ed1aa75c97f534233 Mon Sep 17 00:00:00 2001 From: RTUnu12 Date: Tue, 28 Jan 2025 21:32:33 +0900 Subject: [PATCH 2/3] =?UTF-8?q?refactor=20:=20=EC=84=A4=EB=AA=85=20?= =?UTF-8?q?=EC=B9=BC=EB=9F=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/service/CustomOAuth2UserService.java | 2 +- .../template/dto/request/CreateTemplateRequestDto.java | 2 +- .../template/dto/request/UpdateTemplateRequestDto.java | 2 +- .../com/dnd/reevserver/domain/template/entity/Template.java | 6 ++++++ .../reevserver/domain/template/service/TemplateService.java | 5 ++++- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java b/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java index 2060833..8ad27d6 100644 --- a/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java +++ b/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java @@ -31,7 +31,7 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic String userId = attributes.get("id").toString(); String name = (String) profile.get("nickname"); - String profileImage = (String) profile.get("profile_image_url"); + String profileImage = "NA"; Optional member = memberRepository.findByUserId(userId); if (member.isPresent()) { diff --git a/src/main/java/com/dnd/reevserver/domain/template/dto/request/CreateTemplateRequestDto.java b/src/main/java/com/dnd/reevserver/domain/template/dto/request/CreateTemplateRequestDto.java index a17aa35..3cb819e 100644 --- a/src/main/java/com/dnd/reevserver/domain/template/dto/request/CreateTemplateRequestDto.java +++ b/src/main/java/com/dnd/reevserver/domain/template/dto/request/CreateTemplateRequestDto.java @@ -1,4 +1,4 @@ package com.dnd.reevserver.domain.template.dto.request; -public record CreateTemplateRequestDto(String userId, String templateName, String content) { +public record CreateTemplateRequestDto(String userId, String templateName, String content, String description) { } diff --git a/src/main/java/com/dnd/reevserver/domain/template/dto/request/UpdateTemplateRequestDto.java b/src/main/java/com/dnd/reevserver/domain/template/dto/request/UpdateTemplateRequestDto.java index c61248d..6f19afc 100644 --- a/src/main/java/com/dnd/reevserver/domain/template/dto/request/UpdateTemplateRequestDto.java +++ b/src/main/java/com/dnd/reevserver/domain/template/dto/request/UpdateTemplateRequestDto.java @@ -1,4 +1,4 @@ package com.dnd.reevserver.domain.template.dto.request; -public record UpdateTemplateRequestDto(Long templateId, String templateName, String content) { +public record UpdateTemplateRequestDto(Long templateId, String templateName, String content, String description) { } diff --git a/src/main/java/com/dnd/reevserver/domain/template/entity/Template.java b/src/main/java/com/dnd/reevserver/domain/template/entity/Template.java index 014867f..bf0d258 100644 --- a/src/main/java/com/dnd/reevserver/domain/template/entity/Template.java +++ b/src/main/java/com/dnd/reevserver/domain/template/entity/Template.java @@ -29,6 +29,10 @@ public class Template { @JoinColumn(name = "user_id") private Member member; // 유저 전용 템플릿의 소유자 (공용 템플릿일 경우 null) + @Column(name = "description", nullable = false) + private String description; + + public void updateTemplateName(String newTemplateName) { this.templateName = newTemplateName; } @@ -36,4 +40,6 @@ public void updateTemplateName(String newTemplateName) { public void updateContent(String newContent) { this.content = newContent; } + + public void updateDescription(String newDescription) { this.description = newDescription; } } diff --git a/src/main/java/com/dnd/reevserver/domain/template/service/TemplateService.java b/src/main/java/com/dnd/reevserver/domain/template/service/TemplateService.java index 0ad1bc4..5377dc0 100644 --- a/src/main/java/com/dnd/reevserver/domain/template/service/TemplateService.java +++ b/src/main/java/com/dnd/reevserver/domain/template/service/TemplateService.java @@ -58,12 +58,14 @@ public void createCustomTemplate(CreateTemplateRequestDto dto) { .content(dto.content()) .isPublic(false) .member(member) + .description(dto.description()) .build(); templateRepository.save(template); } - // 템플릿 제목, 내용 수정, isPublic이 false여만 가능, true면 PublicTemplateCannotModifyException 예외 처리 + // 템플릿 제목, 내용, 설명 수정, isPublic이 false여만 가능, true면 PublicTemplateCannotModifyException 예외 처리 @Transactional + // todo : 모든 수정에 자신의 객체가 맞는지 확인해야 할 듯? public void updateTemplate(UpdateTemplateRequestDto dto) { Template template = findById(dto.templateId()); @@ -73,6 +75,7 @@ public void updateTemplate(UpdateTemplateRequestDto dto) { template.updateTemplateName(dto.templateName()); template.updateContent(dto.content()); + template.updateDescription(dto.description()); } // 템플릿 삭제. isPublic이 false여만 가능, true면 PublicTemplateCannotDeleteException 예외 처리 From 8a9773a5a859c1b7dfc56a46771c0ad75f6f5454 Mon Sep 17 00:00:00 2001 From: RTUnu12 Date: Tue, 28 Jan 2025 21:43:53 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor=20:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EC=9D=B4=ED=9B=84=20=EC=A0=95=EB=B3=B4=20=EA=B8=B0=EC=9E=85?= =?UTF-8?q?=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/MemberController.java | 10 +++++++++- .../member/dto/request/InsertInfoRequestDto.java | 4 ++++ .../reevserver/domain/member/entity/Member.java | 14 ++++++++++++-- .../member/service/CustomOAuth2UserService.java | 4 ++-- .../domain/member/service/MemberService.java | 9 +++++++++ 5 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/dnd/reevserver/domain/member/dto/request/InsertInfoRequestDto.java diff --git a/src/main/java/com/dnd/reevserver/domain/member/controller/MemberController.java b/src/main/java/com/dnd/reevserver/domain/member/controller/MemberController.java index 0fedcc2..391b2d3 100644 --- a/src/main/java/com/dnd/reevserver/domain/member/controller/MemberController.java +++ b/src/main/java/com/dnd/reevserver/domain/member/controller/MemberController.java @@ -1,5 +1,6 @@ package com.dnd.reevserver.domain.member.controller; +import com.dnd.reevserver.domain.member.dto.request.InsertInfoRequestDto; import com.dnd.reevserver.domain.member.dto.request.UpdateMemberNicknameRequestDto; import com.dnd.reevserver.domain.member.dto.request.UpdateMemberProfileUrlRequestDto; import com.dnd.reevserver.domain.member.dto.response.MemberResponseDto; @@ -15,13 +16,20 @@ public class MemberController { private final MemberService memberService; - @Operation(summary = "유저 개별 정보 불러오기") + @Operation(summary = "유저 개별 정보 불러오기, profile_url이 NA면 기본 이미지입니다.") @GetMapping("/{userId}") public ResponseEntity getMemberById(@PathVariable String userId) { MemberResponseDto response = memberService.findByUserId(userId); return ResponseEntity.ok(response); } + @Operation(summary = "로그인 이후 정보 기입, 이 API를 악성 이용자가 지나치면 nickname은 기본닉네임+UUID으로, Job은 NA로 구성됩니다.") + @PatchMapping("/after-login") + public ResponseEntity insertInfoAfterLogin(@RequestBody InsertInfoRequestDto dto){ + memberService.insertInfoAfterLogin(dto); + return ResponseEntity.noContent().build(); + } + @Operation(summary = "닉네임 수정") @PatchMapping("/nickname") public ResponseEntity updateNickname(@RequestBody UpdateMemberNicknameRequestDto dto) { diff --git a/src/main/java/com/dnd/reevserver/domain/member/dto/request/InsertInfoRequestDto.java b/src/main/java/com/dnd/reevserver/domain/member/dto/request/InsertInfoRequestDto.java new file mode 100644 index 0000000..8b351fc --- /dev/null +++ b/src/main/java/com/dnd/reevserver/domain/member/dto/request/InsertInfoRequestDto.java @@ -0,0 +1,4 @@ +package com.dnd.reevserver.domain.member.dto.request; + +public record InsertInfoRequestDto(String userId, String nickname, String job) { +} diff --git a/src/main/java/com/dnd/reevserver/domain/member/entity/Member.java b/src/main/java/com/dnd/reevserver/domain/member/entity/Member.java index 2b807fc..57a5556 100644 --- a/src/main/java/com/dnd/reevserver/domain/member/entity/Member.java +++ b/src/main/java/com/dnd/reevserver/domain/member/entity/Member.java @@ -19,10 +19,13 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member implements OAuth2User { @Id - @Column(name = "user_id", length = 100, nullable = false, unique = true) + @Column(name = "user_id", length = 100, nullable = false) private String userId; - @Column(name = "nickname", nullable = false, length = 100) + @Column(name = "kakao_name", nullable = false, length = 100) + private String kakaoName; + + @Column(name = "nickname", nullable = false, length = 100, unique = true) private String nickname; @Column(name = "profile_url", nullable = false, length = 1000) @@ -31,6 +34,9 @@ public class Member implements OAuth2User { @Column(name = "role", nullable = false, length = 100) private String role; + @Column(name = "job", nullable = false, length = 100) + private String job; + @Override public Map getAttributes() { return null; @@ -53,4 +59,8 @@ public void updateNickname(String newNickname) { public void updateProfileUrl(String newProfileUrl) { this.profileUrl = newProfileUrl; } + + public void updateJob(String updateJob) { + this.job = updateJob; + } } diff --git a/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java b/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java index 8ad27d6..270a0dd 100644 --- a/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java +++ b/src/main/java/com/dnd/reevserver/domain/member/service/CustomOAuth2UserService.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.Optional; +import java.util.UUID; @Service @RequiredArgsConstructor @@ -31,14 +32,13 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic String userId = attributes.get("id").toString(); String name = (String) profile.get("nickname"); - String profileImage = "NA"; Optional member = memberRepository.findByUserId(userId); if (member.isPresent()) { return member.get(); } - Member newMember = new Member(userId, name, profileImage, "ROLE_USER"); + Member newMember = new Member(userId, name, "기본 닉네임"+ UUID.randomUUID(), "NA", "ROLE_USER", "NA"); // 사용자 정보 저장 memberRepository.save(newMember); diff --git a/src/main/java/com/dnd/reevserver/domain/member/service/MemberService.java b/src/main/java/com/dnd/reevserver/domain/member/service/MemberService.java index 3b86435..226db01 100644 --- a/src/main/java/com/dnd/reevserver/domain/member/service/MemberService.java +++ b/src/main/java/com/dnd/reevserver/domain/member/service/MemberService.java @@ -1,5 +1,6 @@ package com.dnd.reevserver.domain.member.service; +import com.dnd.reevserver.domain.member.dto.request.InsertInfoRequestDto; import com.dnd.reevserver.domain.member.dto.request.UpdateMemberNicknameRequestDto; import com.dnd.reevserver.domain.member.dto.request.UpdateMemberProfileUrlRequestDto; import com.dnd.reevserver.domain.member.dto.response.MemberResponseDto; @@ -40,6 +41,14 @@ public void updateProfileUrl(UpdateMemberProfileUrlRequestDto dto){ member.updateProfileUrl(dto.profileUrl()); } + // 로그인 이후 정보 기입 + @Transactional + public void insertInfoAfterLogin(InsertInfoRequestDto dto){ + Member member = findById(dto.userId()); + member.updateNickname(dto.nickname()); + member.updateJob(dto.job()); + } + // 회원 탈퇴 @Transactional public void deleteMember(String userId) {