Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.tiki.server.member.dto.request.MemberProfileCreateRequest;
import com.tiki.server.member.dto.response.BelongTeamsGetResponse;

import com.tiki.server.member.dto.response.MemberInfoGetResponse;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

Expand All @@ -17,6 +18,7 @@

import static com.tiki.server.member.message.SuccessMessage.SUCCESS_CHANGING_PASSWORD;
import static com.tiki.server.member.message.SuccessMessage.SUCCESS_CREATE_MEMBER;
import static com.tiki.server.member.message.SuccessMessage.SUCCESS_GET_MEMBER_INFORMATION;
import static com.tiki.server.member.message.SuccessMessage.SUCCESS_WITHDRAWAL;
import static com.tiki.server.team.message.SuccessMessage.SUCCESS_GET_JOINED_TEAM;

Expand All @@ -35,11 +37,20 @@ public SuccessResponse<?> signUp(@RequestBody final MemberProfileCreateRequest r
return SuccessResponse.success(SUCCESS_CREATE_MEMBER.getMessage());
}

@Override
@ResponseStatus(HttpStatus.OK)
@GetMapping("/info")
public SuccessResponse<MemberInfoGetResponse> getMemberInfo(final Principal principal) {
long memberId = Long.parseLong(principal.getName());
MemberInfoGetResponse response = memberService.getMemberInfo(memberId);
return SuccessResponse.success(SUCCESS_GET_MEMBER_INFORMATION.getMessage(), response);
}

@Override
@ResponseStatus(HttpStatus.OK)
@GetMapping("/teams")
public SuccessResponse<BelongTeamsGetResponse> getBelongTeam(
final Principal principal
final Principal principal
) {
long memberId = Long.parseLong(principal.getName());
BelongTeamsGetResponse response = memberService.findBelongTeams(memberId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.tiki.server.member.dto.request.MemberProfileCreateRequest;
import com.tiki.server.member.dto.response.BelongTeamsGetResponse;

import com.tiki.server.member.dto.response.MemberInfoGetResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
Expand All @@ -20,79 +21,119 @@
@Tag(name = "members", description = "멤버 API")
public interface MemberControllerDocs {

@Operation(
summary = "회원가입 API",
description = "회원가입을 위한 정보를 보낸다.",
responses = {
@ApiResponse(responseCode = "201", description = "성공"),
@ApiResponse(
responseCode = "400",
description = "이메일 형식 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "400",
description = "비밀번호 불일치",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "409",
description = "이미 가입된 아이디",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<?> signUp(@RequestBody final MemberProfileCreateRequest request);
@Operation(
summary = "회원가입 API",
description = "회원가입을 위한 정보를 보낸다.",
responses = {
@ApiResponse(responseCode = "201", description = "성공"),
@ApiResponse(
responseCode = "400",
description = "이메일 형식 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "400",
description = "비밀번호 불일치",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "409",
description = "이미 가입된 아이디",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<?> signUp(@RequestBody final MemberProfileCreateRequest request);

@Operation(
summary = "소속 팀 가져오기",
description = "왼쪽 사이드바의 소속된 팀 정보를 가져옵니다.",
responses = {
@ApiResponse(responseCode = "200", description = "성공"),
@ApiResponse(
responseCode = "404",
description = "유효하지 않은 회원",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<BelongTeamsGetResponse> getBelongTeam(
@Parameter(hidden = true) final Principal principal
);
@Operation(
summary = "회원 정보 가져오기",
description = "회원 정보를 가져옵니다.",
responses = {
@ApiResponse(responseCode = "200", description = "성공"),
@ApiResponse(
responseCode = "404",
description = "유효하지 않은 회원",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<MemberInfoGetResponse> getMemberInfo(Principal principal);

@Operation(
summary = "비밀번호 변경",
description = "비밀번호를 변경합니다.",
responses = {
@ApiResponse(responseCode = "200", description = "성공"),
@ApiResponse(
responseCode = "400",
description = "비밀번호가 일치하지 않습니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "404",
description = "유효하지 않은 회원",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<?> changePassword(
@RequestBody final PasswordChangeRequest passwordChangeRequest
);
@Operation(
summary = "소속 팀 가져오기",
description = "왼쪽 사이드바의 소속된 팀 정보를 가져옵니다.",
responses = {
@ApiResponse(responseCode = "200", description = "성공"),
@ApiResponse(
responseCode = "404",
description = "유효하지 않은 회원",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<BelongTeamsGetResponse> getBelongTeam(
@Parameter(hidden = true) final Principal principal
);

@Operation(
summary = "비밀번호 변경",
description = "비밀번호를 변경합니다.",
responses = {
@ApiResponse(responseCode = "200", description = "성공"),
@ApiResponse(
responseCode = "400",
description = "비밀번호가 일치하지 않습니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "404",
description = "유효하지 않은 회원",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<?> changePassword(
@RequestBody final PasswordChangeRequest passwordChangeRequest
);

@Operation(
summary = "회원 탈퇴",
description = "회원 탈퇴를 진행합니다.",
responses = {
@ApiResponse(responseCode = "200", description = "성공"),
@ApiResponse(
responseCode = "404",
description = "유효하지 않은 회원",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "4xx",
description = "클라이언트(요청) 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))}
)
SuccessResponse<?> withdrawal(Principal principal);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.tiki.server.member.dto.response;

import jakarta.validation.constraints.NotNull;
import java.time.LocalDate;

public record MemberInfoGetResponse(
@NotNull String Email,
@NotNull String name,
@NotNull LocalDate birth,
@NotNull String University
) {

public static MemberInfoGetResponse from(
final String email,
final String name,
final LocalDate birth,
final String university
) {
return new MemberInfoGetResponse(email, name,birth, university);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public enum SuccessMessage {

SUCCESS_CREATE_MEMBER("회원가입 성공"),
SUCCESS_CHANGING_PASSWORD("비밀번호 변경 성공"),
SUCCESS_GET_MEMBER_INFORMATION("멤버 정보 불러오기 성공"),
SUCCESS_WITHDRAWAL("회원 탈퇴 성공"),;

private final String message;
Expand Down
17 changes: 13 additions & 4 deletions src/main/java/com/tiki/server/member/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.tiki.server.member.dto.request.MemberProfileCreateRequest;
import com.tiki.server.member.dto.response.BelongTeamsGetResponse;
import com.tiki.server.email.Email;
import com.tiki.server.member.dto.response.MemberInfoGetResponse;
import com.tiki.server.member.entity.Member;
import com.tiki.server.member.exception.MemberException;
import com.tiki.server.memberteammanager.adapter.MemberTeamManagerDeleter;
Expand Down Expand Up @@ -53,11 +54,18 @@ public void signUp(final MemberProfileCreateRequest request) {
}

public BelongTeamsGetResponse findBelongTeams(final long memberId) {
List<MemberTeamManager> memberTeamManagers = memberTeamManagerFinder.findAllByMemberIdOrderByCreatedAt(memberId);
List<MemberTeamManager> memberTeamManagers = memberTeamManagerFinder.findAllByMemberIdOrderByCreatedAt(
memberId);
List<Team> teams = getTeams(memberTeamManagers);
return BelongTeamsGetResponse.from(teams);
}

public MemberInfoGetResponse getMemberInfo(final long memberId) {
Member member = memberFinder.findById(memberId);
return MemberInfoGetResponse.from(member.getEmail().getEmail(), member.getName(), member.getBirth(),
member.getUniv().name());
}

@Transactional
public void changePassword(final PasswordChangeRequest request) {
Member member = memberFinder.checkEmpty(Email.from(request.email()));
Expand All @@ -69,7 +77,8 @@ public void changePassword(final PasswordChangeRequest request) {
@Transactional
public void withdrawal(final long memberId) {
Member member = memberFinder.findById(memberId);
List<MemberTeamManager> memberTeamManagers = memberTeamManagerFinder.findAllByMemberIdOrderByCreatedAt(memberId);
List<MemberTeamManager> memberTeamManagers = memberTeamManagerFinder.findAllByMemberIdOrderByCreatedAt(
memberId);
for (MemberTeamManager memberTeamManager : memberTeamManagers) {
Team team = teamFinder.findById(memberTeamManager.getTeamId());
memberTeamManager.checkMemberIsNotAdmin();
Expand All @@ -95,8 +104,8 @@ private void saveMember(final Member member) {

private List<Team> getTeams(final List<MemberTeamManager> memberTeamManagers) {
return memberTeamManagers.stream()
.map(memberTeamManager -> teamFinder.findById(memberTeamManager.getTeamId()))
.toList();
.map(memberTeamManager -> teamFinder.findById(memberTeamManager.getTeamId()))
.toList();
}

private void checkPasswordFormat(final String password) {
Expand Down