diff --git a/src/controllers/orders.controller.ts b/src/controllers/orders.controller.ts index 2914175..2df33fa 100644 --- a/src/controllers/orders.controller.ts +++ b/src/controllers/orders.controller.ts @@ -240,6 +240,8 @@ class OrdersController { throw new Error('ordersModel.getUserOrders returned Internal error'); } + const { totalItemsCount } = result; + const userOrders = result.data.map((order) => { const mappedOrder: GetUserOrdersResOrderData = { id: order.id, @@ -285,6 +287,7 @@ class OrdersController { res.status(200).send({ success: true, + totalItemsCount, data: userOrders, }); } catch (err) { diff --git a/src/interfaces/responses/orders/GetUserOrdersRes.ts b/src/interfaces/responses/orders/GetUserOrdersRes.ts index 98a6828..960513f 100644 --- a/src/interfaces/responses/orders/GetUserOrdersRes.ts +++ b/src/interfaces/responses/orders/GetUserOrdersRes.ts @@ -55,6 +55,7 @@ export type GetUserOrdersResOrderData = { export type GetUserOrdersSuccessRes = { success: true; + totalItemsCount: number; data: GetUserOrdersResOrderData[]; }; diff --git a/src/models/Orders.ts b/src/models/Orders.ts index ff335c9..f510f38 100644 --- a/src/models/Orders.ts +++ b/src/models/Orders.ts @@ -1,4 +1,4 @@ -import { Op } from 'sequelize'; +import { Op, WhereOptions } from 'sequelize'; import Decimal from 'decimal.js'; import TransactionWithOrders from '@/interfaces/common/Transaction.js'; import Currency from '@/schemes/Currency.js'; @@ -409,6 +409,7 @@ class OrdersModel { } | { success: true; + totalItemsCount: number; data: { id: number; type: string; @@ -436,24 +437,28 @@ class OrdersModel { if (!userRow) throw new Error('Invalid address from token.'); + const ordersSelectWhereClause: WhereOptions = { + user_id: userRow.id, + ...(status !== undefined + ? { + status: + status === 'finished' ? OrderStatus.FINISHED : OrderStatus.ACTIVE, + } + : {}), + ...(type !== undefined + ? { type: type === 'buy' ? OrderType.BUY : OrderType.SELL } + : {}), + ...(date !== undefined + ? { timestamp: { [Op.between]: [date.from, date.to] } } + : {}), + }; + + const totalItemsCount = await Order.count({ + where: ordersSelectWhereClause, + }); + const ordersRows = (await Order.findAll({ - where: { - user_id: userRow.id, - ...(status !== undefined - ? { - status: - status === 'finished' - ? OrderStatus.FINISHED - : OrderStatus.ACTIVE, - } - : {}), - ...(type !== undefined - ? { type: type === 'buy' ? OrderType.BUY : OrderType.SELL } - : {}), - ...(date !== undefined - ? { timestamp: { [Op.between]: [date.from, date.to] } } - : {}), - }, + where: ordersSelectWhereClause, order: [['timestamp', 'DESC']], limit, offset, @@ -487,7 +492,11 @@ class OrdersModel { isInstant: dexModel.isBotActive(e.id), })); - return { success: true, data: result }; + return { + success: true, + totalItemsCount, + data: result, + }; } catch (err) { console.log(err); return { success: false, data: 'Internal error' };