UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

230 lines (229 loc) 7.51 kB
import type { Connection, FilterQuery } from 'mongoose'; import * as factory from '../factory'; type IOrderWithoutAcceptedOffers = factory.order.IOrder; type IKeyOfProjection = Extract<keyof IOrderWithoutAcceptedOffers, 'broker' | 'confirmationNumber' | 'customer' | 'dateReturned' | 'identifier' | 'name' | 'orderDate' | 'orderNumber' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'previousOrderStatus' | 'price' | 'priceCurrency' | 'project' | 'returner' | 'seller' | 'typeOf' | 'url'> | 'paymentMethods.accountId' | 'paymentMethods.name' | 'paymentMethods.paymentMethod' | 'paymentMethods.paymentMethodId' | 'paymentMethods.totalPaymentDue' | 'paymentMethods.additionalProperty' | 'paymentMethods.issuedThrough'; export type IReturnedOrder = Pick<IOrderWithoutAcceptedOffers, 'project' | 'typeOf' | 'orderNumber' | 'dateReturned' | 'id' | 'customer' | 'returner' | 'seller' | 'price' | 'priceCurrency' | 'orderDate'> & { id: string; }; interface IAggregation { orderCount: number; totalNumAcceptedOffer: number; avgNumAcceptedOffer: number; maxNumAcceptedOffer: number; minNumAcceptedOffer: number; totalPrice: number; avgPrice: number; maxPrice: number; minPrice: number; } interface IAggregateOrder { aggregation: IAggregation; } /** * ステータス変更後注文 */ export type IOrderOnStatusChanged = Pick<IOrderWithoutAcceptedOffers & { id: string; }, 'id' | 'orderNumber' | 'broker' | 'confirmationNumber' | 'customer' | 'dateReturned' | 'name' | 'orderDate' | 'orderStatus' | 'orderedItem' | 'paymentMethods' | 'previousOrderStatus' | 'price' | 'priceCurrency' | 'project' | 'returner' | 'seller' | 'typeOf'>; /** * 注文リポジトリ */ export declare class OrderRepo { private readonly orderModel; constructor(connection: Connection); static CREATE_MONGO_CONDITIONS(params: Omit<factory.order.ISearchConditions, 'limit' | 'page' | 'sort'>): FilterQuery<factory.order.IOrder>[]; /** * なければ作成する */ createIfNotExist(order: IOrderWithoutAcceptedOffers & { acceptedOffers: factory.order.IAcceptedOffer<factory.order.IItemOffered>[]; }): Promise<void>; /** * 注文ステータスを変更する */ changeStatus(params: { project: { id: string; }; orderNumber: string; orderStatus: factory.orderStatus; previousOrderStatus: factory.orderStatus; }): Promise<IOrderOnStatusChanged>; /** * 注文を返品する */ returnOrder(params: { project: { id: string; }; orderNumber: string; dateReturned: Date; returner: factory.order.IReturner; }): Promise<IReturnedOrder>; /** * 変更可能な属性を更新する */ updateChangeableAttributes(params: Pick<factory.order.IOrder, 'name'> & { project: { id: string; }; orderNumber: string; }): Promise<{ updatedAt: Date; }>; /** * 注文後に決済方法区分を確定する */ fixPaymentMethodIdentifier(params: { project: { id: string; }; orderNumber: string; invoice: { paymentMethodId: string; paymentMethod: { identifier: string; }; }; }): Promise<void>; projectFieldsById(params: { id: string; inclusion: IKeyOfProjection[]; }): Promise<IOrderWithoutAcceptedOffers & { id: string; }>; /** * 注文番号から注文を取得する */ projectFieldsByOrderNumber(params: { orderNumber: string; project: { id: string; }; seller?: { id?: string; }; inclusion: IKeyOfProjection[]; }): Promise<IOrderWithoutAcceptedOffers & { id: string; }>; findByOrderNumberAndReservationId(params: { project: { id: string; }; seller?: { id?: string; }; orderNumber: string; reservationId: string; }): Promise<Pick<IOrderWithoutAcceptedOffers, 'orderNumber' | 'orderStatus' | 'typeOf'>>; /** * 注文番号で削除する */ deleteByOrderNumber(params: { orderNumber: string; }): Promise<void>; count(params: factory.order.ISearchConditions): Promise<number>; /** * 注文を検索する(inclusion projection) * redefine from search(2024-07-31~) */ projectFields(params: factory.order.ISearchConditions & { limit: number; page: number; }, options: { inclusion: IKeyOfProjection[]; }): Promise<(IOrderWithoutAcceptedOffers & { id: string; })[]>; getCursor(conditions: any, projection: any): import("mongoose").Cursor<import("mongoose").Document<unknown, {}, Omit<factory.order.IOrder, "id"> & { acceptedOffers?: factory.order.IAcceptedOffer<factory.order.IItemOffered>[]; }> & Omit<factory.order.IOrder, "id"> & { acceptedOffers?: factory.order.IAcceptedOffer<factory.order.IItemOffered>[]; } & { _id: import("mongoose").Types.ObjectId; }, import("mongoose").QueryOptions<import("mongoose").Document<unknown, {}, Omit<factory.order.IOrder, "id"> & { acceptedOffers?: factory.order.IAcceptedOffer<factory.order.IItemOffered>[]; }> & Omit<factory.order.IOrder, "id"> & { acceptedOffers?: factory.order.IAcceptedOffer<factory.order.IItemOffered>[]; } & { _id: import("mongoose").Types.ObjectId; }>>; unsetUnnecessaryFields(params: { filter: FilterQuery<factory.order.IOrder>; $unset: any; }): Promise<import("mongoose").UpdateWriteOpResult>; aggregateOrder(params: { project?: { id?: { $ne?: string; }; }; orderDate: { $gte: Date; $lte: Date; }; }): Promise<IAggregateOrder>; aggregateOrderOfSeat(params: { project: { id: { $eq: string; }; }; orderDate: { $gte: Date; $lte: Date; }; acceptedOffers: { itemOffered: { reservationFor: { location: { branchCode: string; }; superEvent: { location: { branchCode: string; }; }; }; reservedTicket: { ticketedSeat: { seatNumber: string; }; }; }; }; customer?: { email?: { $in?: string[]; }; }; }): Promise<{ aggregation: Pick<IAggregation, 'orderCount'> & { sumGraceTime?: number; emailCount?: number; }; }>; aggregateOrderOfCustomer(params: { project: { id: { $eq: string; }; }; orderDate: { $gte: Date; $lte: Date; }; customer: { email: { $eq: string; }; }; }): Promise<{ aggregation: Pick<IAggregation, 'orderCount'> & { sumGraceTime?: number; emailCount?: number; }; }>; } export {};