Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
c073e3c
🔥 fix: converter 타입 변환 버그 수정
kingmingyu Feb 10, 2026
6c4fa25
✨ feat: 수취인 조회 시 같은 코인 타입만 반환
kingmingyu Feb 10, 2026
084a082
✨ feat: 수취인 조회 시 동일 코인 지갑 주소만 보이도록 필터 추가
kingmingyu Feb 10, 2026
6647197
Merge branch 'develop' into Feat/#83
kingmingyu Feb 10, 2026
c9a811b
✨ feat: DTO 검증 로직 추가
kingmingyu Feb 10, 2026
edf432f
♻️ refactor: 불필요한 어노테이션 제거
kingmingyu Feb 10, 2026
a086745
♻️ refactor: 검증 어노테이션 추가
rlawngjs0313 Feb 10, 2026
3c491f5
♻️ refactor: GeneralExceptionAdvice 클래스 추가 (HttpMessageNotReadableExc…
rlawngjs0313 Feb 10, 2026
5c63155
✨ feat: 주문 가능 정보 DTO에 market.bid/ask 필드 추가
seohyunk09 Feb 10, 2026
ef0c2a9
✨ feat: 빗썸 & 업비트 최소 주문 금액 검증 추가 및 마켓별 지원
seohyunk09 Feb 10, 2026
2ea38ee
🚀 chore: 주문 가능 여부 확인 API 디버깅 로그 추가
seohyunk09 Feb 10, 2026
408c6ea
🐛 fix: 시장가 매도 시 현재가 기반 최소 주문 금액 검증 추가
seohyunk09 Feb 10, 2026
f1b0cbd
🔥 remove: 주문 가능 여부 확인 API에서 password 파라미터 제거
seohyunk09 Feb 10, 2026
cc94056
🐛 fix: 빗썸 시장가 주문 생성 시 불필요한 필드 제외 처리
seohyunk09 Feb 10, 2026
765448c
Merge pull request #99 from UMCSCOI/Fix/#94
seohyunk09 Feb 11, 2026
0e1a006
✨ feat: 인증번호는 숫자만 허용하도록 추가
komascode Feb 11, 2026
8dbf054
🔧 fix: 중복 에러코드 수정
komascode Feb 11, 2026
8de99f7
🔧 fix: 최대 수명은 연장되지 않도록 수정
komascode Feb 11, 2026
ca12365
♻️ refactor: 직접 SQL로 변경하도록 변경
komascode Feb 11, 2026
397bf22
✨ feat: 어노테이션 추가
komascode Feb 11, 2026
9b67f3f
✨ feat: 토큰 제약 추가 (AT만)
komascode Feb 11, 2026
90421f4
✨ feat: AT검증을 위한 메서드 추가
komascode Feb 11, 2026
e018f95
🔥 fix: 주민등록번호 validation 패턴을 화면설계서 기준에 맞게 수정
komascode Feb 11, 2026
a91bdb0
✨ feat: SMS 검증 응답에 기존/신규 회원 분기 플래그 추가
komascode Feb 11, 2026
c85bcf8
✨ feat: 비인증 간편비밀번호 재설정 엔드포인트 추가 및 Redis 키 불일치 수정
komascode Feb 11, 2026
e083d15
Merge pull request #96 from UMCSCOI/Feat/#83
kingmingyu Feb 11, 2026
f164b33
♻️ refactor: 간편 비밀번호 재설정 API 도메인 이동 (마이페이지 -> 인증)
rlawngjs0313 Feb 11, 2026
77be0af
🔧 fix: 타입 변환 오류 수정
kingmingyu Feb 11, 2026
e765172
🔧 fix: 오타 수정
kingmingyu Feb 11, 2026
fadb217
Merge pull request #107 from UMCSCOI/Bug/#106
kingmingyu Feb 11, 2026
dd4e19c
♻️ refactor: example 추가
komascode Feb 11, 2026
678e083
Merge branch 'develop' into Feat/#89
komascode Feb 11, 2026
92f1afa
✨ feat: 누락된 import 추가
komascode Feb 11, 2026
8217f92
Merge pull request #105 from UMCSCOI/Refactor/#104
komascode Feb 11, 2026
5abb76e
Merge branch 'develop' into Feat/#89
komascode Feb 11, 2026
d8cbe27
Merge pull request #102 from UMCSCOI/Feat/#89
komascode Feb 11, 2026
fa3b1d6
♻️ refactor: 중복 API(비밀번호 재설정) 제거
komascode Feb 11, 2026
bcc5c46
Merge branch 'develop' into Fix/#100
seohyunk09 Feb 11, 2026
9c92727
Merge pull request #101 from UMCSCOI/Fix/#100
seohyunk09 Feb 11, 2026
bd817dd
🐛 fix: 빗썸 최대 주문 정보 조회 API 검증 로직 개선 및 버그 수정(지정가 매도 계산, 최소 주문 금액 검증)
seohyunk09 Feb 11, 2026
d20e814
🐛 fix: 업비트 최대 주문 정보 조회 API 검증 로직 개선( 최소 주문 금액 , 잔고 부족 검증 추가)
seohyunk09 Feb 11, 2026
7bf8432
Merge branch 'develop' into Fix/#100
seohyunk09 Feb 11, 2026
110e5fc
Merge branch 'develop' into Feat/#66
rlawngjs0313 Feb 12, 2026
d82baef
♻️ [Refactor] 마이페이지, 충전 API 검증 어노테이션 추가
rlawngjs0313 Feb 12, 2026
f2a9fab
Merge branch 'develop' into Refactor/#108
rlawngjs0313 Feb 12, 2026
fe11a63
♻️ [Refactor] API (비밀번호 재설정) 중복 제거
rlawngjs0313 Feb 12, 2026
4569292
♻️ [Refactor] 빗썸 지정가 매도 계산 버그 수정, 지정가/시장가 매도 최소 주문 금액 검증 추가, 지정가 매수 잔…
rlawngjs0313 Feb 12, 2026
de2195a
✨ feat: Swagger 버전 변경 (0.3.0 -> 0.3.2)
rlawngjs0313 Feb 12, 2026
3569ff5
♻️ refactor: 간편 비밀번호 재설정 DTO 변경 (전화번호 추가)
rlawngjs0313 Feb 12, 2026
0cd4fa0
♻️ refactor: 간편 비밀번호 재설정 서비스 이동 (MemberService -> AuthService)
rlawngjs0313 Feb 12, 2026
b875798
🔥 del: 임시 API 삭제
rlawngjs0313 Feb 12, 2026
3ce721f
♻️ refactor: DTO 검증 추가, 안쓰는 DTO 삭제
rlawngjs0313 Feb 12, 2026
9e98013
♻️ refactor: 안쓰는 import문 삭제
rlawngjs0313 Feb 12, 2026
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 @@ -4,9 +4,9 @@
import com.example.scoi.domain.auth.dto.AuthReqDTO;
import com.example.scoi.domain.auth.dto.AuthResDTO;
import com.example.scoi.domain.auth.service.AuthService;
import com.example.scoi.domain.member.exception.code.MemberSuccessCode;
import com.example.scoi.global.apiPayload.ApiResponse;
import com.example.scoi.global.apiPayload.code.BaseSuccessCode;
import com.example.scoi.global.apiPayload.code.GeneralSuccessCode;
import com.example.scoi.global.security.userdetails.CustomUserDetails;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
Expand All @@ -24,13 +24,17 @@ public class AuthController {

private final AuthService authService;

// SMS 인증 토큰 발급용: 최종 제출때는 삭제해야 함
@GetMapping("/sms-token")
public ApiResponse<String> generateSmsToken(
@RequestParam String phoneNumber
// 간편 비밀번호 재설정
@Operation(
summary = "간편 비밀번호 재설정 API By 김주헌",
description = "비밀번호 분실 또는 5회 실패 시 재설정을 합니다."
)
@PostMapping("/password/reset")
public ApiResponse<Void> resetPassword(
@Valid @RequestBody AuthReqDTO.ResetPassword dto
){
BaseSuccessCode code = GeneralSuccessCode.OK;
return ApiResponse.onSuccess(code, authService.generateSmsToken(phoneNumber));
BaseSuccessCode code = MemberSuccessCode.RESET_SIMPLE_PASSWORD;
return ApiResponse.onSuccess(code, authService.resetPassword(dto));
}

@Operation(summary = "SMS 발송 By 장명준", description = "휴대폰 번호로 인증번호를 발송합니다.")
Expand Down
40 changes: 33 additions & 7 deletions src/main/java/com/example/scoi/domain/auth/dto/AuthReqDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,45 +16,53 @@ public class AuthReqDTO {
public record SmsSendRequest(
@NotBlank(message = "휴대폰 번호는 필수입니다.")
@Pattern(regexp = "^01[0-9]{8,9}$", message = "올바른 휴대폰 번호 형식이 아닙니다.")
@Schema(description = "휴대폰 번호", example = "01012345678")
String phoneNumber
) {}

// SMS 검증 요청
public record SmsVerifyRequest(
@NotBlank(message = "휴대폰 번호는 필수입니다.")
@Pattern(regexp = "^01[0-9]{8,9}$", message = "올바른 휴대폰 번호 형식이 아닙니다.")
@Schema(description = "휴대폰 번호", example = "01012345678")
String phoneNumber,

@NotBlank(message = "인증번호는 필수입니다.")
@Size(min = 6, max = 6, message = "인증번호는 6자리입니다.")
@Pattern(regexp = "^\\d{6}$", message = "인증번호는 6자리 숫자입니다.")
@Schema(description = "SMS 인증번호 6자리", example = "123456")
String verificationCode
) {}

// 회원가입 요청
public record SignupRequest(
@NotBlank(message = "휴대폰 번호는 필수입니다.")
@Pattern(regexp = "^01[0-9]{8,9}$", message = "올바른 휴대폰 번호 형식이 아닙니다.")
@Schema(description = "휴대폰 번호", example = "01012345678")
String phoneNumber,

@NotBlank(message = "인증 토큰은 필수입니다.")
@Schema(description = "SMS 인증 완료 후 발급된 verificationToken")
String verificationToken,

@NotBlank(message = "영문 이름은 필수입니다.")
@Pattern(regexp = "^[A-Z ]+$", message = "영문 대문자와 공백만 입력 가능합니다.")
@Size(max = 50, message = "영문 이름은 50자 이내입니다.")
@Schema(description = "영문 이름 (대문자)", example = "JANG MYONGJUN")
String englishName,

@NotBlank(message = "한글 이름은 필수입니다.")
@Pattern(regexp = "^[가-힣]+$", message = "한글만 입력 가능합니다.")
@Size(min = 2, max = 5, message = "한글 이름은 2~5자입니다.")
@Schema(description = "한글 이름", example = "장명준")
String koreanName,

@NotBlank(message = "주민등록번호는 필수입니다.")
@Pattern(regexp = "^\\d{6}-\\d{7}$", message = "올바른 주민등록번호 형식이 아닙니다.")
@Pattern(regexp = "^\\d{7}$", message = "올바른 주민등록번호 형식이 아닙니다.")
@Schema(description = "주민등록번호 앞 7자리 (생년월일 6자리 + 성별코드 1자리)", example = "0306203")
String residentNumber,

@NotBlank(message = "간편비밀번호는 필수입니다.")
@Schema(description = "AES 암호화된 6자리 간편비밀번호 (Base64)", example = "ItfrsoB1J0hl3O60mahB1A==")
@Schema(description = "AES 암호화된 6자리 간편비밀번호 (Base64)", example = "6v4RsQ+gOGi1NtheSTiA1w==")
String simplePassword,

@Schema(description = "회원 타입 (미입력 시 INDIVIDUAL 기본값)",
Expand All @@ -76,22 +84,23 @@ public record ApiKeyRequest(
ExchangeType exchangeType,

@NotBlank(message = "퍼블릭 키는 필수입니다.")
@Schema(description = "거래소 API 퍼블릭 키", example = "your-public-key")
@Schema(description = "거래소 API 퍼블릭 키", example = "abcdef1234567890abcdef12")
String publicKey,

@NotBlank(message = "시크릿 키는 필수입니다.")
@Schema(description = "거래소 API 시크릿 키 (AES 암호화된 Base64)", example = "asdadsasdasd...")
@Schema(description = "거래소 API 시크릿 키 (AES 암호화된 Base64)", example = "abcdef1234567890abcdef1234567890")
String secretKey
) {}

// 로그인 요청
public record LoginRequest(
@NotBlank(message = "휴대폰 번호는 필수입니다.")
@Pattern(regexp = "^01[0-9]{8,9}$", message = "올바른 휴대폰 번호 형식이 아닙니다.")
@Schema(description = "휴대폰 번호", example = "01012345678")
String phoneNumber,

@NotBlank(message = "간편비밀번호는 필수입니다.")
@Schema(description = "AES 암호화된 6자리 간편비밀번호 (Base64)", example = "ItfrsoB1J0hl3O60mahB1A==")
@Schema(description = "AES 암호화된 6자리 간편비밀번호 (Base64)", example = "6v4RsQ+gOGi1NtheSTiA1w==")
String simplePassword,

@Schema(description = "SMS 재인증 토큰 (계정 잠금/RT 만료 시 필수, 일반 로그인 시 생략)", nullable = true)
Expand All @@ -103,4 +112,21 @@ public record ReissueRequest(
@NotBlank(message = "Refresh Token은 필수입니다.")
String refreshToken
) {}
}

// 간편 비밀번호 재설정
public record ResetPassword(
@NotNull(message = "SMS 인증 토큰은 필수입니다.")
@NotBlank(message = "SMS 인증 토큰은 빈칸일 수 없습니다.")
String verificationCode,

@NotNull(message = "휴대전화 번호는 필수입니다.")
@NotBlank(message = "휴대전화 번호는 빈칸일 수 없습니다.")
@Pattern(regexp = "^01[0-9]{8,9}$", message = "올바른 휴대폰 번호 형식이 아닙니다.")
String phoneNumber,

@NotNull(message = "신규 간편 비밀번호는 필수입니다.")
@NotBlank(message = "신규 간편 비밀번호는 빈칸일 수 없습니다.")
@Schema(description = "AES 암호화된 새 6자리 간편비밀번호 (Base64)", example = "6v4RsQ+gOGi1NtheSTiA1w==")
String newPassword
){}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ public record SmsSendResponse(

// SMS 검증 응답
public record SmsVerifyResponse(
String verificationToken // 인증 성공 시 발급되는 일회용 토큰 (유효시간: 10분)
String verificationToken, // 인증 성공 시 발급되는 일회용 토큰 (유효시간: 10분)
boolean isExistingMember // 기존 회원 여부 (true: 기존 회원 → 간편비밀번호 설정, false: 신규 회원 → 회원가입)
) {}

// 회원가입 응답
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public enum AuthErrorCode implements BaseErrorCode {

// 토큰 관련
UNAUTHORIZED(HttpStatus.UNAUTHORIZED,
"AUTH401_1",
"AUTH401_0",
"인증이 필요합니다."),
INVALID_TOKEN(HttpStatus.UNAUTHORIZED,
"AUTH401_2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public enum AuthSuccessCode implements BaseSuccessCode {
LOGOUT_SUCCESS(HttpStatus.OK,
"AUTH200_5",
"로그아웃되었습니다."),
PASSWORD_RESET_SUCCESS(HttpStatus.OK,
"AUTH200_6",
"비밀번호가 재설정되었습니다."),
;

private final HttpStatus status;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@
import com.example.scoi.domain.member.entity.Member;
import com.example.scoi.domain.member.enums.MemberType;
import com.example.scoi.domain.member.entity.MemberToken;
import com.example.scoi.domain.member.exception.MemberException;
import com.example.scoi.domain.member.exception.code.MemberErrorCode;
import com.example.scoi.domain.member.repository.MemberRepository;
import com.example.scoi.domain.member.repository.MemberTokenRepository;
import com.example.scoi.domain.member.service.MemberService;
import com.example.scoi.global.apiPayload.code.GeneralErrorCode;
import com.example.scoi.global.client.CoolSmsClient;
import com.example.scoi.global.client.dto.CoolSmsDTO;
import com.example.scoi.global.redis.RedisUtil;
Expand All @@ -26,6 +29,7 @@
import java.security.GeneralSecurityException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
Expand Down Expand Up @@ -69,6 +73,7 @@ public class AuthService {
private static final long REFRESH_TOKEN_SLIDING_DAYS = 14; // 비활성 기준 만료
private static final long REFRESH_TOKEN_ABSOLUTE_DAYS = 30; // 최대 수명
private static final long SMS_COOLDOWN_SECONDS = 60;
private static final String SIMPLE_PASSWORD_REGEX = "^[0-9]{6}$";

public AuthResDTO.SmsSendResponse sendSms(AuthReqDTO.SmsSendRequest request) {
// 0. 쿨다운 체크 (1분)
Expand Down Expand Up @@ -136,8 +141,11 @@ public AuthResDTO.SmsVerifyResponse verifySms(AuthReqDTO.SmsVerifyRequest reques
String tokenKey = VERIFICATION_PREFIX + verificationToken;
redisUtil.set(tokenKey, request.phoneNumber(), VERIFICATION_EXPIRATION_MINUTES, TimeUnit.MINUTES);

log.info("SMS 인증 성공: phoneNumber={}", request.phoneNumber());
return new AuthResDTO.SmsVerifyResponse(verificationToken);
// 6. 기존 회원 여부 확인 (화면 분기용)
boolean isExistingMember = memberRepository.existsByPhoneNumber(request.phoneNumber());

log.info("SMS 인증 성공: phoneNumber={}, isExistingMember={}", request.phoneNumber(), isExistingMember);
return new AuthResDTO.SmsVerifyResponse(verificationToken, isExistingMember);
}

/**
Expand All @@ -162,11 +170,49 @@ public String validateVerificationToken(String verificationToken, String phoneNu
throw new AuthException(AuthErrorCode.INVALID_TOKEN);
}

redisUtil.delete(tokenKey);
log.debug("Verification Token 검증 성공 및 삭제: phoneNumber={}", phoneNumber);
log.debug("Verification Token 검증 성공: phoneNumber={}", phoneNumber);
return verifiedPhoneNumber;
}

// 간편 비밀번호 재설정
@jakarta.transaction.Transactional
public Void resetPassword(
AuthReqDTO.ResetPassword dto
) {
// Verification Token 검증 및 소멸 (SMS 인증 완료 확인)
String phoneNumber = validateVerificationToken(dto.verificationCode(), dto.phoneNumber());

// 사용자 가져오기
Member member = memberRepository.findByPhoneNumber(phoneNumber)
.orElseThrow(() -> new MemberException(MemberErrorCode.MEMBER_NOT_FOUND));

// 새 간편 비밀번호 검증
String newPassword;
try {
newPassword = new String(hashUtil.decryptAES(dto.newPassword()));

// 6자리 숫자가 아닌 경우
if (!newPassword.matches(SIMPLE_PASSWORD_REGEX)) {
throw new IllegalArgumentException();
}
} catch (GeneralSecurityException e ) {
Map<String, String> binding = new HashMap<>();
binding.put("password", "간편 비밀번호 복호화에 실패했습니다.");
throw new MemberException(GeneralErrorCode.VALIDATION_FAILED, binding);
} catch (IllegalArgumentException e) {
Map<String, String> binding = new HashMap<>();
binding.put("password", "6자리 숫자만 입력 가능합니다.");
throw new MemberException(GeneralErrorCode.VALIDATION_FAILED, binding);
}

// 간편 비밀번호 변경
member.updateSimplePassword(passwordEncoder.encode(newPassword));

// 로그인 횟수 -> 0
member.resetLoginFailCount();
return null;
}

@Transactional
public AuthResDTO.SignupResponse signup(AuthReqDTO.SignupRequest request) {
// 1. Verification Token 검증 (SMS 인증 완료 확인)
Expand Down Expand Up @@ -386,8 +432,8 @@ public AuthResDTO.ReissueResponse reissue(AuthReqDTO.ReissueRequest request) {
String newAccessToken = jwtUtil.createAccessToken(phoneNumber);
String newRefreshToken = jwtUtil.createRefreshToken(phoneNumber);

// 7. RT 업데이트 (Rotation, issuedAt 갱신하여 최대 수명도 연장)
memberToken.updateTokenWithIssuedAt(newRefreshToken, now.plusDays(REFRESH_TOKEN_SLIDING_DAYS), now);
// 7. RT 업데이트 (Rotation, issuedAt 유지하여 최대 수명 30일 보장)
memberToken.updateToken(newRefreshToken, now.plusDays(REFRESH_TOKEN_SLIDING_DAYS));

// 8. lastLoginAt 갱신 (사용자 활동 추적)
Member member = memberToken.getMember();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.example.scoi.domain.auth.service;

import com.example.scoi.domain.member.entity.Member;
import com.example.scoi.domain.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
Expand All @@ -16,23 +15,23 @@ public class LoginFailCountManager {
/**
* 로그인 실패 카운트를 별도 트랜잭션에서 증가시킵니다.
* REQUIRES_NEW로 외부 트랜잭션 롤백과 무관하게 커밋됩니다.
* @Modifying @Query로 L1 캐시 무관하게 DB 직접 업데이트합니다.
*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
public int increaseFailCount(Long memberId) {
Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalStateException("Member not found: " + memberId));
member.increaseLoginFailCount();
return member.getLoginFailCount();
memberRepository.incrementLoginFailCount(memberId);
return memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalStateException("Member not found: " + memberId))
.getLoginFailCount();
}

/**
* 로그인 실패 카운트를 별도 트랜잭션에서 초기화합니다.
* SMS 재인증으로 계정 잠금 해제 시 사용 — 이후 비밀번호가 틀려도 잠금 해제는 유지됩니다.
* @Modifying @Query로 L1 캐시 무관하게 DB 직접 업데이트합니다.
*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void resetFailCount(Long memberId) {
Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new IllegalStateException("Member not found: " + memberId));
member.resetLoginFailCount();
memberRepository.resetLoginFailCount(memberId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.example.scoi.global.apiPayload.ApiResponse;
import com.example.scoi.global.apiPayload.code.BaseSuccessCode;
import com.example.scoi.global.security.userdetails.CustomUserDetails;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Expand All @@ -28,7 +29,7 @@ public class ChargeController implements ChargeControllerDocs{
@PostMapping("/deposits/krw")
public ApiResponse<ChargeResDTO.ChargeKrw> chargeKrw(
@AuthenticationPrincipal CustomUserDetails user,
@RequestBody ChargeReqDTO.ChargeKrw dto
@Valid @RequestBody ChargeReqDTO.ChargeKrw dto
){
BaseSuccessCode code = ChargeSuccessCode.OK;
return ApiResponse.onSuccess(code, chargeService.chargeKrw(user.getUsername(),dto));
Expand All @@ -38,7 +39,7 @@ public ApiResponse<ChargeResDTO.ChargeKrw> chargeKrw(
@PostMapping("/deposits")
public ApiResponse<String> getOrders(
@AuthenticationPrincipal CustomUserDetails user,
@RequestBody ChargeReqDTO.GetOrder dto
@Valid @RequestBody ChargeReqDTO.GetOrder dto
){
BaseSuccessCode code = ChargeSuccessCode.OK;
return ApiResponse.onSuccess(code, chargeService.getOrders(user.getUsername(), dto));
Expand Down Expand Up @@ -78,7 +79,7 @@ public ApiResponse<String> getDepositAddress(
@PostMapping("/deposits/address")
public ApiResponse<List<String>> createDepositAddress(
@AuthenticationPrincipal CustomUserDetails user,
@RequestBody ChargeReqDTO.CreateDepositAddress dto
@Valid @RequestBody ChargeReqDTO.CreateDepositAddress dto
){
BaseSuccessCode code = ChargeSuccessCode.OK;
return ApiResponse.onSuccess(code, chargeService.createDepositAddress(user.getUsername(), dto));
Expand Down
Loading