mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2026-06-12 19:49:10 +00:00
회선번호 처리 개선 및 다양한 API 기능 강화
- user-service: 회원등록 API를 upsert 방식으로 변경 (기존 사용자 업데이트 지원) - user-service: userName 필드 응답 누락 문제 해결 (DB 데이터 업데이트) - kos-mock: Mock 데이터 생성 기간을 3개월에서 6개월로 확장 - product-service: 회선번호 대시 처리 지원 (010-1234-5678, 01012345678 모두 허용) - bill-service: 회선번호 대시 선택적 처리 지원 (유연한 입력 형식) - api-gateway: CORS 중복 헤더 제거 필터 추가 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -48,7 +48,7 @@ public class SecurityConfig {
|
||||
|
||||
private final JwtTokenProvider jwtTokenProvider;
|
||||
|
||||
@Value("${cors.allowed-origins")
|
||||
@Value("${cors.allowed-origins}")
|
||||
private String allowedOrigins;
|
||||
|
||||
/**
|
||||
|
||||
@@ -155,7 +155,6 @@ public class BillController {
|
||||
public ResponseEntity<ApiResponse<BillHistoryResponse>> getBillHistory(
|
||||
@Parameter(description = "회선번호 (미입력시 인증된 사용자의 모든 회선)")
|
||||
@RequestParam(required = false)
|
||||
@Pattern(regexp = "^010-\\d{4}-\\d{4}$", message = "회선번호 형식이 올바르지 않습니다")
|
||||
String lineNumber,
|
||||
|
||||
@Parameter(description = "조회 시작일 (YYYY-MM-DD)")
|
||||
@@ -177,11 +176,22 @@ public class BillController {
|
||||
@Parameter(description = "처리 상태 필터")
|
||||
@RequestParam(required = false) BillInquiryResponse.ProcessStatus status) {
|
||||
|
||||
log.info("요금조회 이력 조회 - 회선: {}, 기간: {} ~ {}, 페이지: {}/{}",
|
||||
lineNumber, startDate, endDate, page, size);
|
||||
// 회선번호 정규화 (입력된 경우에만)
|
||||
String normalizedLineNumber = null;
|
||||
if (lineNumber != null && !lineNumber.trim().isEmpty()) {
|
||||
normalizedLineNumber = lineNumber.replaceAll("-", "");
|
||||
|
||||
// 유효성 검증
|
||||
if (!normalizedLineNumber.matches("^010\\d{8}$")) {
|
||||
throw new IllegalArgumentException("회선번호는 010으로 시작하는 11자리 숫자이거나 010-XXXX-XXXX 형식이어야 합니다");
|
||||
}
|
||||
}
|
||||
|
||||
log.info("요금조회 이력 조회 - 회선: {} (original: {}), 기간: {} ~ {}, 페이지: {}/{}",
|
||||
normalizedLineNumber, lineNumber, startDate, endDate, page, size);
|
||||
|
||||
BillHistoryResponse historyData = billInquiryService.getBillHistory(
|
||||
lineNumber, startDate, endDate, page, size, status
|
||||
normalizedLineNumber, startDate, endDate, page, size, status
|
||||
);
|
||||
|
||||
log.info("요금조회 이력 조회 완료 - 총 {}건, 페이지: {}/{}",
|
||||
|
||||
@@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 요금조회 요청 DTO
|
||||
@@ -20,6 +21,7 @@ import lombok.NoArgsConstructor;
|
||||
* @since 2025-09-08
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@@ -27,14 +29,10 @@ public class BillInquiryRequest {
|
||||
|
||||
/**
|
||||
* 조회할 회선번호 (필수)
|
||||
* 010-XXXX-XXXX 형식만 허용
|
||||
* 010-XXXX-XXXX 또는 01XXXXXXXXX 형식 허용
|
||||
*/
|
||||
@JsonProperty("lineNumber")
|
||||
@NotBlank(message = "회선번호는 필수입니다")
|
||||
@Pattern(
|
||||
regexp = "^010-\\d{4}-\\d{4}$",
|
||||
message = "회선번호는 010-XXXX-XXXX 형식이어야 합니다"
|
||||
)
|
||||
private String lineNumber;
|
||||
|
||||
/**
|
||||
@@ -47,4 +45,26 @@ public class BillInquiryRequest {
|
||||
message = "조회월은 YYYYMM 형식이어야 합니다"
|
||||
)
|
||||
private String inquiryMonth;
|
||||
|
||||
/**
|
||||
* 회선번호 설정 시 정규화 처리
|
||||
* - 대시가 있는 경우: 010-1234-5678 → 01012345678
|
||||
* - 대시가 없는 경우: 01012345678 → 그대로 유지
|
||||
* - 유효성 검증: 010으로 시작하는 11자리 숫자
|
||||
*/
|
||||
public void setLineNumber(String lineNumber) {
|
||||
if (lineNumber != null) {
|
||||
// 대시 제거하여 정규화
|
||||
String normalized = lineNumber.replaceAll("-", "");
|
||||
|
||||
// 유효성 검증: 010으로 시작하는 11자리 숫자
|
||||
if (!normalized.matches("^010\\d{8}$")) {
|
||||
throw new IllegalArgumentException("회선번호는 010으로 시작하는 11자리 숫자이거나 010-XXXX-XXXX 형식이어야 합니다");
|
||||
}
|
||||
|
||||
this.lineNumber = normalized;
|
||||
} else {
|
||||
this.lineNumber = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user