-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #15 from GDSC-Hongik/feature/member
#12 main 에서 develop 으로 변경
- Loading branch information
Showing
6 changed files
with
199 additions
and
0 deletions.
There are no files selected for viewing
92 changes: 92 additions & 0 deletions
92
src/main/java/com/gdgoc/study_group/member/api/MemberController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
package com.gdgoc.study_group.member.api; | ||
|
||
import com.gdgoc.study_group.member.application.MemberService; | ||
import com.gdgoc.study_group.member.domain.Member; | ||
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; | ||
import io.swagger.v3.oas.annotations.tags.Tag; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@RestController | ||
@RequestMapping("/users") | ||
@RequiredArgsConstructor | ||
@Tag(name = "Member", description = "회원 API") | ||
public class MemberController { | ||
private final MemberService memberService; | ||
|
||
/** | ||
* 새 멤버를 생성합니다. | ||
* | ||
* @param request 새로 만들 멤버 정보 | ||
* @return 성공하면 생성 성공 메시지와 생성된 회원의 ID 반환 | ||
*/ | ||
@Operation(summary = "멤버 생성", description = "관리자가 직접 정보 넣어서 멤버 생성") | ||
@PostMapping | ||
public ResponseEntity<MemberCreateResponseDto> createMember(@RequestBody MemberRequestDto request) { | ||
Member createdMember = memberService.createMember(request); | ||
|
||
// record 생성자 직접 호출 | ||
MemberCreateResponseDto response = new MemberCreateResponseDto(createdMember.getId().toString()); | ||
|
||
return ResponseEntity.status(HttpStatus.CREATED).body(response); | ||
} | ||
|
||
/** | ||
* 멤버를 조회합니다. | ||
* | ||
* @param memberId 멤버를 조회할 정보 | ||
* @return 성공하면 성공 메시지와 회원 정보 반환 | ||
*/ | ||
@Operation(summary = "멤버 조회", description = "url에 담긴 id 정보로 해당 회원 정보 조회") | ||
@GetMapping("/{id}/profile") | ||
public ResponseEntity<MemberGetResponseDto> getMember( | ||
@PathVariable("id") Long memberId | ||
// @RequestHeader("Authorization") String authorizationHeader | ||
) { | ||
// // Bearer 토큰 추출 | ||
// String token = authorizationHeader.replace("Bearer ", ""); | ||
// | ||
// // TODO: JWT 토큰 검증 로직 추가 | ||
|
||
Member member = memberService.getMember(memberId); | ||
|
||
// record 생성자 직접 호출 | ||
MemberGetResponseDto response = new MemberGetResponseDto( | ||
member.getId().toString(), | ||
member.getName(), | ||
member.getGithub(), | ||
member.getStudentNumber() | ||
); | ||
|
||
return ResponseEntity.status(HttpStatus.OK).body(response); | ||
} | ||
|
||
/** | ||
* 멤버가 정보를 수정합니다. | ||
* | ||
* @param memberId 멤버를 조회할 정보 | ||
* @param request 수정할 정보 | ||
* @return 성공하면 성공 메시지 204 반환 | ||
*/ | ||
@Operation(summary = "멤버 정보 수정", description = "url에 담긴 id 정보로 해당 회원 정보 수정") | ||
@PatchMapping("/{id}/profile") | ||
public ResponseEntity<Void> updateMemberProfile( | ||
@PathVariable("id") Long memberId, | ||
@RequestBody MemberRequestDto request | ||
// @RequestHeader("Authorization") String authorizationHeader | ||
) { | ||
// // Bearer 토큰 추출 | ||
// String token = authorizationHeader.replace("Bearer ", ""); | ||
// | ||
// // TODO: JWT 토큰 검증 로직 추가 | ||
|
||
memberService.updateMember(memberId, request); | ||
|
||
return ResponseEntity.status(HttpStatus.RESET_CONTENT).build(); | ||
} | ||
} |
71 changes: 71 additions & 0 deletions
71
src/main/java/com/gdgoc/study_group/member/application/MemberService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package com.gdgoc.study_group.member.application; | ||
|
||
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; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
@Transactional(readOnly = true) | ||
public class MemberService { | ||
|
||
private final MemberRepository memberRepository; | ||
|
||
/** | ||
* 새 멤버를 생성합니다. | ||
* | ||
* @param request 새로 만들 멤버 정보 | ||
* @return Member 형태로 반환 | ||
*/ | ||
@Transactional | ||
public Member createMember(MemberRequestDto request) { | ||
|
||
Member newMember = | ||
Member.builder() | ||
.name(request.name()) | ||
.github(request.github()) | ||
.studentNumber(request.studentNumber()) | ||
.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, MemberRequestDto request) { | ||
|
||
Member member = getMember(memberId); | ||
|
||
// 수정할 정보가 있을 시, 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); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
src/main/java/com/gdgoc/study_group/member/dto/request/MemberRequestDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.gdgoc.study_group.member.dto.request; | ||
|
||
public record MemberRequestDto( | ||
String name, | ||
String github, | ||
String studentNumber) {} |
4 changes: 4 additions & 0 deletions
4
src/main/java/com/gdgoc/study_group/member/dto/response/MemberCreateResponseDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
package com.gdgoc.study_group.member.dto.response; | ||
|
||
public record MemberCreateResponseDto( | ||
String studentId) {} |
7 changes: 7 additions & 0 deletions
7
src/main/java/com/gdgoc/study_group/member/dto/response/MemberGetResponseDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.gdgoc.study_group.member.dto.response; | ||
|
||
public record MemberGetResponseDto( | ||
String studentId, | ||
String name, | ||
String github, | ||
String studentNumber) {} |