import { StoreItem as StoreItemEntity, ReservationPeriod, ReservationStockModeInfo, StoreItemReservationStatsInfo } from '@yolo-croket-dev/entity/src/store-item'; import { ReservationCancelReasonEnum } from '@yolo-croket-dev/entity-v2/purchased-info'; /** * @description 예약 실패 건 사유별 카운트 (조회 시점 집계; DB 저장 X) */ export interface ReservationFailedCountByReason { /** 사용자 직접 취소 건수 */ [ReservationCancelReasonEnum.cancelByUser]: number; /** 재고 매칭 실패 건수 */ [ReservationCancelReasonEnum.matchingFailedStockByAdmin]: number; /** 결제 매칭 실패 건수 */ [ReservationCancelReasonEnum.matchingFailedPaymentByAdmin]: number; /** 구매자 협의 후 예약 해제 건수 */ [ReservationCancelReasonEnum.cancelAfterConsultationWithBuyerByAdmin]: number; /** 상품/가격 정보 변경으로 인한 취소 건수 */ [ReservationCancelReasonEnum.cancelDueToItemOrPriceChangeByAdmin]: number; } /** * @description 목록 API 전용 확장 통계 타입 * - DB 원본(`StoreItemReservationStatsInfo`)에 사유별 집계를 조회 시점에 추가 */ export type ReservationStatsInfoForAdminList = StoreItemReservationStatsInfo & { failedCountByReason?: ReservationFailedCountByReason; }; export declare enum GetReservationItemsForAdminSearchTypeEnum { 'ITEM_NAME' = "ITEM_NAME", 'ITEM_ID' = "ITEM_ID", 'RESERVATION_STATUS' = "RESERVATION_STATUS", 'RESERVATION_PERIOD' = "RESERVATION_PERIOD" } export declare enum GetReservationItemsForAdminReservationStatusEnum { 'UPCOMING' = "UPCOMING", 'IN_PROGRESS' = "IN_PROGRESS", 'CLOSED' = "CLOSED" } export declare class GetReservationItemsForAdminPayload { searchType: GetReservationItemsForAdminSearchTypeEnum; page: number; limit: number; itemName?: string; itemId?: string; reservationStatus?: GetReservationItemsForAdminReservationStatusEnum; canReserveStartDate?: string; canReserveEndDate?: string; } export interface GetReservationItemsForAdminListItem { itemId: string; itemName: StoreItemEntity['itemName']; /** 현재 구매자에게 노출되는 개당 상품가 (원) */ itemPriceForBuyer: number; isSelling: StoreItemEntity['isSelling']; totalReservationCount: number; reservationStatus: GetReservationItemsForAdminReservationStatusEnum; reservationPeriod: ReservationPeriod; stockSecuringPeriod: ReservationPeriod; shippingPeriod: ReservationPeriod; stockModeInfo: ReservationStockModeInfo; /** 재고확보 기간 예약 가능 여부 */ isReservableInStockSecuringPeriod: boolean; /** 배송 기간 예약 가능 여부 */ isReservableInShippingPeriod: boolean; reservationStatsInfo?: ReservationStatsInfoForAdminList; } export declare class GetReservationItemsForAdminResult { list: GetReservationItemsForAdminListItem[]; totalCount: number; }