From 247418102207cda1d0b3ac9ed8e5d08a0d578f0e Mon Sep 17 00:00:00 2001 From: Hentry Martin Date: Sat, 16 Aug 2025 00:17:10 +0200 Subject: [PATCH 1/7] fix: paginated copilot request --- src/routes/copilotRequest/list.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/routes/copilotRequest/list.js b/src/routes/copilotRequest/list.js index a36a3d7b..3ca03fa5 100644 --- a/src/routes/copilotRequest/list.js +++ b/src/routes/copilotRequest/list.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import { Op, Sequelize } from 'sequelize'; import models from '../../models'; import util from '../../util'; import { PERMISSION } from '../../permissions/constants'; +import { DEFAULT_PAGE_SIZE } from '../../constants'; module.exports = [ (req, res, next) => { @@ -15,6 +17,10 @@ module.exports = [ return next(err); } + const page = parseInt(req.query.page, 10) || 1; + const pageSize = parseInt(req.query.pageSize, 10) || DEFAULT_PAGE_SIZE; + const offset = (page - 1) * pageSize; + const projectId = _.parseInt(req.params.projectId); let sort = req.query.sort ? decodeURIComponent(req.query.sort) : 'createdAt desc'; @@ -32,16 +38,16 @@ module.exports = [ return models.CopilotRequest.findAll({ where: whereCondition, include: [ - { - model: models.CopilotOpportunity, - as: 'copilotOpportunity', - }, + { model: models.CopilotOpportunity, as: 'copilotOpportunity', required: false }, ], - order: [[sortParams[0], sortParams[1]]], - }) - .then(copilotRequests => res.json(copilotRequests)) - .catch((err) => { - util.handleError('Error fetching copilot requests', err, req, next); - }); + order: [[sortParams[0], sortParams[1]]], // e.g. ['createdAt','DESC'] + limit: perPage, + offset, + }).then((copilotRequests) => util.setPaginationHeaders(req, res, { + count: copilotRequests.count, + rows: copilotRequests, + page, + pageSize, + })); }, ]; From e65a766a62a2b8d14997b1bde7a6cd42876101c6 Mon Sep 17 00:00:00 2001 From: Hentry Martin Date: Sat, 16 Aug 2025 00:17:34 +0200 Subject: [PATCH 2/7] fix: paginated copilot request --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3ae3c51c..5a769156 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -149,7 +149,7 @@ workflows: context : org-global filters: branches: - only: ['develop', 'migration-setup', 'pm-1613'] + only: ['develop', 'migration-setup', 'paginate-copilot-request'] - deployProd: context : org-global filters: From e439cc8368c1d9a715738b5c6101f8b04208ae59 Mon Sep 17 00:00:00 2001 From: Hentry Martin Date: Sat, 16 Aug 2025 00:35:31 +0200 Subject: [PATCH 3/7] fix: paginated copilot request --- src/routes/copilotRequest/list.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/copilotRequest/list.js b/src/routes/copilotRequest/list.js index 3ca03fa5..fa3c12c4 100644 --- a/src/routes/copilotRequest/list.js +++ b/src/routes/copilotRequest/list.js @@ -40,8 +40,8 @@ module.exports = [ include: [ { model: models.CopilotOpportunity, as: 'copilotOpportunity', required: false }, ], - order: [[sortParams[0], sortParams[1]]], // e.g. ['createdAt','DESC'] - limit: perPage, + order: [[sortParams[0], sortParams[1]]], + limit: pageSize, offset, }).then((copilotRequests) => util.setPaginationHeaders(req, res, { count: copilotRequests.count, From e30591f423cee14bd5d1a3cf7d49609e86fe3b9e Mon Sep 17 00:00:00 2001 From: Hentry Martin Date: Sat, 16 Aug 2025 00:56:25 +0200 Subject: [PATCH 4/7] fix: paginated copilot request --- src/routes/copilotRequest/list.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/routes/copilotRequest/list.js b/src/routes/copilotRequest/list.js index fa3c12c4..d22c6041 100644 --- a/src/routes/copilotRequest/list.js +++ b/src/routes/copilotRequest/list.js @@ -35,7 +35,7 @@ module.exports = [ const whereCondition = projectId ? { projectId } : {}; - return models.CopilotRequest.findAll({ + return models.CopilotRequest.findAndCountAll({ where: whereCondition, include: [ { model: models.CopilotOpportunity, as: 'copilotOpportunity', required: false }, @@ -43,8 +43,10 @@ module.exports = [ order: [[sortParams[0], sortParams[1]]], limit: pageSize, offset, - }).then((copilotRequests) => util.setPaginationHeaders(req, res, { - count: copilotRequests.count, + distinct: true, + subQuery: false, + }).then((copilotRequests, count) => util.setPaginationHeaders(req, res, { + count: count, rows: copilotRequests, page, pageSize, From d4a88f4f0ef9eae38e01e102db78ea8e80ba5cc6 Mon Sep 17 00:00:00 2001 From: Hentry Martin Date: Sat, 16 Aug 2025 01:12:27 +0200 Subject: [PATCH 5/7] fix: paginated copilot request --- src/routes/copilotRequest/list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/copilotRequest/list.js b/src/routes/copilotRequest/list.js index d22c6041..bb8e56be 100644 --- a/src/routes/copilotRequest/list.js +++ b/src/routes/copilotRequest/list.js @@ -45,7 +45,7 @@ module.exports = [ offset, distinct: true, subQuery: false, - }).then((copilotRequests, count) => util.setPaginationHeaders(req, res, { + }).then(({rows: copilotRequests, count}) => util.setPaginationHeaders(req, res, { count: count, rows: copilotRequests, page, From 902e2b389e3872d1f8117379e5f85418e5465782 Mon Sep 17 00:00:00 2001 From: Hentry Martin Date: Sun, 17 Aug 2025 09:09:06 +0200 Subject: [PATCH 6/7] fix: add project in copilot request --- src/routes/copilotRequest/list.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/copilotRequest/list.js b/src/routes/copilotRequest/list.js index bb8e56be..27664733 100644 --- a/src/routes/copilotRequest/list.js +++ b/src/routes/copilotRequest/list.js @@ -39,6 +39,7 @@ module.exports = [ where: whereCondition, include: [ { model: models.CopilotOpportunity, as: 'copilotOpportunity', required: false }, + { model: models.Project, as: 'project', required: false }, ], order: [[sortParams[0], sortParams[1]]], limit: pageSize, From 44047b687f8e18dc55edf0e37744c0cd43ed7692 Mon Sep 17 00:00:00 2001 From: Hentry Martin Date: Sun, 17 Aug 2025 23:05:29 +0200 Subject: [PATCH 7/7] fix: added project relation to copilot requests --- src/models/copilotRequest.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/models/copilotRequest.js b/src/models/copilotRequest.js index 7ddb924e..e82be1d3 100644 --- a/src/models/copilotRequest.js +++ b/src/models/copilotRequest.js @@ -32,6 +32,7 @@ module.exports = function defineCopilotRequest(sequelize, DataTypes) { CopliotRequest.associate = (models) => { CopliotRequest.hasMany(models.CopilotOpportunity, { as: 'copilotOpportunity', foreignKey: 'copilotRequestId' }); + CopliotRequest.belongsTo(models.Project, { as: 'project', foreignKey: 'projectId' }); }; return CopliotRequest;