Skip to content

Commit

Permalink
Merge pull request #76 from ngyngcphu/fix/pagination
Browse files Browse the repository at this point in the history
fix: pagination missing values
  • Loading branch information
HuyDNA authored Dec 20, 2023
2 parents d0d3b82 + 95527e4 commit 1feea77
Show file tree
Hide file tree
Showing 9 changed files with 146 additions and 113 deletions.
8 changes: 4 additions & 4 deletions src/dtos/in/defaultModel.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ export const DefaultModelQueryStringDto = Type.Object({
keyword: Type.Optional(Type.String({ description: 'The substring that the model name should contain' })),
uploaded_after: Type.Optional(
Type.String({
format: 'date-time',
description: 'The time after which the model was uploaded, specified in ISO format',
format: 'date',
description: 'The date after which the model was uploaded, specified in ISO format',
examples: ['2023-12-18']
})
),
uploaded_before: Type.Optional(
Type.String({
format: 'date-time',
description: 'The time before which the model was uploaded, specified in ISO format',
format: 'date',
description: 'The date before which the model was uploaded, specified in ISO format',
examples: ['2023-12-25']
})
),
Expand Down
8 changes: 4 additions & 4 deletions src/dtos/in/order.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ export const CreateOrderInputDto = Type.Object(
export const OrderQueryStringDto = Type.Object({
created_after: Type.Optional(
Type.String({
format: 'date-time',
description: 'The time after which the order was created, specified in ISO format',
format: 'date',
description: 'The date after which the order was created, specified in ISO format',
examples: ['2023-12-18']
})
),
created_before: Type.Optional(
Type.String({
format: 'date-time',
description: 'The time before which the order was created, specified in ISO format',
format: 'date',
description: 'The date before which the order was created, specified in ISO format',
examples: ['2023-12-25']
})
),
Expand Down
8 changes: 4 additions & 4 deletions src/dtos/in/userModel.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ export const UserModelQueryStringDto = Type.Object({
keyword: Type.Optional(Type.String({ description: 'The substring that the model name should contain' })),
uploaded_after: Type.Optional(
Type.String({
format: 'date-time',
description: 'The time after which the model was uploaded, specified in ISO format',
format: 'date',
description: 'The date after which the model was uploaded, specified in ISO format',
examples: ['2023-12-18']
})
),
uploaded_before: Type.Optional(
Type.String({
format: 'date-time',
description: 'The time before which the model was uploaded, specified in ISO format',
format: 'date',
description: 'The date before which the model was uploaded, specified in ISO format',
examples: ['2023-12-25']
})
),
Expand Down
36 changes: 19 additions & 17 deletions src/dtos/out/defaultModelList.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,24 @@ import { Static, Type } from '@sinclair/typebox';

// See https://github.com/sinclairzx81/typebox

export const DefaultModelListResultDto = Type.Array(
Type.Object({
id: Type.String(),
name: Type.String(),
price: Type.Number(),
imageUrl: Type.String(),
category_id: Type.String(),
category: Type.String(),
likesNo: Type.Number(),
uploadTime: Type.String({ format: 'date-time' }),
description: Type.String(),
numberBought: Type.Number(),
subImages: Type.Array(Type.String()),
discount: Type.Optional(Type.Number()),
isDiscontinued: Type.Boolean()
})
);
export const DefaultModelListResultDto = Type.Object({
total: Type.Number({ minimum: 0 }),
models: Type.Array(
Type.Object({
id: Type.String(),
name: Type.String(),
price: Type.Number(),
imageUrl: Type.String(),
category_id: Type.String(),
category: Type.String(),
likesNo: Type.Number(),
uploadTime: Type.String({ format: 'date-time' }),
description: Type.String(),
numberBought: Type.Number(),
subImages: Type.Array(Type.String()),
discount: Type.Optional(Type.Number())
})
)
});

export type DefaultModelListResultDto = Static<typeof DefaultModelListResultDto>;
39 changes: 21 additions & 18 deletions src/dtos/out/orderListResult.dto.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
import { Status } from '@prisma/client';
import { Static, Type } from '@sinclair/typebox';

export const OrderListResultDto = Type.Array(
Type.Object({
id: Type.String(),
userId: Type.String(),
totalPrice: Type.Number(),
shippingFee: Type.Number(),
estimatedDeliveryTime: Type.String({ format: 'date-time' }),
status: Type.Union(Object.values(Status).map((e) => Type.Literal(e))),
district: Type.String(),
ward: Type.String(),
street: Type.String(),
streetNo: Type.String(),
creationTime: Type.String({ format: 'date-time' }),
isPaid: Type.Boolean(),
note: Type.Optional(Type.String()),
digitalOrderId: Type.Optional(Type.String())
})
);
export const OrderListResultDto = Type.Object({
total: Type.Number({ minimum: 0 }),
orders: Type.Array(
Type.Object({
id: Type.String(),
userId: Type.String(),
totalPrice: Type.Number(),
shippingFee: Type.Number(),
estimatedDeliveryTime: Type.String({ format: 'date-time' }),
status: Type.Union(Object.values(Status).map((e) => Type.Literal(e))),
district: Type.String(),
ward: Type.String(),
street: Type.String(),
streetNo: Type.String(),
creationTime: Type.String({ format: 'date-time' }),
isPaid: Type.Boolean(),
note: Type.Optional(Type.String()),
digitalOrderId: Type.Optional(Type.String())
})
)
});

export type OrderListResultDto = Static<typeof OrderListResultDto>;
19 changes: 11 additions & 8 deletions src/dtos/out/userModelList.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ import { Static, Type } from '@sinclair/typebox';

// See https://github.com/sinclairzx81/typebox

export const UserModelListResultDto = Type.Array(
Type.Object({
id: Type.String(),
name: Type.String(),
price: Type.Number(),
uploadTime: Type.String({ format: 'date-time' })
})
);
export const UserModelListResultDto = Type.Object({
total: Type.Number({ minimum: 0 }),
models: Type.Array(
Type.Object({
id: Type.String(),
name: Type.String(),
price: Type.Number(),
uploadTime: Type.String({ format: 'date-time' })
})
)
});

export type UserModelListResultDto = Static<typeof UserModelListResultDto>;
69 changes: 37 additions & 32 deletions src/handlers/defaultModel.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import { UpdateDefaultModelInputDto } from '@dtos/in';
import { logger } from '@utils';

const getAll: Handler<DefaultModelListResultDto, { Querystring: DefaultModelQueryStringDto }> = async (req) => {
const totalModels = await prisma.defaultModel.count();

try {
logger.error(req.query.orderBy);
logger.error(req.query.order);
Expand Down Expand Up @@ -55,41 +57,44 @@ const getAll: Handler<DefaultModelListResultDto, { Querystring: DefaultModelQuer
}
}
},
orderBy: [
{
likesNo: req.query.orderBy === 'likesNo' ? req.query.order || 'asc' : undefined
},
{
model: {
uploadTime: req.query.orderBy === 'uploadedTime' ? req.query.order || 'asc' : undefined,
price: req.query.orderBy === 'price' ? req.query.order || 'asc' : undefined,
name: req.query.orderBy === 'name' ? req.query.order || 'asc' : undefined,
boughtAmount: req.query.orderBy === 'numberBought' ? req.query.order || 'asc' : undefined
}
}
],
orderBy: {
likesNo: req.query.orderBy === 'likesNo' ? req.query.order || 'desc' : undefined,
model:
req.query.orderBy !== 'likesNo'
? {
uploadTime: req.query.orderBy === 'uploadedTime' ? req.query.order || 'desc' : undefined,
price: req.query.orderBy === 'price' ? req.query.order || 'asc' : undefined,
name: req.query.orderBy === 'name' ? req.query.order || 'asc' : undefined,
boughtAmount: req.query.orderBy === 'numberBought' ? req.query.order || 'desc' : undefined
}
: undefined
},
skip: req.query.start,
take: req.query.noItems
});

return defaultModels.map((model) => ({
id: model.model_id,
category_id: model.category_id,
category: model.Category.name,
imageUrl: model.imageUrl,
likesNo: model.likesNo,
name: model.model.name,
price: model.model.price,
uploadTime: model.model.uploadTime.toISOString(),
description: model.model.description,
numberBought: model.model.boughtAmount,
subImages: model.subImageUrls,
discount: model.model.ModelPromotion?.discount,
isDiscontinued: model.isDiscontinued
}));
return {
total: totalModels,
models: defaultModels.map((model) => ({
id: model.model_id,
category_id: model.category_id,
category: model.Category.name,
imageUrl: model.imageUrl,
likesNo: model.likesNo,
name: model.model.name,
price: model.model.price,
uploadTime: model.model.uploadTime.toISOString(),
description: model.model.description,
numberBought: model.model.boughtAmount,
subImages: model.subImageUrls,
discount: model.model.ModelPromotion?.discount
}))
};
} catch (e) {
logger.error(e);
return [];
return {
total: totalModels,
models: []
};
}
};

Expand Down Expand Up @@ -152,8 +157,8 @@ const get: Handler<DefaultModelResultDto, { Params: { id: string } }> = async (r
};
};

const upload: Handler<DefaultModelListResultDto, { Body: UploadDefaultModelInputDto }> = async (req) => {
const outputList: DefaultModelListResultDto = [];
const upload: Handler<DefaultModelListResultDto['models'], { Body: UploadDefaultModelInputDto }> = async (req) => {
const outputList: DefaultModelListResultDto['models'] = [];
const inputList = req.body;

try {
Expand Down
46 changes: 29 additions & 17 deletions src/handlers/order.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ const getOrders: Handler<OrderListResultDto, { Querystring: OrderQueryStringDto
return res.badRequest(USER_NOT_FOUND);
}

const totalOrders = await prisma.order.count({
where: {
user_id: user.role === UserRole.MANAGER ? req.query.userId : userId
}
});

try {
const orders = await prisma.order.findMany({
select: {
Expand Down Expand Up @@ -125,24 +131,30 @@ const getOrders: Handler<OrderListResultDto, { Querystring: OrderQueryStringDto
take: req.query.noItems
});

return orders.map((order) => ({
creationTime: order.creation_time.toISOString(),
digitalOrderId: order.digital_order_id || undefined,
district: order.district,
estimatedDeliveryTime: order.est_deli_time.toISOString(),
id: order.id,
isPaid: order.isPaid,
shippingFee: order.shipping_fee,
status: order.status,
street: order.street,
streetNo: order.streetNo,
totalPrice: order.total_price,
ward: order.ward,
note: order.extra_note || undefined,
userId: order.user_id
}));
return {
total: totalOrders,
orders: orders.map((order) => ({
creationTime: order.creation_time.toISOString(),
digitalOrderId: order.digital_order_id || undefined,
district: order.district,
estimatedDeliveryTime: order.est_deli_time.toISOString(),
id: order.id,
isPaid: order.isPaid,
shippingFee: order.shipping_fee,
status: order.status,
street: order.street,
streetNo: order.streetNo,
totalPrice: order.total_price,
ward: order.ward,
note: order.extra_note || undefined,
userId: order.user_id
}))
};
} catch (e) {
return [];
return {
total: totalOrders,
orders: []
};
}
};

Expand Down
26 changes: 17 additions & 9 deletions src/handlers/userModel.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ const getAll: Handler<UserModelListResultDto, { Querystring: UserModelQueryStrin
}
});

const totalModels = await prisma.uploadedModel.count();

try {
const userModels = await prisma.uploadedModel.findMany({
select: {
Expand Down Expand Up @@ -55,14 +57,20 @@ const getAll: Handler<UserModelListResultDto, { Querystring: UserModelQueryStrin
take: req.query.noItems
});

return userModels.map((model) => ({
id: model.model_id,
name: model.model.name,
price: model.model.price,
uploadTime: model.model.uploadTime.toISOString()
}));
return {
total: totalModels,
models: userModels.map((model) => ({
id: model.model_id,
name: model.model.name,
price: model.model.price,
uploadTime: model.model.uploadTime.toISOString()
}))
};
} catch (e) {
return [];
return {
total: totalModels,
models: []
};
}
};

Expand Down Expand Up @@ -101,9 +109,9 @@ const get: Handler<UserModelResultDto, { Params: { id: string } }> = async (req,
};
};

const upload: Handler<UserModelListResultDto, { Body: UploadUserModelInputDto }> = async (req, res) => {
const upload: Handler<UserModelListResultDto['models'], { Body: UploadUserModelInputDto }> = async (req, res) => {
const userId = req.userId;
const outputList: UserModelListResultDto = [];
const outputList: UserModelListResultDto['models'] = [];
const inputList = req.body;

try {
Expand Down

0 comments on commit 1feea77

Please sign in to comment.