forked from kimhyungsik/ax_hub_mcp_tool
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -1,17 +1,9 @@
|
||||
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 org.springframework.stereotype.Service;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 lombok.RequiredArgsConstructor;
|
||||
@@ -6,8 +6,8 @@ import io.shinhanlife.dat.lib.integration.mci.component.AxhubMciComponent;
|
||||
import io.shinhanlife.glow.communication.dto.Transfer;
|
||||
|
||||
/**
|
||||
* @package io.shinhanlife.dat.mcc.infra.itrf.mci.ncs.c
|
||||
* @className MciNcscClient
|
||||
* @package io.shinhanlife.dat.mcc.infra.itrf.mci.nbt.i
|
||||
* @className MciNbtiClient
|
||||
* @description AX HUB 시스템 처리 클래스
|
||||
* @author jade
|
||||
* @create 2026.08.25
|
||||
@@ -21,7 +21,7 @@ import io.shinhanlife.glow.communication.dto.Transfer;
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class MciNcscClient {
|
||||
public class MciNbtiClient {
|
||||
private final AxhubMciComponent mci;
|
||||
|
||||
public <O> Transfer<O> callTo(String interfaceId, String dummy, Object mciReq, Class<O> resType) throws Exception {
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"resultCode" : "SUCCESS",
|
||||
"data" : [{"companyName" : "삼성전자", "disclosureDate" : "2024-01-15", "feeAmount" : 1000000.50, "disclosureType" : "신규공시"],
|
||||
"totalCount" : 10,
|
||||
"message" : "조회 성공"
|
||||
}
|
||||
@@ -2,8 +2,6 @@ package io.shinhanlife.dat.mcc.biz.pro.usecase;
|
||||
|
||||
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;
|
||||
|
||||
class PersonalCustomerDetailInquiryUseCaseTest {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user