Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development #440

Merged
merged 68 commits into from
Nov 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
0a6668e
implement the menu search
olasunkanmi-SE Jul 26, 2023
ff364d1
fix code smell
olasunkanmi-SE Jul 26, 2023
65b6009
calculate service charge
olasunkanmi-SE Sep 11, 2023
c6c683f
update sonar project config
olasunkanmi-SE Sep 11, 2023
cc60885
update total order calculation
olasunkanmi-SE Sep 11, 2023
d2dfe38
add cart items to order
olasunkanmi-SE Sep 11, 2023
541a0a3
move email header check to the backend
olasunkanmi-SE Sep 11, 2023
55765a0
remove quantity from order
olasunkanmi-SE Sep 23, 2023
5c3e4c7
Merge branch 'release' into development
olasunkanmi-SE Sep 23, 2023
f0dfa7b
update selected items to include itemId
olasunkanmi-SE Sep 23, 2023
faa996d
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Sep 23, 2023
dead621
make cartitem and selectedCart Items optional in parent models
olasunkanmi-SE Sep 23, 2023
0dcffa7
Merge branch 'release' into development
olasunkanmi-SE Sep 23, 2023
ad8f925
create the order service
olasunkanmi-SE Sep 24, 2023
ddb05dd
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Sep 24, 2023
e28d2ef
Merge branch 'release' into development
olasunkanmi-SE Sep 24, 2023
a83f120
create order controller
olasunkanmi-SE Sep 24, 2023
d90a534
checkout and fix (#391)
olasunkanmi-SE Oct 24, 2023
a998d1e
Test (#393)
olasunkanmi-SE Oct 24, 2023
599e37c
Test (#396)
olasunkanmi-SE Oct 24, 2023
3ab65de
Merge branch 'release' into development
olasunkanmi-SE Oct 24, 2023
35a3d9d
Test (#400)
olasunkanmi-SE Oct 25, 2023
b6dd7f1
Test (#403)
olasunkanmi-SE Oct 26, 2023
c094940
Merge branch 'release' into development
olasunkanmi-SE Oct 26, 2023
2bd6071
create the create order service
olasunkanmi-SE Oct 29, 2023
1d3abea
Merge branch 'release' into development
olasunkanmi-SE Oct 29, 2023
b4f6733
create order
olasunkanmi-SE Oct 29, 2023
f118a7b
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Oct 29, 2023
420f2a9
Merge branch 'release' into development
olasunkanmi-SE Oct 29, 2023
325edb9
check for duplicate orders before creating one
olasunkanmi-SE Nov 12, 2023
736597c
Merge branch 'release' into development
olasunkanmi-SE Nov 12, 2023
dc6f1b4
Merge branch 'release' of github.com:olasunkanmi-SE/restaurant into d…
olasunkanmi-SE Nov 12, 2023
4766447
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Nov 12, 2023
2f47f7b
remove ChatGpt code reviewer
olasunkanmi-SE Nov 12, 2023
db513a6
create order statuses domain entity
olasunkanmi-SE Nov 12, 2023
b6fb0db
create the order status schema
olasunkanmi-SE Nov 12, 2023
5621a88
create orser status mapper
olasunkanmi-SE Nov 12, 2023
fa05846
Merge branch 'release' into development
olasunkanmi-SE Nov 12, 2023
0a091da
Merge branch 'release' of github.com:olasunkanmi-SE/restaurant into d…
olasunkanmi-SE Nov 12, 2023
b969d63
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Nov 12, 2023
d190169
create the order status service
olasunkanmi-SE Nov 14, 2023
5384610
fix merge conflicts
olasunkanmi-SE Nov 14, 2023
816f4fa
resolve all dependencies
olasunkanmi-SE Nov 14, 2023
e015c8e
Merge branch 'release' into development
olasunkanmi-SE Nov 14, 2023
7fbaa09
create order notes
olasunkanmi-SE Nov 14, 2023
b4fdecf
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Nov 14, 2023
ca70c26
Merge branch 'release' into development
olasunkanmi-SE Nov 14, 2023
da7db0c
fix build error
olasunkanmi-SE Nov 14, 2023
ac22f15
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Nov 14, 2023
307c9c4
fix build error
olasunkanmi-SE Nov 14, 2023
977cddf
fix build errors
olasunkanmi-SE Nov 14, 2023
eaee17b
add order notes module to app module
olasunkanmi-SE Nov 14, 2023
97c5275
create the order processing queue module
olasunkanmi-SE Nov 14, 2023
35d9a23
Merge branch 'release' of github.com:olasunkanmi-SE/restaurant into d…
olasunkanmi-SE Nov 14, 2023
de9c032
update app module with OrderProcessingQueuesModule
olasunkanmi-SE Nov 14, 2023
ff7a24b
Merge branch 'release' into development
olasunkanmi-SE Nov 14, 2023
831116b
create the get orders method
olasunkanmi-SE Nov 15, 2023
9df6314
get orders (#429)
olasunkanmiraymond Nov 17, 2023
4b06c19
add notes to menui
olasunkanmi-SE Nov 18, 2023
ec66d58
Merge branch 'development' of github.com:olasunkanmi-SE/restaurant in…
olasunkanmi-SE Nov 18, 2023
8773105
remove notes from menu
olasunkanmi-SE Nov 19, 2023
395746d
remove notes from menu
olasunkanmi-SE Nov 19, 2023
c482350
Merge branch 'release' into development
olasunkanmi-SE Nov 19, 2023
fe23a3f
remove notes from menu
olasunkanmi-SE Nov 19, 2023
f146115
include menuId in ordernote domain
olasunkanmi-SE Nov 19, 2023
122d874
to be fixed remotely
olasunkanmi-SE Nov 20, 2023
7c6a94e
Development (#437)
olasunkanmiraymond Nov 20, 2023
889f38c
Development (#439)
olasunkanmiraymond Nov 20, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/.vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"request": "launch",
"name": "Test",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "test:unit", "src/restaurant/restaurant-service.spec.ts", "--inspect-brk"],
"runtimeArgs": ["run", "test:unit", "src/order/order-service.spec.ts", "--inspect-brk"],
// "src/infrastructure/data_access/db_repositories/worker_sql_repository.spec.ts",
"console": "integratedTerminal",
"restart": true,
Expand Down
1 change: 1 addition & 0 deletions backend/src/application/constants/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ export const TYPES = {
IOrderNoteService: Symbol('IOrderNoteService'),
IOrderProcessingQueueRepository: Symbol('IOrderProcessingQueueRepository'),
IOrderProcessingQueueService: Symbol('IOrderProcessingQueueService'),
IMerchantRepository: Symbol('IMerchantRepository'),
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { IGenericDocument } from 'src/infrastructure/database';
import { Merchant } from 'src/merchant';
import { MerchantDocument } from '../schemas';

export interface IMerchantRepository extends IGenericDocument<Merchant, MerchantDocument> {}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import { OrderDataModel, OrderDocument } from '../schemas/order.schema';
import { IGenericDocument } from 'src/infrastructure/database';
import { CartItemDataModel } from '../schemas/cartItem.schema';
import { Result } from 'src/domain';
import { CreateCartItemsDTO } from 'src/order/dto/create-order.dto';

export interface IOrderRepository extends IGenericDocument<Order, OrderDocument> {
createOrder(order: OrderDataModel): Promise<Result<Order>>;
getDuplicateOrder(type: string, merchantId: string, cartItems: CartItemDataModel[]): Promise<boolean>;
getDuplicateOrder(type: string, merchantId: string, cartItems: CreateCartItemsDTO[]): Promise<boolean>;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Types } from 'mongoose';
import { currentStatus, dinningType } from 'src/order/order-entity.interface';
import { dinningType } from 'src/order/order-entity.interface';
import { CartItemDataModel } from '../schemas/cartItem.schema';
import { OrderStatusModel } from '../schemas/order-status.schema';

export interface IOrderDataModel {
readonly state: currentStatus;
readonly state: OrderStatusModel;
readonly type: dinningType;
readonly merchantId: Types.ObjectId;
readonly customerId?: Types.ObjectId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ import { Types } from 'mongoose';

export interface IOrderNoteModel {
orderId: Types.ObjectId;
menuId: Types.ObjectId;
note: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { IOrderRepository } from './interfaces/order-repository.interface';
import { OrderDataModel, OrderDocument } from './schemas/order.schema';
import { Result } from 'src/domain';
import { CartItemDataModel } from './schemas/cartItem.schema';
import { CreateCartItemsDTO } from 'src/order/dto/create-order.dto';

@Injectable()
export class OrderRepository extends GenericDocumentRepository<Order, OrderDocument> implements IOrderRepository {
Expand All @@ -26,15 +27,21 @@ export class OrderRepository extends GenericDocumentRepository<Order, OrderDocum
return response ? Result.ok(response) : Result.fail('Could not create order', HttpStatus.INTERNAL_SERVER_ERROR);
}

async getDuplicateOrder(type: string, merchantId: string, cartItems: CartItemDataModel[]): Promise<boolean> {
async getDuplicateOrder(type: string, merchantId: string, cartItems: CreateCartItemsDTO[]): Promise<boolean> {
const currentTime: Date = new Date();
const duplicateTimeFrameInMinutes = 60 * 1000;
const selectedItemIds = cartItems.map((item) => item._id);
const initDuplicateTimeFrameInMinutes = 60 * 1000;
const finalDuplicateTimeFrameInMinutes = initDuplicateTimeFrameInMinutes * 4;
const initDuplicateTimeInMilliSeconds = new Date(currentTime.getMilliseconds() - initDuplicateTimeFrameInMinutes);
const selectedItems = cartItems.flatMap((item) => item.selectedItems);
const selectedItemIds = selectedItems.map((item) => item.itemId);
const result: Result<Order[]> = await this.find({
type,
merchantId,
cartItems: { $elemMatch: { $in: selectedItemIds } },
auditCreatedDateTime: { $gte: new Date(currentTime.getMilliseconds() - duplicateTimeFrameInMinutes) },
auditCreatedDateTime: {
$gte: initDuplicateTimeInMilliSeconds,
$lt: new Date(currentTime.getMilliseconds() + finalDuplicateTimeFrameInMinutes),
},
});
const potentialDuplicateOrder = result.getValue();
return potentialDuplicateOrder.length > 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ export class MenuDataModel extends BaseDocument implements IMenuDataModel {
@Prop({ type: String, required: false })
description: string;

@Prop({ type: String, required: false })
note: string;

@Prop({ type: String })
imageUrl: string;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { IOrderNoteModel } from '../models/order-note-model.interface';
import mongoose, { Document, Types } from 'mongoose';
import { Type } from 'class-transformer';
import { OrderDataModel } from './order.schema';
import { MenuDataModel } from './menu.schema';

export type OrderNoteDocument = OrderNoteModel & Document;
export class OrderNoteModel extends BaseDocument implements IOrderNoteModel {
Expand All @@ -13,6 +14,10 @@ export class OrderNoteModel extends BaseDocument implements IOrderNoteModel {
@Prop({ type: mongoose.Schema.Types.ObjectId })
@Type(() => OrderDataModel)
orderId: Types.ObjectId;

@Prop({ type: mongoose.Schema.Types.ObjectId })
@Type(() => MenuDataModel)
menuId: Types.ObjectId;
}

export const OrderNoteSchema = SchemaFactory.createForClass(OrderNoteModel);
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@ import { currentStatus, dinningType } from './../../../../order/order-entity.int
import { MerchantDataModel } from './merchant.schema';
import { OrderManagerDataModel } from './order-manger.schema';
import { CartItemDataModel } from './cartItem.schema';
import { OrderStatusModel } from './order-status.schema';

export type OrderDocument = OrderDataModel & Document;

@Schema({ versionKey: 'false' })
export class OrderDataModel extends BaseDocument implements IOrderDataModel {
@Prop({ type: String, required: true, default: 'CREATED' })
state: currentStatus;

@Prop({ type: String, required: true })
type: dinningType;

Expand All @@ -32,9 +30,13 @@ export class OrderDataModel extends BaseDocument implements IOrderDataModel {
@Prop({ type: Number, required: true })
total: number;

@Prop({ type: [{ type: mongoose.Schema.Types.ObjectId, ref: CartItemDataModel }] })
@Prop({ type: [{ type: mongoose.Schema.Types.ObjectId, ref: () => CartItemDataModel }] })
@Type(() => CartItemDataModel)
cartItems?: CartItemDataModel[];

@Prop({ type: [{ type: mongoose.Schema.Types.ObjectId, ref: () => OrderStatusModel }] })
@Type(() => OrderStatusModel)
state: OrderStatusModel;
}

export const OrderSchema = SchemaFactory.createForClass(OrderDataModel);
6 changes: 2 additions & 4 deletions backend/src/menu/menu.mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export class MenuMapper implements IMapper<Menu, MenuDataModel> {
private readonly categoryMapper: CategoryMapper,
) {}
toPersistence(entity: Menu): MenuDataModel {
const { items, name, description, audit, discount, imageUrl, basePrice, category, restaurantId, note } = entity;
const { items, name, description, audit, discount, imageUrl, basePrice, category, restaurantId } = entity;
const {
auditCreatedBy,
auditCreatedDateTime,
Expand All @@ -36,7 +36,6 @@ export class MenuMapper implements IMapper<Menu, MenuDataModel> {
discount,
imageUrl,
basePrice,
note,
restaurantId,
category: this.categoryMapper.toPersistence(category),
items: itemsToPersistence,
Expand All @@ -51,7 +50,7 @@ export class MenuMapper implements IMapper<Menu, MenuDataModel> {
}

toDomain(model: MenuDataModel): Menu {
const { _id, items, name, description, discount, imageUrl, basePrice, category, restaurantId, note } = model;
const { _id, items, name, description, discount, imageUrl, basePrice, category, restaurantId } = model;
let itemsToDomain: Item[] = [];
if (items?.length) {
itemsToDomain = items.map((item) => this.itemMapper.toDomain(item));
Expand All @@ -66,7 +65,6 @@ export class MenuMapper implements IMapper<Menu, MenuDataModel> {
discount,
imageUrl,
basePrice,
note,
audit: this.auditMapper.toDomain(model),
},
_id,
Expand Down
10 changes: 0 additions & 10 deletions backend/src/menu/menu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export class Menu extends Entity<IMenu> implements IMenu {
_basePrice: number;
_category: Category;
_restaurantId: Types.ObjectId;
_note?: string;
constructor(id: Types.ObjectId, props: IMenu) {
super(id);
this._name = props.name;
Expand All @@ -29,7 +28,6 @@ export class Menu extends Entity<IMenu> implements IMenu {
this._basePrice = props.basePrice;
this._category = props.category;
this._restaurantId = props.restaurantId;
this._note = props.note;
}

get name(): string {
Expand All @@ -40,14 +38,6 @@ export class Menu extends Entity<IMenu> implements IMenu {
this._name = value;
}

get note(): string | undefined {
return this._note;
}

set note(value: string) {
this._note = value;
}

get description(): string | undefined {
return this._description;
}
Expand Down
6 changes: 3 additions & 3 deletions backend/src/merchant/merchant-service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ describe('Test merchant service', () => {
email: 'ola@tesla.com',
passwordHash: '',
};
validateUserStub.getUser = async (): Promise<any | undefined> => {
validateUserStub.getUser = async (): Promise<any> => {
return merchantMockData;
};
contextServiceStub.getContext = (): Context => {
Expand Down Expand Up @@ -98,7 +98,7 @@ describe('Test merchant service', () => {
contextServiceStub.getContext = (): Context => {
return new Context('ola@tesla.com', '');
};
validateUserStub.getUser = async (): Promise<any | undefined> => {
validateUserStub.getUser = async (): Promise<any> => {
return merchantMockData;
};
merchantRepositoryStub.findById = async (): Promise<Result<Merchant>> => {
Expand Down Expand Up @@ -143,7 +143,7 @@ describe('Test merchant service', () => {
auditModifiedBy: 'Ola@gmail.com',
auditModifiedDateTime: new Date().toString(),
};
validateUserStub.getUser = async (): Promise<any | undefined> => {
validateUserStub.getUser = async (): Promise<any> => {
return merchantMockData;
};
merchantRepositoryStub.findById = async (): Promise<Result<Merchant>> => {
Expand Down
47 changes: 45 additions & 2 deletions backend/src/order/dto/create-order.dto.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IsArray, IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator';
import { currentStatus, dinningType } from '../order-entity.interface';
import { CartItemDataModel } from 'src/infrastructure/data_access/repositories/schemas/cartItem.schema';
import { Types } from 'mongoose';

export class CreateOrderDTO {
@IsString()
Expand All @@ -21,5 +21,48 @@ export class CreateOrderDTO {

@IsOptional()
@IsArray()
cartItems: CartItemDataModel[];
cartItems: CreateCartItemsDTO[];
}

export class CreateCartItemsDTO {
@IsString()
@IsNotEmpty()
menuId: Types.ObjectId;

@IsNotEmpty()
orderId: Types.ObjectId;

@IsString()
@IsNotEmpty()
note: string;

@IsNumber()
@IsNotEmpty()
total: number;

@IsNotEmpty()
@IsArray()
selectedItems: CreateSelectedItemsDTO[];
}

class CreateSelectedItemsDTO {
@IsNotEmpty()
@IsString()
cartItemId: string;

@IsString()
@IsNotEmpty()
menuId: string;

@IsString()
@IsNotEmpty()
itemId: string;

@IsNumber()
@IsNotEmpty()
price: number;

@IsNumber()
@IsNotEmpty()
quantity: number;
}
3 changes: 2 additions & 1 deletion backend/src/order/order-entity.interface.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { Types } from 'mongoose';
import { CartItem } from 'src/cart/cart-item';
import { Audit } from 'src/domain';
import { OrderStatus } from 'src/order_statuses/order_status';

export type currentStatus = 'CREATED' | 'ACCEPTED' | 'DENIED' | 'FINISHED' | 'CANCELLED';
export type dinningType = 'PICK_UP' | 'DINE_IN' | 'DELIVERY';

export interface IOrder {
state: currentStatus;
state: OrderStatus;
type: dinningType;
merchantId: Types.ObjectId;
customerId?: Types.ObjectId;
Expand Down
3 changes: 2 additions & 1 deletion backend/src/order/order-response.dto.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Types } from 'mongoose';
import { IAudit } from 'src/infrastructure';
import { OrderStatus } from 'src/order_statuses/order_status';

export interface IOrderResponseDTO extends IAudit {
id: Types.ObjectId;
state: string;
state: OrderStatus;
type: string;
merchantId: Types.ObjectId;
customerId?: Types.ObjectId;
Expand Down
11 changes: 8 additions & 3 deletions backend/src/order/order.mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@ import { IMapper } from 'src/domain';
import { OrderDataModel } from 'src/infrastructure/data_access/repositories/schemas/order.schema';
import { Order } from './order';
import { AuditMapper } from 'src/audit';
import { OrderStatusMapper } from 'src/order_statuses/order_status.mapper';

@Injectable()
export class OrderMapper implements IMapper<Order, OrderDataModel> {
constructor(private readonly auditMapper: AuditMapper, private readonly cartItemMapper: CartItemMapper) {}
constructor(
private readonly auditMapper: AuditMapper,
private readonly cartItemMapper: CartItemMapper,
private readonly orderStatusMapper: OrderStatusMapper,
) {}
toPersistence(entity: Order): OrderDataModel {
const { id, state, type, merchantId, total, discount, orderManagerId, audit, cartItems } = entity;
const {
Expand All @@ -20,7 +25,7 @@ export class OrderMapper implements IMapper<Order, OrderDataModel> {
} = audit;
const orderDocument: OrderDataModel = {
_id: id,
state,
state: this.orderStatusMapper.toPersistence(state),
type,
merchantId,
total,
Expand All @@ -41,7 +46,7 @@ export class OrderMapper implements IMapper<Order, OrderDataModel> {
const { state, type, merchantId, total, discount, orderManagerId, _id, cartItems } = model;
const entity: Order = Order.create(
{
state,
state: this.orderStatusMapper.toDomain(state),
type,
merchantId,
total,
Expand Down
9 changes: 9 additions & 0 deletions backend/src/order/order.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ import { OrderMapper } from './order.mapper';
import { OrderService } from './order.service';
import { OrderController } from './order.controller';
import { ContextMiddleWare } from 'src/infrastructure/middlewares';
import { OrderStatusRepository } from 'src/infrastructure/data_access/repositories/order-status.repository';
import {
OrderStatusModel,
OrderStatusSchema,
} from 'src/infrastructure/data_access/repositories/schemas/order-status.schema';
import { OrderStatusMapper } from 'src/order_statuses/order_status.mapper';

@Module({
imports: [
Expand All @@ -37,6 +43,7 @@ import { ContextMiddleWare } from 'src/infrastructure/middlewares';
{ name: ItemDataModel.name, schema: ItemSchema },
{ name: CartItemDataModel.name, schema: CartItemSchema },
{ name: SelectedCartItemDataModel.name, schema: SelectedCartItemSchema },
{ name: OrderStatusModel.name, schema: OrderStatusSchema },
]),
],
controllers: [OrderController],
Expand All @@ -47,6 +54,7 @@ import { ContextMiddleWare } from 'src/infrastructure/middlewares';
{ provide: TYPES.IMerchantService, useClass: MerchantService },
{ provide: TYPES.IContextService, useClass: ContextService },
{ provide: TYPES.IValidateUser, useClass: ValidateUser },
{ provide: TYPES.IOrderStatusRepository, useClass: OrderStatusRepository },
MerchantRepository,
CartItemRepository,
SelectedCartItemRepository,
Expand All @@ -56,6 +64,7 @@ import { ContextMiddleWare } from 'src/infrastructure/middlewares';
JwtService,
MerchantMapper,
AuditMapper,
OrderStatusMapper,
],
})
export class OrderModule implements NestModule {
Expand Down
Loading