UNPKG

@chevre/domain

Version:

Chevre Domain Library for Node.js

291 lines (290 loc) 10.9 kB
import type { Connection, FilterQuery } from 'mongoose'; import * as factory from '../factory'; type IKeyOfProjection<T extends factory.transactionType> = keyof Pick<factory.transaction.ITransaction<factory.transactionType>, 'agent' | 'endDate' | 'expires' | 'project' | 'startDate' | 'status' | 'typeOf'> | Exclude<keyof factory.transaction.ITransaction<T>, 'id'>; interface IAggregationByStatus { transactionCount: number; avgDuration: number; maxDuration: number; minDuration: number; percentilesDuration: { name: string; value: number; }[]; } interface IStatus { status: factory.transactionStatusType; aggregation: IAggregationByStatus; } export interface IAggregatePlaceOrder { statuses: IStatus[]; } type IOmittedFieldsInProgress = 'tasksExportAction' | 'tasksExportedAt' | 'tasksExportationStatus'; export type ITransactionInProgress<T extends factory.transactionType> = T extends factory.transactionType.MoneyTransfer ? Omit<factory.transaction.moneyTransfer.ITransaction, IOmittedFieldsInProgress> : T extends factory.transactionType.PlaceOrder ? Omit<factory.transaction.placeOrder.ITransaction, IOmittedFieldsInProgress> : T extends factory.transactionType.ReturnOrder ? Omit<factory.transaction.returnOrder.ITransaction, IOmittedFieldsInProgress> : never; type IStartedTransactionFields = 'expires' | 'id' | 'startDate' | 'status'; export type IStartedTransaction = Pick<factory.transaction.ITransaction<factory.transactionType>, IStartedTransactionFields>; /** * 取引リポジトリ */ export declare class TransactionRepo { private readonly transactionModel; constructor(connection: Connection); static CREATE_MONGO_CONDITIONS(params: factory.transaction.ISearchConditions<factory.transactionType>): FilterQuery<import("@chevre/factory/lib/assetTransaction/cancelReservation").ITransaction | import("@chevre/factory/lib/assetTransaction/moneyTransfer").ITransaction | import("@chevre/factory/lib/assetTransaction/pay").ITransaction | import("@chevre/factory/lib/assetTransaction/refund").ITransaction | import("@chevre/factory/lib/assetTransaction/registerService").ITransaction | import("@chevre/factory/lib/assetTransaction/reserve").ITransaction>[]; /** * 取引を開始する */ start<T extends factory.transactionType>(params: factory.transaction.IStartParams<T>): Promise<IStartedTransaction>; /** * 特定取引検索 */ projectFieldsById<T extends factory.transactionType>(params: { typeOf: T; id: string; }, inclusion: IKeyOfProjection<T>[]): Promise<factory.transaction.ITransaction<T>>; /** * 進行中の取引を取得する */ projectFieldsInProgressById<T extends factory.transactionType>(params: { typeOf: T; id: string; }, inclusion: IKeyOfProjection<T>[]): Promise<ITransactionInProgress<T>>; /** * 進行中取引に保管された採用済決済方法を検索する */ findInProgressPaymentMethodId(params: { id: string; }): Promise<factory.transaction.placeOrder.IPaymentMethodByPaymentUrl | undefined>; /** * 取引の注文番号を検索する */ findInProgressOrderNumberById(params: { id: string; }): Promise<string | undefined>; /** * 取引の確認番号を検索する */ findInProgressConfirmationNumberById(params: { id: string; status: { $in: factory.transactionStatusType[]; }; }): Promise<string | undefined>; /** * 取引進行者プロフィールを更新 */ updateAgent<T extends factory.transactionType>(params: { typeOf: T; id: string; agent: Pick<factory.transaction.IAgent, 'id'>; object?: { customer?: factory.order.ICustomer; }; }): Promise<void>; /** * 取引期限変更 */ updateExpires<T extends factory.transactionType>(params: { typeOf: T; id: string; expires: Date; }): Promise<void>; /** * 取引オブジェクトを更新 * 注文名称など */ updateObject<T extends factory.transactionType>(params: { typeOf: T; id: string; object?: { name?: string; }; }): Promise<void>; /** * 取引を確定する */ confirm<T extends factory.transactionType>(params: { typeOf: T; id: string; result: factory.transaction.IResult<T>; potentialActions: factory.transaction.IPotentialActions<T>; }): Promise<void>; countPotentiallyExportTasks(params: { endDate: { $lt: Date; }; limit?: number; }): Promise<{ count: number; }>; /** * タスク未エクスポートの取引をひとつ取得してエクスポートを開始する */ startExportTasks(params: { status?: { $eq?: factory.transactionStatusType; }; id?: string; tasksExportAction: { agent: { name: string; }; }; endDate: { $lt: Date; }; sort?: { endDate?: factory.sortType; startDate?: factory.sortType; }; }): Promise<Pick<factory.transaction.ITransaction<factory.transactionType>, 'id' | 'typeOf'> | null>; /** * tasksExportAction.actionStatusがActiveActionStatusのまま一定時間経過した取引について * PotentialActionStatusに変更する * 2025-03-10~ */ reExportAction(params: { startDate: { $lt: Date; }; }): Promise<import("mongoose").UpdateWriteOpResult>; /** * タスクエクスポートの遅延している取引について明示的にemitTransactionStatusChangedを実行する */ exportTasksMany(params: { now: Date; delayInSeconds: number; status: { $in: factory.transactionStatusType[]; }; limit: number; }): Promise<Pick<import("@chevre/factory/lib/transaction/moneyTransfer").ITransaction | import("@chevre/factory/lib/transaction/placeOrder").ITransaction | import("@chevre/factory/lib/transaction/returnOrder").ITransaction, "id" | "status" | "typeOf">[]>; /** * set task status exported by transaction id * IDでタスクをエクスポート済に変更する */ setTasksExportedById(params: { id: string; }): Promise<void>; /** * add(2025-03-13~) */ countPotentiallyExpired(params: { expires: { $lt: Date; }; limit?: number; }): Promise<{ count: number; }>; /** * add(2025-03-03~) */ makeOneExpiredIfExists(params: { expires: { $lt: Date; }; }): Promise<Pick<factory.transaction.ITransaction<factory.transactionType>, 'id' | 'typeOf'> | void>; /** * 取引を期限切れにする */ makeExpired(params: { expires: { $lt: Date; }; limit: number; }): Promise<Pick<factory.transaction.ITransaction<factory.transactionType>, 'id' | 'typeOf'>[]>; /** * 取引を中止する */ cancel<T extends factory.transactionType>(params: { typeOf: T; id: string; }): Promise<void>; count<T extends factory.transactionType>(params: factory.transaction.ISearchConditions<T>): Promise<{ count: number; }>; /** * 取引を検索する */ projectFields<T extends factory.transactionType, F extends IKeyOfProjection<T>>(params: factory.transaction.ISearchConditions<T> & { inclusion: F[]; }): Promise<(Pick<factory.transaction.ITransaction<T>, F> & { id: string; })[]>; /** * 特定の進行中取引を更新する(汎用) */ findByIdAndUpdateInProgress(params: { id: string; update: { $set?: { 'object.paymentMethods'?: factory.transaction.placeOrder.IPaymentMethodByPaymentUrl; }; }; }): Promise<void>; saveOrderNumberIfNotExist(params: { id: string; orderNumber: string; }): Promise<void>; saveConfirmationNumberIfNotExist(params: { id: string; status: { $in: factory.transactionStatusType[]; }; confirmationNumber: string; }): Promise<void>; findByIdAndDelete(params: { id: string; }): Promise<void>; unsetUnnecessaryFields(params: { filter: any; $unset: any; }): Promise<import("mongoose").UpdateWriteOpResult>; /** * 終了日時を一定期間過ぎたアクションを削除する */ deleteEndDatePassedCertainPeriod(params: { typeOf: factory.transactionType; endDate: { $gte: Date; $lt: Date; }; }): Promise<import("mongodb").DeleteResult>; getCursor(conditions: any, projection: any): import("mongoose").Cursor<import("mongoose").Document<unknown, {}, import("@chevre/factory/lib/transaction/moneyTransfer").ITransaction | import("@chevre/factory/lib/transaction/placeOrder").ITransaction | import("@chevre/factory/lib/transaction/returnOrder").ITransaction> & ((import("@chevre/factory/lib/transaction/moneyTransfer").IAttributes & { id: string; } & { _id: import("mongoose").Types.ObjectId; }) | (import("@chevre/factory/lib/transaction/placeOrder").IAttributes & { id: string; } & { _id: import("mongoose").Types.ObjectId; }) | (import("@chevre/factory/lib/transaction/returnOrder").IAttributes & { id: string; } & { _id: import("mongoose").Types.ObjectId; })), import("mongoose").QueryOptions<import("mongoose").Document<unknown, {}, import("@chevre/factory/lib/transaction/moneyTransfer").ITransaction | import("@chevre/factory/lib/transaction/placeOrder").ITransaction | import("@chevre/factory/lib/transaction/returnOrder").ITransaction> & ((import("@chevre/factory/lib/transaction/moneyTransfer").IAttributes & { id: string; } & { _id: import("mongoose").Types.ObjectId; }) | (import("@chevre/factory/lib/transaction/placeOrder").IAttributes & { id: string; } & { _id: import("mongoose").Types.ObjectId; }) | (import("@chevre/factory/lib/transaction/returnOrder").IAttributes & { id: string; } & { _id: import("mongoose").Types.ObjectId; }))>>; aggregatePlaceOrder(params: { project?: { id?: { $ne?: string; }; }; startFrom: Date; startThrough: Date; typeOf: factory.transactionType; clientId?: string; }): Promise<IAggregatePlaceOrder>; private agggregateByStatus; } export {};