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
Binary file modified .github/image/tf-erd.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
package clap.server.adapter.inbound.web.dto.auth.response;

import io.swagger.v3.oas.annotations.media.Schema;

public record LoginResponse(
String accessToken,
String refreshToken,
@Schema(description = "회원 정보")
MemberInfoResponse memberInfo
String refreshToken
) {}

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package clap.server.adapter.inbound.web.dto.member.request;

import clap.server.common.annotation.validation.password.ValidPassword;
import jakarta.validation.constraints.NotBlank;

public record UpdateInitialPasswordRequest(
@NotBlank @ValidPassword
String password
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package clap.server.adapter.inbound.web.dto.member.request;

import clap.server.common.annotation.validation.password.ValidPassword;
import jakarta.validation.constraints.NotBlank;

public record UpdatePasswordRequest(
@NotBlank @ValidPassword
String password
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package clap.server.adapter.inbound.web.dto.task.request;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;

public record TerminateTaskRequest(
@Schema(description = "종료 사유")
@NotBlank
String reason
) {
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package clap.server.adapter.inbound.web.member;

import clap.server.adapter.inbound.security.service.SecurityUserDetails;
import clap.server.adapter.inbound.web.dto.member.request.UpdateInitialPasswordRequest;
import clap.server.adapter.inbound.web.dto.member.request.UpdatePasswordRequest;
import clap.server.application.port.inbound.member.ResetInitialPasswordUsecase;
import clap.server.application.port.inbound.member.ResetPasswordUsecase;
import clap.server.application.port.inbound.member.VerifyPasswordUseCase;
import clap.server.common.annotation.architecture.WebAdapter;
import clap.server.common.annotation.validation.password.ValidPassword;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotBlank;
Expand All @@ -25,18 +26,18 @@ public class ResetPasswordController {
private final ResetInitialPasswordUsecase resetInitialPasswordUsecase;
private final VerifyPasswordUseCase verifyPasswordUseCase;

@Operation(summary = "초기 로그인 후 비밀번호 재설정 API", description = "swagger에서 따옴표를 포함하지 않고 요청합니다.")
@Operation(summary = "초기 로그인 후 비밀번호 재설정 API")
@PatchMapping("/members/initial-password")
public void resetPasswordAndActivateMember(@AuthenticationPrincipal SecurityUserDetails userInfo,
@RequestBody @NotBlank @ValidPassword String password) {
resetInitialPasswordUsecase.resetPasswordAndActivateMember(userInfo.getUserId(), password);
@RequestBody UpdateInitialPasswordRequest request) {
resetInitialPasswordUsecase.resetPasswordAndActivateMember(userInfo.getUserId(),request.password());
}

@Operation(summary = "비밀번호 재설정 API", description = "swagger에서 따옴표를 포함하지 않고 요청합니다.")
@Operation(summary = "비밀번호 재설정 API")
@PatchMapping("/members/password")
public void resetPassword(@AuthenticationPrincipal SecurityUserDetails userInfo,
@RequestBody @NotBlank @ValidPassword String password) {
resetPasswordUsecase.resetPassword(userInfo.getUserId(), password);
@RequestBody UpdatePasswordRequest request) {
resetPasswordUsecase.resetPassword(userInfo.getUserId(), request.password());
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package clap.server.adapter.inbound.web.task;

import clap.server.adapter.inbound.security.service.SecurityUserDetails;
import clap.server.adapter.inbound.web.dto.task.request.TerminateTaskRequest;
import clap.server.application.port.inbound.task.TerminateTaskUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand All @@ -24,8 +26,8 @@ public class TerminateTaskController {
@PatchMapping("/{taskId}/terminate")
public void terminateTask(@AuthenticationPrincipal SecurityUserDetails userInfo,
@PathVariable Long taskId,
@RequestBody @Schema(example = "스웨거에서는 따옴표를 떼고 보내주세요") String reason) {
terminateTaskUsecase.terminateTask(userInfo.getUserId(), taskId, reason);
@RequestBody TerminateTaskRequest request) {
terminateTaskUsecase.terminateTask(userInfo.getUserId(), taskId, request.reason());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,10 @@ private AuthResponseMapper() {
throw new IllegalArgumentException();
}

public static LoginResponse toLoginResponse(final String accessToken, final String refreshToken, final Member member) {
public static LoginResponse toLoginResponse(final String accessToken, final String refreshToken) {
return new LoginResponse(
accessToken,
refreshToken,
toMemberInfoResponse(member)
);
}

public static MemberInfoResponse toMemberInfoResponse(Member member) {
return new MemberInfoResponse(
member.getMemberId(),
member.getMemberInfo().getName(),
member.getMemberInfo().getNickname(),
member.getImageUrl(),
member.getMemberInfo().getRole(),
member.getStatus()
refreshToken
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@ public LoginResponse login(String nickname, String password, String clientIp) {

if (member.getStatus().equals(MemberStatus.APPROVAL_REQUEST)) {
String temporaryToken = manageTokenService.issueTemporaryToken(member.getMemberId());
return AuthResponseMapper.toLoginResponse(temporaryToken, null, member);
return AuthResponseMapper.toLoginResponse(temporaryToken, null);
}

CustomJwts jwtTokens = manageTokenService.issueTokens(member);
refreshTokenService.saveRefreshToken(manageTokenService.issueRefreshToken(member.getMemberId()));
loginAttemptService.resetFailedAttempts(clientIp);
return AuthResponseMapper.toLoginResponse(jwtTokens.accessToken(), jwtTokens.refreshToken(), member);
return AuthResponseMapper.toLoginResponse(jwtTokens.accessToken(), jwtTokens.refreshToken());
}

@Override
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/clap/server/exception/code/MemberErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ public enum MemberErrorCode implements BaseErrorCode {
PASSWORD_VERIFY_FAILED(HttpStatus.BAD_REQUEST, "MEMBER_006", "비밀번호 검증에 실패하였습니다"),
INVALID_CSV_FORMAT(HttpStatus.BAD_REQUEST, "MEMBER_007", "CSV 파일 형식이 잘못되었습니다."),
CSV_PARSING_ERROR(HttpStatus.BAD_REQUEST, "MEMBER_008", "CSV 데이터 파싱 중 오류가 발생했습니다."),
MEMBER_REGISTRATION_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "MEMBER_009", "회원 등록 중 오류가 발생했습니다."),
NAME_CANNOT_BE_EMPTY(HttpStatus.BAD_REQUEST, "MEMBER_010", "이름은 공백일 수 없습니다.")
MEMBER_REGISTRATION_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "MEMBER_009", "담당자만 리뷰 권한이 있습니다."),
NAME_CANNOT_BE_EMPTY(HttpStatus.BAD_REQUEST, "MEMBER_010", "이름은 공백일 수 없습니다."),

;

Expand Down