Skip to content

Commit

Permalink
Merge pull request #15 from GDSC-Hongik/feature/member
Browse files Browse the repository at this point in the history
#12 main 에서 develop 으로 변경
  • Loading branch information
cmj7271 authored Jan 22, 2025
2 parents f6d262a + fb72a9b commit bfcf24a
Show file tree
Hide file tree
Showing 6 changed files with 199 additions and 0 deletions.
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();
}
}
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);
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/gdgoc/study_group/member/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@
import jakarta.persistence.OneToMany;
import java.util.ArrayList;
import java.util.List;
import lombok.*;

@Entity
@Builder
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -25,4 +31,17 @@ public class Member {
private String name;
private String github;
private String studentNumber;

/**
* 회원이 수정한 정보를 업데이트합니다.
* @param name 회원 이름
* @param github 회원 깃허브 주소
* @param studentNumber 회원 학번
*/
public void updateMember(String name, String github, String studentNumber) {

this.name = name;
this.github = github;
this.studentNumber = studentNumber;
}
}
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) {}
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) {}
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) {}

0 comments on commit bfcf24a

Please sign in to comment.