From 2ed5212d0310288864549b2ac1f8b7b4a0315cab Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 15 Jan 2025 21:18:44 +0900 Subject: [PATCH 01/13] =?UTF-8?q?feat:=20=EB=A9=A4=EB=B2=84=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/application/MemberService.java | 35 +++++++++++++++++++ .../study_group/member/domain/Member.java | 5 +++ .../member/dto/MemberCreateRequestDto.java | 12 +++++++ .../member/dto/MemberUpdateRequestDto.java | 12 +++++++ 4 files changed, 64 insertions(+) create mode 100644 src/main/java/com/gdgoc/study_group/member/application/MemberService.java create mode 100644 src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java create mode 100644 src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java diff --git a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java new file mode 100644 index 0000000..75fba59 --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java @@ -0,0 +1,35 @@ +package com.gdgoc.study_group.member.application; + +import com.gdgoc.study_group.member.dao.MemberRepository; +import com.gdgoc.study_group.member.domain.Member; +import com.gdgoc.study_group.member.dto.MemberCreateRequestDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MemberService { + + private final MemberRepository memberRepository; + +// public MemberService(MemberRepository memberRepository) { +// this.memberRepository = memberRepository; +// } + + /** + * 멤버를 생성합니다. + * + * @param request 생성할 멤버의 정보 + * @return 생성된 정보를 Member 형식으로 반환 + */ + public Member createMember(MemberCreateRequestDto request) { + + Member newMember = Member.builder() + .name(request.getName()) + .github(request.getGithub()) + .studentNumber(request.getStudentNumber()) + .build(); + + return memberRepository.save(newMember); + } +} diff --git a/src/main/java/com/gdgoc/study_group/member/domain/Member.java b/src/main/java/com/gdgoc/study_group/member/domain/Member.java index a87cc9c..9fdb980 100644 --- a/src/main/java/com/gdgoc/study_group/member/domain/Member.java +++ b/src/main/java/com/gdgoc/study_group/member/domain/Member.java @@ -7,10 +7,15 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; +import lombok.*; import java.util.ArrayList; import java.util.List; @Entity +@Builder +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Getter public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java new file mode 100644 index 0000000..d070d04 --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java @@ -0,0 +1,12 @@ +package com.gdgoc.study_group.member.dto; + +import lombok.Getter; + +@Getter +public class MemberCreateRequestDto { + + private String name; + private String github; + private String studentNumber; + +} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java new file mode 100644 index 0000000..e812c2e --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java @@ -0,0 +1,12 @@ +package com.gdgoc.study_group.member.dto; + +import lombok.Getter; + +@Getter +public class MemberUpdateRequestDto { + + private String name; + private String github; + private String studentNumber; + +} From 8fe3efa3ca3feaaa60502f24ac9de0d75200933d Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 15 Jan 2025 21:25:04 +0900 Subject: [PATCH 02/13] =?UTF-8?q?Revert=20"feat:=20=EB=A9=A4=EB=B2=84=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 2ed5212d0310288864549b2ac1f8b7b4a0315cab. --- .../member/application/MemberService.java | 35 ------------------- .../study_group/member/domain/Member.java | 5 --- .../member/dto/MemberCreateRequestDto.java | 12 ------- .../member/dto/MemberUpdateRequestDto.java | 12 ------- 4 files changed, 64 deletions(-) delete mode 100644 src/main/java/com/gdgoc/study_group/member/application/MemberService.java delete mode 100644 src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java delete mode 100644 src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java diff --git a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java deleted file mode 100644 index 75fba59..0000000 --- a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.gdgoc.study_group.member.application; - -import com.gdgoc.study_group.member.dao.MemberRepository; -import com.gdgoc.study_group.member.domain.Member; -import com.gdgoc.study_group.member.dto.MemberCreateRequestDto; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class MemberService { - - private final MemberRepository memberRepository; - -// public MemberService(MemberRepository memberRepository) { -// this.memberRepository = memberRepository; -// } - - /** - * 멤버를 생성합니다. - * - * @param request 생성할 멤버의 정보 - * @return 생성된 정보를 Member 형식으로 반환 - */ - public Member createMember(MemberCreateRequestDto request) { - - Member newMember = Member.builder() - .name(request.getName()) - .github(request.getGithub()) - .studentNumber(request.getStudentNumber()) - .build(); - - return memberRepository.save(newMember); - } -} diff --git a/src/main/java/com/gdgoc/study_group/member/domain/Member.java b/src/main/java/com/gdgoc/study_group/member/domain/Member.java index 9fdb980..a87cc9c 100644 --- a/src/main/java/com/gdgoc/study_group/member/domain/Member.java +++ b/src/main/java/com/gdgoc/study_group/member/domain/Member.java @@ -7,15 +7,10 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; -import lombok.*; import java.util.ArrayList; import java.util.List; @Entity -@Builder -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@AllArgsConstructor -@Getter public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java deleted file mode 100644 index d070d04..0000000 --- a/src/main/java/com/gdgoc/study_group/member/dto/MemberCreateRequestDto.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.gdgoc.study_group.member.dto; - -import lombok.Getter; - -@Getter -public class MemberCreateRequestDto { - - private String name; - private String github; - private String studentNumber; - -} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java deleted file mode 100644 index e812c2e..0000000 --- a/src/main/java/com/gdgoc/study_group/member/dto/MemberUpdateRequestDto.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.gdgoc.study_group.member.dto; - -import lombok.Getter; - -@Getter -public class MemberUpdateRequestDto { - - private String name; - private String github; - private String studentNumber; - -} From 29b2e84931f4876e5ac1097bfa5a455140962c59 Mon Sep 17 00:00:00 2001 From: yeeunli Date: Fri, 17 Jan 2025 17:16:16 +0900 Subject: [PATCH 03/13] =?UTF-8?q?feat:=20=EB=A9=A4=EB=B2=84=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=A1=B0=ED=9A=8C,=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/application/MemberService.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/main/java/com/gdgoc/study_group/member/application/MemberService.java diff --git a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java new file mode 100644 index 0000000..ab6be68 --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java @@ -0,0 +1,61 @@ +package com.gdgoc.study_group.member.application; + +import com.gdgoc.study_group.member.dao.MemberRepository; +import com.gdgoc.study_group.member.domain.Member; +import com.gdgoc.study_group.member.dto.request.MemberCreateRequestDto; +import com.gdgoc.study_group.member.dto.request.MemberUpdateRequestDto; +import java.util.NoSuchElementException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class MemberService { + + private final MemberRepository memberRepository; + + /** + * 새 멤버를 생성합니다. + * + * @param request 새로 만들 멤버 정보 + * @return Member 형태로 반환 + */ + public Member createMember(MemberCreateRequestDto request) { + + Member newMember = + Member.builder() + .name(request.getName()) + .github(request.getGithub()) + .studentNumber(request.getStudentNumber()) + .build(); + + return memberRepository.save(newMember); + } + + /** + * 멤버를 조회합니다. + * + * @param memberId 멤버를 조회할 정보 + * @return Member 형태로 반환 + */ + public Member getMember(Long memberId) { + return memberRepository + .findById(memberId) + .orElseThrow(() -> new NoSuchElementException("member not found")); + } + + /** + * 멤버가 정보를 수정합니다. + * + * @param memberId 멤버를 조회할 정보 + * @param request 수정할 정보 + */ + @Transactional + public void updateMember(Long memberId, MemberUpdateRequestDto request) { + + Member member = getMember(memberId); + + member.updateMember(request.getName(), request.getGithub(), request.getStudentNumber()); + } +} From 6c428c36505474d0c656d47dd924fdfb2f5f1eea Mon Sep 17 00:00:00 2001 From: yeeunli Date: Fri, 17 Jan 2025 17:17:51 +0900 Subject: [PATCH 04/13] =?UTF-8?q?feat:=20=EB=A9=A4=EB=B2=84=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=A1=B0=ED=9A=8C,=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/MemberController.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/main/java/com/gdgoc/study_group/member/controller/MemberController.java diff --git a/src/main/java/com/gdgoc/study_group/member/controller/MemberController.java b/src/main/java/com/gdgoc/study_group/member/controller/MemberController.java new file mode 100644 index 0000000..c27fc5c --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/controller/MemberController.java @@ -0,0 +1,87 @@ +package com.gdgoc.study_group.member.controller; + +import com.gdgoc.study_group.member.application.MemberService; +import com.gdgoc.study_group.member.domain.Member; +import com.gdgoc.study_group.member.dto.request.MemberCreateRequestDto; +import com.gdgoc.study_group.member.dto.request.MemberUpdateRequestDto; +import com.gdgoc.study_group.member.dto.response.MemberCreateResponseDto; +import com.gdgoc.study_group.member.dto.response.MemberGetResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/users") +@RequiredArgsConstructor +public class MemberController { + private final MemberService memberService; + + /** + * 새 멤버를 생성합니다. + * + * @param request 새로 만들 멤버 정보 + * @return 성공하면 생성 성공 메시지와 생성된 회원의 ID 반환 + */ + @PostMapping + public ResponseEntity createMember(@RequestBody MemberCreateRequestDto request) { + Member createdMember = memberService.createMember(request); + + MemberCreateResponseDto response = MemberCreateResponseDto.builder() + .studentId(createdMember.getId().toString()) + .build(); + + return ResponseEntity.status(HttpStatus.CREATED).body(response); + } + + /** + * 멤버를 조회합니다. + * + * @param memberId 멤버를 조회할 정보 + * @return 성공하면 성공 메시지와 회원 정보 반환 + */ + @GetMapping("/{id}/profile") + public ResponseEntity getMember( + @PathVariable("id") Long memberId +// @RequestHeader("Authorization") String authorizationHeader + ) { +// // Bearer 토큰 추출 +// String token = authorizationHeader.replace("Bearer ", ""); +// +// // TODO: JWT 토큰 검증 로직 추가 + + Member member = memberService.getMember(memberId); + + MemberGetResponseDto response = MemberGetResponseDto.builder() + .studentId(member.getId().toString()) + .name(member.getName()) + .github(member.getGithub()) + .studentNumber(member.getStudentNumber()) + .build(); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } + + /** + * 멤버가 정보를 수정합니다. + * + * @param memberId 멤버를 조회할 정보 + * @param request 수정할 정보 + * @return 성공하면 성공 메시지 204 반환 + */ + @PatchMapping("/{id}/profile") + public ResponseEntity updateMemberProfile( + @PathVariable("id") Long memberId, + @RequestBody MemberUpdateRequestDto request +// @RequestHeader("Authorization") String authorizationHeader + ) { +// // Bearer 토큰 추출 +// String token = authorizationHeader.replace("Bearer ", ""); +// +// // TODO: JWT 토큰 검증 로직 추가 + + memberService.updateMember(memberId, request); + + return ResponseEntity.status(HttpStatus.NO_CONTENT).body("프로필 수정 성공"); + } +} From 08c6823a09f3015807096ae9a3552edc08c0b1e8 Mon Sep 17 00:00:00 2001 From: yeeunli Date: Fri, 17 Jan 2025 17:19:10 +0900 Subject: [PATCH 05/13] =?UTF-8?q?chore:=20=EB=A9=A4=EB=B2=84=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=EC=97=90=20=EB=A9=A4=EB=B2=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study_group/member/domain/Member.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/gdgoc/study_group/member/domain/Member.java b/src/main/java/com/gdgoc/study_group/member/domain/Member.java index a87cc9c..704fc56 100644 --- a/src/main/java/com/gdgoc/study_group/member/domain/Member.java +++ b/src/main/java/com/gdgoc/study_group/member/domain/Member.java @@ -9,8 +9,14 @@ import jakarta.persistence.OneToMany; import java.util.ArrayList; import java.util.List; +import lombok.*; @Entity +@Builder +@ToString +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Getter public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -25,4 +31,16 @@ public class Member { private String name; private String github; private String studentNumber; + + public void updateMember(String name, String github, String studentNumber) { + if (name != null) { + this.name = name; + } + if (github != null) { + this.github = github; + } + if (studentNumber != null) { + this.studentNumber = studentNumber; + } + } } From e379980f272fac5fbec6f914b6b1546b4f1a5e90 Mon Sep 17 00:00:00 2001 From: yeeunli Date: Fri, 17 Jan 2025 17:20:42 +0900 Subject: [PATCH 06/13] =?UTF-8?q?feat:=20=EB=A9=A4=EB=B2=84=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20dto=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit request와 response 분리 --- .../member/dto/request/MemberCreateRequestDto.java | 10 ++++++++++ .../member/dto/request/MemberUpdateRequestDto.java | 10 ++++++++++ .../dto/response/MemberCreateResponseDto.java | 10 ++++++++++ .../member/dto/response/MemberGetResponseDto.java | 13 +++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java create mode 100644 src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java create mode 100644 src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java create mode 100644 src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java diff --git a/src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java new file mode 100644 index 0000000..d36c7af --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java @@ -0,0 +1,10 @@ +package com.gdgoc.study_group.member.dto.request; + +import lombok.Getter; + +@Getter +public class MemberCreateRequestDto { + private String name; + private String github; + private String studentNumber; +} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java new file mode 100644 index 0000000..f870d5e --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java @@ -0,0 +1,10 @@ +package com.gdgoc.study_group.member.dto.request; + +import lombok.Getter; + +@Getter +public class MemberUpdateRequestDto { + private String name; + private String github; + private String studentNumber; +} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java new file mode 100644 index 0000000..9c6e94e --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java @@ -0,0 +1,10 @@ +package com.gdgoc.study_group.member.dto.response; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class MemberCreateResponseDto { + private String studentId; +} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java new file mode 100644 index 0000000..7911998 --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java @@ -0,0 +1,13 @@ +package com.gdgoc.study_group.member.dto.response; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class MemberGetResponseDto { + private String studentId; + private String name; + private String github; + private String studentNumber; +} From 65d64137078b56d089a61cb5340b7149b0fd3e5d Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 22 Jan 2025 19:01:59 +0900 Subject: [PATCH 07/13] =?UTF-8?q?refactor:=20MemberController=20api=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Please enter the commit message for your changes. Lines starting --- .../member/{controller => api}/MemberController.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) rename src/main/java/com/gdgoc/study_group/member/{controller => api}/MemberController.java (82%) diff --git a/src/main/java/com/gdgoc/study_group/member/controller/MemberController.java b/src/main/java/com/gdgoc/study_group/member/api/MemberController.java similarity index 82% rename from src/main/java/com/gdgoc/study_group/member/controller/MemberController.java rename to src/main/java/com/gdgoc/study_group/member/api/MemberController.java index c27fc5c..5d304d1 100644 --- a/src/main/java/com/gdgoc/study_group/member/controller/MemberController.java +++ b/src/main/java/com/gdgoc/study_group/member/api/MemberController.java @@ -1,4 +1,4 @@ -package com.gdgoc.study_group.member.controller; +package com.gdgoc.study_group.member.api; import com.gdgoc.study_group.member.application.MemberService; import com.gdgoc.study_group.member.domain.Member; @@ -6,6 +6,8 @@ import com.gdgoc.study_group.member.dto.request.MemberUpdateRequestDto; import com.gdgoc.study_group.member.dto.response.MemberCreateResponseDto; import com.gdgoc.study_group.member.dto.response.MemberGetResponseDto; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -14,6 +16,7 @@ @RestController @RequestMapping("/users") @RequiredArgsConstructor +@Tag(name = "Member", description = "회원 API") public class MemberController { private final MemberService memberService; @@ -23,8 +26,9 @@ public class MemberController { * @param request 새로 만들 멤버 정보 * @return 성공하면 생성 성공 메시지와 생성된 회원의 ID 반환 */ + @Operation(summary = "멤버 생성", description = "관리자가 직접 정보 넣어서 멤버 생성") @PostMapping - public ResponseEntity createMember(@RequestBody MemberCreateRequestDto request) { + public ResponseEntity createMember(@RequestBody MemberCreateRequestDto request) { Member createdMember = memberService.createMember(request); MemberCreateResponseDto response = MemberCreateResponseDto.builder() @@ -40,6 +44,7 @@ public ResponseEntity createMember(@RequestBody MemberCreateRequestDto reques * @param memberId 멤버를 조회할 정보 * @return 성공하면 성공 메시지와 회원 정보 반환 */ + @Operation(summary = "멤버 조회", description = "url에 담긴 id 정보로 해당 회원 정보 조회") @GetMapping("/{id}/profile") public ResponseEntity getMember( @PathVariable("id") Long memberId @@ -69,6 +74,7 @@ public ResponseEntity getMember( * @param request 수정할 정보 * @return 성공하면 성공 메시지 204 반환 */ + @Operation(summary = "멤버 정보 수정", description = "url에 담긴 id 정보로 해당 회원 정보 수정") @PatchMapping("/{id}/profile") public ResponseEntity updateMemberProfile( @PathVariable("id") Long memberId, From b5f1e969375b88b9c0328bbeeae5a05704080054 Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 22 Jan 2025 19:08:16 +0900 Subject: [PATCH 08/13] =?UTF-8?q?refactor:=20MemberService=EC=97=90=20tran?= =?UTF-8?q?sactional=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gdgoc/study_group/member/application/MemberService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java index ab6be68..dfbc657 100644 --- a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java +++ b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java @@ -21,6 +21,7 @@ public class MemberService { * @param request 새로 만들 멤버 정보 * @return Member 형태로 반환 */ + @Transactional public Member createMember(MemberCreateRequestDto request) { Member newMember = @@ -39,6 +40,7 @@ public Member createMember(MemberCreateRequestDto request) { * @param memberId 멤버를 조회할 정보 * @return Member 형태로 반환 */ + @Transactional(readOnly = true) public Member getMember(Long memberId) { return memberRepository .findById(memberId) From 86e6b33a42172c5df309e14a58ed72743d65d65d Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 22 Jan 2025 19:51:44 +0900 Subject: [PATCH 09/13] =?UTF-8?q?refactor:=20Member=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EC=A0=9C=EC=96=B4=EC=9E=90=20protected=EB=A1=9C=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 --- src/main/java/com/gdgoc/study_group/member/domain/Member.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gdgoc/study_group/member/domain/Member.java b/src/main/java/com/gdgoc/study_group/member/domain/Member.java index 704fc56..fca583a 100644 --- a/src/main/java/com/gdgoc/study_group/member/domain/Member.java +++ b/src/main/java/com/gdgoc/study_group/member/domain/Member.java @@ -14,7 +14,7 @@ @Entity @Builder @ToString -@NoArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter public class Member { From af3eb167dd5bf4255c6ef6a6523fbff507482ccb Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 22 Jan 2025 19:54:55 +0900 Subject: [PATCH 10/13] =?UTF-8?q?refactor:=20Member=20dto=20record?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/api/MemberController.java | 25 +++++++++---------- .../member/application/MemberService.java | 15 ++++++----- .../dto/request/MemberCreateRequestDto.java | 10 -------- .../member/dto/request/MemberRequestDto.java | 6 +++++ .../dto/request/MemberUpdateRequestDto.java | 10 -------- .../dto/response/MemberCreateResponseDto.java | 10 ++------ .../dto/response/MemberGetResponseDto.java | 16 ++++-------- 7 files changed, 32 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java create mode 100644 src/main/java/com/gdgoc/study_group/member/dto/request/MemberRequestDto.java delete mode 100644 src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java diff --git a/src/main/java/com/gdgoc/study_group/member/api/MemberController.java b/src/main/java/com/gdgoc/study_group/member/api/MemberController.java index 5d304d1..0ab64a1 100644 --- a/src/main/java/com/gdgoc/study_group/member/api/MemberController.java +++ b/src/main/java/com/gdgoc/study_group/member/api/MemberController.java @@ -2,8 +2,7 @@ import com.gdgoc.study_group.member.application.MemberService; import com.gdgoc.study_group.member.domain.Member; -import com.gdgoc.study_group.member.dto.request.MemberCreateRequestDto; -import com.gdgoc.study_group.member.dto.request.MemberUpdateRequestDto; +import com.gdgoc.study_group.member.dto.request.MemberRequestDto; import com.gdgoc.study_group.member.dto.response.MemberCreateResponseDto; import com.gdgoc.study_group.member.dto.response.MemberGetResponseDto; import io.swagger.v3.oas.annotations.Operation; @@ -28,12 +27,11 @@ public class MemberController { */ @Operation(summary = "멤버 생성", description = "관리자가 직접 정보 넣어서 멤버 생성") @PostMapping - public ResponseEntity createMember(@RequestBody MemberCreateRequestDto request) { + public ResponseEntity createMember(@RequestBody MemberRequestDto request) { Member createdMember = memberService.createMember(request); - MemberCreateResponseDto response = MemberCreateResponseDto.builder() - .studentId(createdMember.getId().toString()) - .build(); + // record 생성자 직접 호출 + MemberCreateResponseDto response = new MemberCreateResponseDto(createdMember.getId().toString()); return ResponseEntity.status(HttpStatus.CREATED).body(response); } @@ -57,12 +55,13 @@ public ResponseEntity getMember( Member member = memberService.getMember(memberId); - MemberGetResponseDto response = MemberGetResponseDto.builder() - .studentId(member.getId().toString()) - .name(member.getName()) - .github(member.getGithub()) - .studentNumber(member.getStudentNumber()) - .build(); + // record 생성자 직접 호출 + MemberGetResponseDto response = new MemberGetResponseDto( + member.getId().toString(), + member.getName(), + member.getGithub(), + member.getStudentNumber() + ); return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -78,7 +77,7 @@ public ResponseEntity getMember( @PatchMapping("/{id}/profile") public ResponseEntity updateMemberProfile( @PathVariable("id") Long memberId, - @RequestBody MemberUpdateRequestDto request + @RequestBody MemberRequestDto request // @RequestHeader("Authorization") String authorizationHeader ) { // // Bearer 토큰 추출 diff --git a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java index dfbc657..dc2287c 100644 --- a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java +++ b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java @@ -2,9 +2,8 @@ import com.gdgoc.study_group.member.dao.MemberRepository; import com.gdgoc.study_group.member.domain.Member; -import com.gdgoc.study_group.member.dto.request.MemberCreateRequestDto; -import com.gdgoc.study_group.member.dto.request.MemberUpdateRequestDto; import java.util.NoSuchElementException; +import com.gdgoc.study_group.member.dto.request.MemberRequestDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,13 +21,13 @@ public class MemberService { * @return Member 형태로 반환 */ @Transactional - public Member createMember(MemberCreateRequestDto request) { + public Member createMember(MemberRequestDto request) { Member newMember = Member.builder() - .name(request.getName()) - .github(request.getGithub()) - .studentNumber(request.getStudentNumber()) + .name(request.name()) + .github(request.github()) + .studentNumber(request.studentNumber()) .build(); return memberRepository.save(newMember); @@ -54,10 +53,10 @@ public Member getMember(Long memberId) { * @param request 수정할 정보 */ @Transactional - public void updateMember(Long memberId, MemberUpdateRequestDto request) { + public void updateMember(Long memberId, MemberRequestDto request) { Member member = getMember(memberId); - member.updateMember(request.getName(), request.getGithub(), request.getStudentNumber()); + member.updateMember(request.name(), request.github(), request.studentNumber()); } } diff --git a/src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java deleted file mode 100644 index d36c7af..0000000 --- a/src/main/java/com/gdgoc/study_group/member/dto/request/MemberCreateRequestDto.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.gdgoc.study_group.member.dto.request; - -import lombok.Getter; - -@Getter -public class MemberCreateRequestDto { - private String name; - private String github; - private String studentNumber; -} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/request/MemberRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberRequestDto.java new file mode 100644 index 0000000..5b8d109 --- /dev/null +++ b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberRequestDto.java @@ -0,0 +1,6 @@ +package com.gdgoc.study_group.member.dto.request; + +public record MemberRequestDto( + String name, + String github, + String studentNumber) {} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java b/src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java deleted file mode 100644 index f870d5e..0000000 --- a/src/main/java/com/gdgoc/study_group/member/dto/request/MemberUpdateRequestDto.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.gdgoc.study_group.member.dto.request; - -import lombok.Getter; - -@Getter -public class MemberUpdateRequestDto { - private String name; - private String github; - private String studentNumber; -} diff --git a/src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java index 9c6e94e..c5b47e0 100644 --- a/src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java +++ b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java @@ -1,10 +1,4 @@ package com.gdgoc.study_group.member.dto.response; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class MemberCreateResponseDto { - private String studentId; -} +public record MemberCreateResponseDto( + String studentId) {} \ No newline at end of file diff --git a/src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java index 7911998..d23c63a 100644 --- a/src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java +++ b/src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java @@ -1,13 +1,7 @@ package com.gdgoc.study_group.member.dto.response; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class MemberGetResponseDto { - private String studentId; - private String name; - private String github; - private String studentNumber; -} +public record MemberGetResponseDto( + String studentId, + String name, + String github, + String studentNumber) {} From 23381cc8d457d900271ff391a9332326362775b1 Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 22 Jan 2025 19:55:38 +0900 Subject: [PATCH 11/13] =?UTF-8?q?refactor:=20Member=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gdgoc/study_group/member/api/MemberController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gdgoc/study_group/member/api/MemberController.java b/src/main/java/com/gdgoc/study_group/member/api/MemberController.java index 0ab64a1..abda2cf 100644 --- a/src/main/java/com/gdgoc/study_group/member/api/MemberController.java +++ b/src/main/java/com/gdgoc/study_group/member/api/MemberController.java @@ -75,7 +75,7 @@ public ResponseEntity getMember( */ @Operation(summary = "멤버 정보 수정", description = "url에 담긴 id 정보로 해당 회원 정보 수정") @PatchMapping("/{id}/profile") - public ResponseEntity updateMemberProfile( + public ResponseEntity updateMemberProfile( @PathVariable("id") Long memberId, @RequestBody MemberRequestDto request // @RequestHeader("Authorization") String authorizationHeader @@ -87,6 +87,6 @@ public ResponseEntity updateMemberProfile( memberService.updateMember(memberId, request); - return ResponseEntity.status(HttpStatus.NO_CONTENT).body("프로필 수정 성공"); + return ResponseEntity.status(HttpStatus.RESET_CONTENT).build(); } } From 178ec0f5966abe882db50fb0ab5557597fd3f764 Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 22 Jan 2025 19:56:11 +0900 Subject: [PATCH 12/13] =?UTF-8?q?refactor:=20Member=20@Transactional=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gdgoc/study_group/member/application/MemberService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java index dc2287c..8122c75 100644 --- a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java +++ b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java @@ -10,6 +10,7 @@ @Service @RequiredArgsConstructor +@Transactional(readOnly = true) public class MemberService { private final MemberRepository memberRepository; @@ -39,7 +40,6 @@ public Member createMember(MemberRequestDto request) { * @param memberId 멤버를 조회할 정보 * @return Member 형태로 반환 */ - @Transactional(readOnly = true) public Member getMember(Long memberId) { return memberRepository .findById(memberId) From fb72a9b24b7c86c4da6afa30d0b81c027736860e Mon Sep 17 00:00:00 2001 From: yeeunli Date: Wed, 22 Jan 2025 21:06:59 +0900 Subject: [PATCH 13/13] =?UTF-8?q?refactor:=20Member=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EB=A1=9C=EC=A7=81=20Optional=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/application/MemberService.java | 11 ++++++++++- .../study_group/member/domain/Member.java | 19 ++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java index 8122c75..7866ad0 100644 --- a/src/main/java/com/gdgoc/study_group/member/application/MemberService.java +++ b/src/main/java/com/gdgoc/study_group/member/application/MemberService.java @@ -3,6 +3,7 @@ import com.gdgoc.study_group.member.dao.MemberRepository; import com.gdgoc.study_group.member.domain.Member; import java.util.NoSuchElementException; +import java.util.Optional; import com.gdgoc.study_group.member.dto.request.MemberRequestDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -57,6 +58,14 @@ public void updateMember(Long memberId, MemberRequestDto request) { Member member = getMember(memberId); - member.updateMember(request.name(), request.github(), request.studentNumber()); + // 수정할 정보가 있을 시, dto에 담겨온 정보로 수정됨 + String updatedName = Optional.ofNullable(request.name()) + .orElse(member.getName()); + String updatedGithub = Optional.ofNullable(request.github()) + .orElse(member.getGithub()); + String updatedStudentNumber = Optional.ofNullable(request.studentNumber()) + .orElse(member.getStudentNumber()); + + member.updateMember(updatedName, updatedGithub, updatedStudentNumber); } } diff --git a/src/main/java/com/gdgoc/study_group/member/domain/Member.java b/src/main/java/com/gdgoc/study_group/member/domain/Member.java index fca583a..558924d 100644 --- a/src/main/java/com/gdgoc/study_group/member/domain/Member.java +++ b/src/main/java/com/gdgoc/study_group/member/domain/Member.java @@ -32,15 +32,16 @@ public class Member { private String github; private String studentNumber; + /** + * 회원이 수정한 정보를 업데이트합니다. + * @param name 회원 이름 + * @param github 회원 깃허브 주소 + * @param studentNumber 회원 학번 + */ public void updateMember(String name, String github, String studentNumber) { - if (name != null) { - this.name = name; - } - if (github != null) { - this.github = github; - } - if (studentNumber != null) { - this.studentNumber = studentNumber; - } + + this.name = name; + this.github = github; + this.studentNumber = studentNumber; } }