@chevre/domain
Version:
Chevre Domain Library for Node.js
291 lines (290 loc) • 10.9 kB
TypeScript
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 {};