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:
+1
-1
@@ -30,7 +30,7 @@ import java.util.List;
|
||||
public class SecurityConfig {
|
||||
|
||||
private final JwtTokenProvider jwtTokenProvider;
|
||||
@Value("${cors.allowed-origins")
|
||||
@Value("${cors.allowed-origins}")
|
||||
private String allowedOrigins;
|
||||
|
||||
@Bean
|
||||
|
||||
+27
-7
@@ -70,14 +70,23 @@ public class ProductController {
|
||||
public ResponseEntity<CustomerInfoResponse> getCustomerInfo(
|
||||
@Parameter(description = "고객 회선번호", example = "01012345678")
|
||||
@RequestParam("lineNumber")
|
||||
@Pattern(regexp = "^010[0-9]{8}$", message = "회선번호는 010으로 시작하는 11자리 숫자여야 합니다")
|
||||
String lineNumber) {
|
||||
|
||||
String userId = getCurrentUserId();
|
||||
logger.info("고객 정보 조회 요청: lineNumber={}, userId={}", lineNumber, userId);
|
||||
|
||||
// 회선번호에서 대시 제거
|
||||
String normalizedLineNumber = lineNumber.replaceAll("-", "");
|
||||
|
||||
// 정규화된 회선번호 유효성 검증
|
||||
if (!normalizedLineNumber.matches("^010[0-9]{8}$")) {
|
||||
throw new IllegalArgumentException("회선번호는 010으로 시작하는 11자리 숫자여야 합니다");
|
||||
}
|
||||
|
||||
logger.info("고객 정보 조회 요청: lineNumber={} (original: {}), userId={}",
|
||||
normalizedLineNumber, lineNumber, userId);
|
||||
|
||||
try {
|
||||
CustomerInfoResponse response = productService.getCustomerInfo(lineNumber);
|
||||
CustomerInfoResponse response = productService.getCustomerInfo(normalizedLineNumber);
|
||||
return ResponseEntity.ok(response);
|
||||
} catch (Exception e) {
|
||||
logger.error("고객 정보 조회 실패: lineNumber={}, userId={}", lineNumber, userId, e);
|
||||
@@ -204,7 +213,6 @@ public class ProductController {
|
||||
public ResponseEntity<ProductChangeHistoryResponse> getProductChangeHistory(
|
||||
@Parameter(description = "회선번호 (미입력시 로그인 고객 기준)")
|
||||
@RequestParam(required = false)
|
||||
@Pattern(regexp = "^010[0-9]{8}$", message = "회선번호는 010으로 시작하는 11자리 숫자여야 합니다")
|
||||
String lineNumber,
|
||||
@Parameter(description = "조회 시작일 (YYYY-MM-DD)")
|
||||
@RequestParam(required = false) String startDate,
|
||||
@@ -216,8 +224,20 @@ public class ProductController {
|
||||
@RequestParam(defaultValue = "10") int size) {
|
||||
|
||||
String userId = getCurrentUserId();
|
||||
logger.info("상품변경 이력 조회 요청: lineNumber={}, startDate={}, endDate={}, page={}, size={}, userId={}",
|
||||
lineNumber, startDate, endDate, page, size, userId);
|
||||
|
||||
// 회선번호 정규화 (입력된 경우에만)
|
||||
String normalizedLineNumber = null;
|
||||
if (lineNumber != null && !lineNumber.trim().isEmpty()) {
|
||||
normalizedLineNumber = lineNumber.replaceAll("-", "");
|
||||
|
||||
// 정규화된 회선번호 유효성 검증
|
||||
if (!normalizedLineNumber.matches("^010[0-9]{8}$")) {
|
||||
throw new IllegalArgumentException("회선번호는 010으로 시작하는 11자리 숫자여야 합니다");
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("상품변경 이력 조회 요청: lineNumber={} (original: {}), startDate={}, endDate={}, page={}, size={}, userId={}",
|
||||
normalizedLineNumber, lineNumber, startDate, endDate, page, size, userId);
|
||||
|
||||
try {
|
||||
// 페이지 번호를 0-based로 변환
|
||||
@@ -227,7 +247,7 @@ public class ProductController {
|
||||
validateDateRange(startDate, endDate);
|
||||
|
||||
ProductChangeHistoryResponse response = productService.getProductChangeHistory(
|
||||
lineNumber, startDate, endDate, pageable);
|
||||
normalizedLineNumber, startDate, endDate, pageable);
|
||||
return ResponseEntity.ok(response);
|
||||
} catch (Exception e) {
|
||||
logger.error("상품변경 이력 조회 실패: lineNumber={}, userId={}", lineNumber, userId, e);
|
||||
|
||||
+19
-1
@@ -21,7 +21,6 @@ public class ProductChangeRequest {
|
||||
|
||||
@JsonProperty("lineNumber")
|
||||
@NotBlank(message = "회선번호는 필수입니다")
|
||||
@Pattern(regexp = "^010[0-9]{8}$", message = "회선번호는 010으로 시작하는 11자리 숫자여야 합니다")
|
||||
private String lineNumber;
|
||||
|
||||
@JsonProperty("currentProductCode")
|
||||
@@ -31,4 +30,23 @@ public class ProductChangeRequest {
|
||||
@JsonProperty("targetProductCode")
|
||||
@NotBlank(message = "변경 대상 상품 코드는 필수입니다")
|
||||
private String targetProductCode;
|
||||
|
||||
/**
|
||||
* 회선번호 설정 시 대시 제거 및 유효성 검증
|
||||
*/
|
||||
public void setLineNumber(String lineNumber) {
|
||||
if (lineNumber != null) {
|
||||
// 대시 제거
|
||||
String normalized = lineNumber.replaceAll("-", "");
|
||||
|
||||
// 유효성 검증
|
||||
if (!normalized.matches("^010[0-9]{8}$")) {
|
||||
throw new IllegalArgumentException("회선번호는 010으로 시작하는 11자리 숫자여야 합니다");
|
||||
}
|
||||
|
||||
this.lineNumber = normalized;
|
||||
} else {
|
||||
this.lineNumber = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
-1
@@ -19,7 +19,6 @@ import jakarta.validation.constraints.Pattern;
|
||||
public class ProductChangeValidationRequest {
|
||||
|
||||
@NotBlank(message = "회선번호는 필수입니다")
|
||||
@Pattern(regexp = "^010[0-9]{8}$", message = "회선번호는 010으로 시작하는 11자리 숫자여야 합니다")
|
||||
private String lineNumber;
|
||||
|
||||
@NotBlank(message = "현재 상품 코드는 필수입니다")
|
||||
@@ -27,4 +26,23 @@ public class ProductChangeValidationRequest {
|
||||
|
||||
@NotBlank(message = "변경 대상 상품 코드는 필수입니다")
|
||||
private String targetProductCode;
|
||||
|
||||
/**
|
||||
* 회선번호 설정 시 대시 제거 및 유효성 검증
|
||||
*/
|
||||
public void setLineNumber(String lineNumber) {
|
||||
if (lineNumber != null) {
|
||||
// 대시 제거
|
||||
String normalized = lineNumber.replaceAll("-", "");
|
||||
|
||||
// 유효성 검증
|
||||
if (!normalized.matches("^010[0-9]{8}$")) {
|
||||
throw new IllegalArgumentException("회선번호는 010으로 시작하는 11자리 숫자여야 합니다");
|
||||
}
|
||||
|
||||
this.lineNumber = normalized;
|
||||
} else {
|
||||
this.lineNumber = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user