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