소스 업데이트
All checks were successful
Deploy Tools / deploy (push) Successful in 1m30s

This commit is contained in:
jade
2026-08-25 17:42:41 +09:00
parent d3cc1f7f33
commit 87249a621c
18 changed files with 295 additions and 192 deletions

View File

@@ -1,19 +0,0 @@
package io.shinhanlife.dat.mcc.biz.pro.converter;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryResponse;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c.io. DATNCSO00001_I;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c.io. DATNCSO00001_O;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface PersonalCustomerDetailInquiryConverter {
// Field names differ? Add mappings like this before the method.
@Mapping(source = "customerId", target = "customerId")
DATNCSO00001_I toLegacyRequest(PersonalCustomerDetailInquiryRequest request);
PersonalCustomerDetailInquiryResponse toResponse( DATNCSO00001_O mciRes);
}

View File

@@ -0,0 +1,18 @@
package io.shinhanlife.dat.mcc.biz.pro.converter;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataResponse;
import io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i.io.ONBTI2370_I;
import io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i.io.ONBTI2370_O;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface RecruitmentFeeDisclosureDataConverter {
// Field names differ? Add mappings like this before the method.
// @Mapping(source = "sourceField", target = "targetField")
ONBTI2370_I toLegacyRequest(RecruitmentFeeDisclosureDataRequest request);
RecruitmentFeeDisclosureDataRequest toRequest(ONBTI2370_I mciRequest);
RecruitmentFeeDisclosureDataResponse toResponse(ONBTI2370_O mciRes);
}

View File

@@ -1,26 +0,0 @@
package io.shinhanlife.dat.mcc.biz.pro.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.Pattern;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PersonalCustomerDetailInquiryRequest {
@Schema(description = "조회할 고객의 고유 ID (형식: ^[A-Za-z0-9-]{1,20}$) (예시: 12345, CUST-00123)", example = "12345", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[A-Za-z0-9-]{1,20}$")
private String customerId;
@Schema(description = "고객 이름 (선택적 확인용) (형식: ^[가-힣a-zA-Z\s]{2,20}$) (예시: 김철수, Lee Chul-soo)", example = "김철수")
@Pattern(regexp = "^[가-힣a-zA-Z\s]{2,20}$")
private String name;
@Schema(description = "고객 전화번호 (선택적 확인용) (형식: $) (예시: 010-1234-5678, +821012345678)", example = "010-1234-5678")
private String phoneNumber;
@Schema(description = "고객 이메일 주소 (선택적 확인용) (형식: $) (예시: customer@example.com, user@test.co.kr)", example = "customer@example.com")
private String email;
}

View File

@@ -1,35 +0,0 @@
package io.shinhanlife.dat.mcc.biz.pro.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PersonalCustomerDetailInquiryResponse {
private String resultCode;
private String resultMessage;
@Schema(description = "조회된 고객의 고유 ID (예시: 12345, CUST-00123)", example = "12345", requiredMode = Schema.RequiredMode.REQUIRED)
private String customerId;
@Schema(description = "고객의 전체 이름 (예시: 김철수, Lee Chul-soo)", example = "김철수", requiredMode = Schema.RequiredMode.REQUIRED)
private String name;
@Schema(description = "고객의 전화번호 (예시: 010-1234-5678)", example = "010-1234-5678", requiredMode = Schema.RequiredMode.REQUIRED)
private String phoneNumber;
@Schema(description = "고객의 이메일 주소 (예시: customer@example.com)", example = "customer@example.com", requiredMode = Schema.RequiredMode.REQUIRED)
private String email;
@Schema(description = "고객의 주소 정보 (예시: 서울시 강남구 테헤란로 123)", example = "서울시 강남구 테헤란로 123")
private String address;
@Schema(description = "고객의 생년월일 (예시: 1990-01-15)", example = "1990-01-15")
private String birthDate;
@Schema(description = "고객의 멤버십 등급 (예시: GOLD, SILVER, BRONZE)", example = "GOLD")
private String membershipLevel;
}

View File

@@ -0,0 +1,32 @@
package io.shinhanlife.dat.mcc.biz.pro.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.Pattern;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RecruitmentFeeDisclosureDataRequest {
@Schema(description = "조회할 회사의 코드 (형식: ^[0-9]{6}$) (예시: 005930, 035420)", example = "005930", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]{6}$")
private String companyCode;
@Schema(description = "조회할 연도 (형식: ^[0-9]{4}$) (예시: 2023, 2024)", example = "2023", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]{4}$")
private Integer year;
@Schema(description = "조회할 분기 (1-4) (형식: ^[1-4]$) (예시: 1, 2, 3, 4)", example = "1")
@Pattern(regexp = "^[1-4]$")
private Integer quarter;
@Schema(description = "조회 시작일 (YYYY-MM-DD) (형식: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$) (예시: 2024-01-01, 2024-04-01)", example = "2024-01-01")
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$")
private String startDate;
@Schema(description = "조회 종료일 (YYYY-MM-DD) (형식: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$) (예시: 2024-03-31, 2024-06-30)", example = "2024-03-31")
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$")
private String endDate;
}

View File

@@ -0,0 +1,40 @@
package io.shinhanlife.dat.mcc.biz.pro.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
import jakarta.validation.constraints.Pattern;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RecruitmentFeeDisclosureDataResponse {
private String resultCode;
private String resultMessage;
@Schema(description = "모집수수료 공시 데이터 목록", requiredMode = Schema.RequiredMode.REQUIRED)
private List<DataItem> data;
@Schema(description = "조회된 총 데이터 건수 (형식: ^[0-9]+$) (예시: 10, 25)", example = "10", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]+$")
private Integer totalCount;
@Schema(description = "처리 결과 메시지 (예시: 조회 성공, 데이터가 없습니다)", example = "조회 성공", requiredMode = Schema.RequiredMode.REQUIRED)
private String message;
@Data
public static class DataItem {
@Schema(description = "회사명 (예시: 삼성전자, 카카오)", example = "삼성전자", requiredMode = Schema.RequiredMode.REQUIRED)
private String companyName;
@Schema(description = "공시일 (형식: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$) (예시: 2024-01-15, 2024-04-20)", example = "2024-01-15", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$")
private String disclosureDate;
@Schema(description = "공시 유형 (예시: 신규공시, 정정공시)", example = "신규공시", requiredMode = Schema.RequiredMode.REQUIRED)
private String disclosureType;
}
}

View File

@@ -1,41 +0,0 @@
package io.shinhanlife.dat.mcc.biz.pro.usecase;
import org.springaicommunity.mcp.annotation.McpTool;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryResponse;
/**
* @package io.shinhanlife.dat.mcc.biz.pro.usecase
* @className PersonalCustomerDetailInquiryUseCase
* @description AX HUB 시스템 처리 클래스
* @author jade
* @create 2026.08.25
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.08.25 jade 최초생성
*
* </pre>
*/
public interface PersonalCustomerDetailInquiryUseCase {
@McpTool(name = "pro_personal_inquiry", title = "개인고객 상세 정보 조회", description = "개인고객의 상세 정보를 조회하는 도구로, 고객 ID 또는 기본 정보를 통해 이름, 연락처, 주소, 생년월일, 멤버십 등급 등 개인 고객 정보를 안전하게 조회할 수 있습니다.")
@GrowToolHint(
requiresApproval = false,
categoryKey = "pro",
mappingId = " DATNCSO00001",
functionDescription = "고객 ID 또는 기본 정보를 기반으로 개인 고객의 상세 정보를 조회하고 반환하는 핵심 비즈니스 함수입니다.",
whenToUse = "개인 고객의 상세 정보가 필요한 경우, 예를 들어 고객 ID, 이름, 전화번호, 이메일 등을 입력하여 고객 정보를 조회하고자 할 때 이 도구를 선택해야 합니다.",
whenNotToUse = "개인 고객이 아닌 법인 고객 정보 조회, 익명 또는 비개인 정보 요청, 또는 개인 정보 보호 정책상 정보 조회가 제한된 경우 이 도구를 선택하지 않아야 합니다.",
ioLimits = "입력 필드는 고객 ID(필수) 및 선택적 이름, 전화번호, 이메일을 허용하며, 최대 10개의 필드를 포함할 수 있습니다. 출력 필드는 결과 코드, 고객 ID, 이름, 전화번호, 이메일, 주소, 생년월일, 멤버십 등급 등을 포함하며, 최대 10개의 필드를 반환할 수 있습니다.",
displayDescription = "개인 고객의 상세 정보를 조회하는 포털용 간략한 설명으로, 이름, 연락처, 주소, 생년월일, 멤버십 등급 등을 확인할 수 있습니다.",
exampleQueries = {"고객 ID 12345로 개인 고객 정보를 조회해줘", "김철수 고객의 상세 정보를 알려줘", "010-1234-5678로 등록된 개인 고객 정보를 조회해줘", "lee@example.com 이메일로 가입된 개인 고객 정보를 조회해줘"},
destructive = false,
idempotent = true,
tags = {"고객관리", "조회"},
ownerOrg = "MCP_TOOL"
)
PersonalCustomerDetailInquiryResponse execute(PersonalCustomerDetailInquiryRequest req);
}

View File

@@ -0,0 +1,41 @@
package io.shinhanlife.dat.mcc.biz.pro.usecase;
import org.springaicommunity.mcp.annotation.McpTool;
import io.shinhanlife.dat.lib.annotation.GrowToolHint;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataResponse;
/**
* @package io.shinhanlife.dat.mcc.biz.pro.usecase
* @className RecruitmentFeeDisclosureDataUseCase
* @description AX HUB 시스템 처리 클래스
* @author jade
* @create 2026.08.25
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.08.25 jade 최초생성
*
* </pre>
*/
public interface RecruitmentFeeDisclosureDataUseCase {
@McpTool(name = "pro_recruitment_data", title = "모집수수료 공시", description = "금융감독원 공시 시스템에서 모집수수료 관련 공시 정보를 조회하고 관리하는 도구입니다.")
@GrowToolHint(
requiresApproval = false,
categoryKey = "pro",
mappingId = "DATNBTO00001",
functionDescription = "모집수수료 공시 데이터를 조회하고 관리하는 핵심 비즈니스 함수입니다.",
whenToUse = "모집수수료 공시 정보, 금융감독원 공시 데이터, 수수료 공시 내역이 필요한 경우",
whenNotToUse = "모집수수료와 무관한 다른 유형의 금융 데이터, 비공시 정보, 내부 데이터가 필요한 경우",
ioLimits = "연도별, 분기별, 기간별 모집수수료 공시 데이터를 조회할 수 있으며, 최대 1000건의 결과를 반환합니다.",
displayDescription = "모집수수료 공시 정보를 간편하게 조회할 수 있는 포털 서비스입니다.",
exampleQueries = {"2023년 모집수수료 공시 데이터 조회", "상반기 모집수수료 공시 정보 요청", "특정 회사의 2024년 3분기 모집수수료 공시", "모집수수료 공시 기간별 검색"},
destructive = false,
idempotent = true,
tags = {"finance", "disclosure"},
ownerOrg = "MCP_TOOL"
)
RecruitmentFeeDisclosureDataResponse execute(RecruitmentFeeDisclosureDataRequest req);
}

View File

@@ -1,17 +1,9 @@
package io.shinhanlife.dat.mcc.biz.pro.usecase.impl; package io.shinhanlife.dat.mcc.biz.pro.usecase.impl;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryResponse;
import io.shinhanlife.dat.mcc.biz.pro.usecase.PersonalCustomerDetailInquiryUseCase;
import io.shinhanlife.dat.lib.integration.mci.component.AxhubMciComponent;
import io.shinhanlife.glow.communication.dto.Transfer; import io.shinhanlife.glow.communication.dto.Transfer;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import io.shinhanlife.dat.mcc.biz.pro.converter.PersonalCustomerDetailInquiryConverter;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c.io. DATNCSO00001_I;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c.io. DATNCSO00001_O;
import io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c.MciNcscClient;
/** /**

View File

@@ -0,0 +1,69 @@
package io.shinhanlife.dat.mcc.biz.pro.usecase.impl;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataResponse;
import io.shinhanlife.dat.mcc.biz.pro.usecase.RecruitmentFeeDisclosureDataUseCase;
import io.shinhanlife.dat.lib.integration.mci.component.AxhubMciComponent;
import io.shinhanlife.glow.communication.dto.Transfer;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import io.shinhanlife.dat.mcc.biz.pro.converter.RecruitmentFeeDisclosureDataConverter;
import io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i.io.ONBTI2370_I;
import io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i.io.ONBTI2370_O;
import io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i.MciNbtiClient;
/**
* @package io.shinhanlife.dat.mcc.biz.pro.usecase.impl
* @className RecruitmentFeeDisclosureDataUseCaseImpl
* @description AX HUB 시스템 처리 클래스
* @author jade
* @create 2026.08.25
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.08.25 jade 최초생성
*
* </pre>
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class RecruitmentFeeDisclosureDataUseCaseImpl implements RecruitmentFeeDisclosureDataUseCase {
private final MciNbtiClient mci;
private final RecruitmentFeeDisclosureDataConverter converter;
@Override
public RecruitmentFeeDisclosureDataResponse execute(RecruitmentFeeDisclosureDataRequest req) {
log.info("[MCI Tool] {} 요청 수신.", "pro_recruitment_data");
try {
// MapStruct를 이용한 자동 매핑 (AI DTO -> MCI DTO)
ONBTI2370_I mciReq = converter.toLegacyRequest(req);
Transfer<ONBTI2370_O> resTransfer = mci.callTo(
"DATNBTO00001",
null,
mciReq,
ONBTI2370_O.class
);
RecruitmentFeeDisclosureDataResponse response = new RecruitmentFeeDisclosureDataResponse();
if (resTransfer.getBody() != null) {
response = converter.toResponse(resTransfer.getBody());
}
response.setResultCode("SUCCESS");
response.setResultMessage(resTransfer.getBody() != null
? "MCI call completed."
: "MCI call completed without a response body.");
return response;
} catch (Exception e) {
log.error("[MCI Tool] 연동 중 오류 발생: {}", e.getMessage(), e);
RecruitmentFeeDisclosureDataResponse response = new RecruitmentFeeDisclosureDataResponse();
response.setResultCode("ERROR");
response.setResultMessage(e.getMessage() != null ? e.getMessage() : "Unknown error");
return response;
}
}
}

View File

@@ -1,4 +1,4 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c; package io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -6,8 +6,8 @@ import io.shinhanlife.dat.lib.integration.mci.component.AxhubMciComponent;
import io.shinhanlife.glow.communication.dto.Transfer; import io.shinhanlife.glow.communication.dto.Transfer;
/** /**
* @package io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c * @package io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i
* @className MciNcscClient * @className MciNbtiClient
* @description AX HUB 시스템 처리 클래스 * @description AX HUB 시스템 처리 클래스
* @author jade * @author jade
* @create 2026.08.25 * @create 2026.08.25
@@ -21,7 +21,7 @@ import io.shinhanlife.glow.communication.dto.Transfer;
*/ */
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class MciNcscClient { public class MciNbtiClient {
private final AxhubMciComponent mci; private final AxhubMciComponent mci;
public <O> Transfer<O> callTo(String interfaceId, String dummy, Object mciReq, Class<O> resType) throws Exception { public <O> Transfer<O> callTo(String interfaceId, String dummy, Object mciReq, Class<O> resType) throws Exception {

View File

@@ -0,0 +1,30 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i.io;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.Pattern;
@Data
public class ONBTI2370_I {
@Schema(description = "조회할 회사의 코드 (형식: ^[0-9]{6}$) (예시: 005930, 035420)", example = "005930", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]{6}$")
private String companyCode;
@Schema(description = "조회할 연도 (형식: ^[0-9]{4}$) (예시: 2023, 2024)", example = "2023", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]{4}$")
private Integer year;
@Schema(description = "조회할 분기 (1-4) (형식: ^[1-4]$) (예시: 1, 2, 3, 4)", example = "1")
@Pattern(regexp = "^[1-4]$")
private Integer quarter;
@Schema(description = "조회 시작일 (YYYY-MM-DD) (형식: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$) (예시: 2024-01-01, 2024-04-01)", example = "2024-01-01")
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$")
private String startDate;
@Schema(description = "조회 종료일 (YYYY-MM-DD) (형식: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$) (예시: 2024-03-31, 2024-06-30)", example = "2024-03-31")
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$")
private String endDate;
}

View File

@@ -0,0 +1,39 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i.io;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
import jakarta.validation.constraints.Pattern;
@Data
public class ONBTI2370_O {
@Schema(description = "결과 코드 (예시: SUCCESS, ERROR)", example = "SUCCESS", requiredMode = Schema.RequiredMode.REQUIRED)
private String resultCode;
@Schema(description = "모집수수료 공시 데이터 목록", requiredMode = Schema.RequiredMode.REQUIRED)
private List<DataItem> data;
@Schema(description = "조회된 총 데이터 건수 (형식: ^[0-9]+$) (예시: 10, 25)", example = "10", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]+$")
private Integer totalCount;
@Schema(description = "처리 결과 메시지 (예시: 조회 성공, 데이터가 없습니다)", example = "조회 성공", requiredMode = Schema.RequiredMode.REQUIRED)
private String message;
@Data
public static class DataItem {
@Schema(description = "회사명 (예시: 삼성전자, 카카오)", example = "삼성전자", requiredMode = Schema.RequiredMode.REQUIRED)
private String companyName;
@Schema(description = "공시일 (형식: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$) (예시: 2024-01-15, 2024-04-20)", example = "2024-01-15", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[0-9]{4}-[0-9]{2}-[0-9]{2}$")
private String disclosureDate;
@Schema(description = "공시 유형 (예시: 신규공시, 정정공시)", example = "신규공시", requiredMode = Schema.RequiredMode.REQUIRED)
private String disclosureType;
}
}

View File

@@ -1,24 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c.io;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.Pattern;
@Data
public class DATNCSO00001_I {
@Schema(description = "조회할 고객의 고유 ID (형식: ^[A-Za-z0-9-]{1,20}$) (예시: 12345, CUST-00123)", example = "12345", requiredMode = Schema.RequiredMode.REQUIRED)
@Pattern(regexp = "^[A-Za-z0-9-]{1,20}$")
private String customerId;
@Schema(description = "고객 이름 (선택적 확인용) (형식: ^[가-힣a-zA-Z\s]{2,20}$) (예시: 김철수, Lee Chul-soo)", example = "김철수")
@Pattern(regexp = "^[가-힣a-zA-Z\s]{2,20}$")
private String name;
@Schema(description = "고객 전화번호 (선택적 확인용) (형식: {4}$) (예시: 010-1234-5678, +821012345678)", example = "010-1234-5678")
private String phoneNumber;
@Schema(description = "고객 이메일 주소 (선택적 확인용) (형식: $) (예시: customer@example.com, user@test.co.kr)", example = "customer@example.com")
private String email;
}

View File

@@ -1,33 +0,0 @@
package io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c.io;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class DATNCSO00001_O {
@Schema(description = "조회 결과 상태 코드 (예시: SUCCESS, ERROR_001)", example = "SUCCESS", requiredMode = Schema.RequiredMode.REQUIRED)
private String resultCode;
@Schema(description = "조회된 고객의 고유 ID (예시: 12345, CUST-00123)", example = "12345", requiredMode = Schema.RequiredMode.REQUIRED)
private String customerId;
@Schema(description = "고객의 전체 이름 (예시: 김철수, Lee Chul-soo)", example = "김철수", requiredMode = Schema.RequiredMode.REQUIRED)
private String name;
@Schema(description = "고객의 전화번호 (예시: 010-1234-5678)", example = "010-1234-5678", requiredMode = Schema.RequiredMode.REQUIRED)
private String phoneNumber;
@Schema(description = "고객의 이메일 주소 (예시: customer@example.com)", example = "customer@example.com", requiredMode = Schema.RequiredMode.REQUIRED)
private String email;
@Schema(description = "고객의 주소 정보 (예시: 서울시 강남구 테헤란로 123)", example = "서울시 강남구 테헤란로 123")
private String address;
@Schema(description = "고객의 생년월일 (예시: 1990-01-15)", example = "1990-01-15")
private String birthDate;
@Schema(description = "고객의 멤버십 등급 (예시: GOLD, SILVER, BRONZE)", example = "GOLD")
private String membershipLevel;
}

View File

@@ -0,0 +1,6 @@
{
"resultCode" : "SUCCESS",
"data" : [{"companyName" : "삼성전자", "disclosureDate" : "2024-01-15", "feeAmount" : 1000000.50, "disclosureType" : "신규공시"],
"totalCount" : 10,
"message" : "조회 성공"
}

View File

@@ -2,8 +2,6 @@ package io.shinhanlife.dat.mcc.biz.pro.usecase;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.PersonalCustomerDetailInquiryResponse;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
class PersonalCustomerDetailInquiryUseCaseTest { class PersonalCustomerDetailInquiryUseCaseTest {

View File

@@ -0,0 +1,16 @@
package io.shinhanlife.dat.mcc.biz.pro.usecase;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataRequest;
import io.shinhanlife.dat.mcc.biz.pro.dto.RecruitmentFeeDisclosureDataResponse;
import org.junit.jupiter.api.Test;
class RecruitmentFeeDisclosureDataUseCaseTest {
@Test
void createsToolRequestAndResponseDtos() {
assertNotNull(new RecruitmentFeeDisclosureDataRequest());
assertNotNull(new RecruitmentFeeDisclosureDataResponse());
}
}