From b17d3d5915a916de36eb7011b8219df829798a2e Mon Sep 17 00:00:00 2001 From: shreddedbacon Date: Tue, 7 Jan 2025 09:38:07 +1100 Subject: [PATCH 1/2] feat: more filters for deploymentsByFilter --- .../api/src/resources/deployment/resolvers.ts | 20 +++++++++++++++++-- services/api/src/typeDefs.js | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/services/api/src/resources/deployment/resolvers.ts b/services/api/src/resources/deployment/resolvers.ts index 28d815518f..84a81fbc98 100644 --- a/services/api/src/resources/deployment/resolvers.ts +++ b/services/api/src/resources/deployment/resolvers.ts @@ -151,7 +151,7 @@ export const getDeploymentsByFilter: ResolverFn = async ( { sqlClientPool, hasPermission, models, keycloakGrant, keycloakUsersGroups, adminScopes } ) => { - const { openshifts, deploymentStatus = ["NEW", "PENDING", "RUNNING", "QUEUED"] } = input; + const { openshifts, deploymentStatus = ["NEW", "PENDING", "RUNNING", "QUEUED"], month, includeDeleted } = input; /* use the same mechanism for viewing all projects @@ -181,13 +181,29 @@ export const getDeploymentsByFilter: ResolverFn = async ( queryBuilder = queryBuilder.whereIn('environment.project', userProjectIds); } + // collect builds for a specific year/month + if (month) { + queryBuilder = queryBuilder.andWhere( + knex.raw(`YEAR(deployment.created) = YEAR(STR_TO_DATE(?, '%Y-%m'))`, month), + ) + .andWhere( + knex.raw(`MONTH(deployment.created) = MONTH(STR_TO_DATE(?, '%Y-%m'))`, month), + ); + } + if(openshifts) { queryBuilder = queryBuilder.whereIn('environment.openshift', openshifts); } queryBuilder = queryBuilder.whereIn('deployment.status', deploymentStatus); - queryBuilder = queryBuilder.where('environment.deleted', '=', '0000-00-00 00:00:00'); + // if includeDeleted is false, exclude deleted environments in the results (default) + if (!includeDeleted) { + queryBuilder = queryBuilder.where('environment.deleted', '=', '0000-00-00 00:00:00'); + } + + // exclude results where a project doesn't exist + queryBuilder = queryBuilder.whereRaw('environment.project IN (SELECT id FROM project)') const queryBuilderString = queryBuilder.toString(); diff --git a/services/api/src/typeDefs.js b/services/api/src/typeDefs.js index b3fb60c37c..433f641188 100644 --- a/services/api/src/typeDefs.js +++ b/services/api/src/typeDefs.js @@ -1350,7 +1350,7 @@ const typeDefs = gql` deploymentByRemoteId(id: String): Deployment deploymentByName(input: DeploymentByNameInput): Deployment deploymentsByBulkId(bulkId: String): [Deployment] - deploymentsByFilter(openshifts: [Int], deploymentStatus: [DeploymentStatusType]): [Deployment] + deploymentsByFilter(openshifts: [Int], deploymentStatus: [DeploymentStatusType], month: Date, includeDeleted: Boolean): [Deployment] taskByTaskName(taskName: String): Task taskByRemoteId(id: String): Task taskById(id: Int): Task From 4c153f29ccebc32db3ef26f5724739e812ee7bb4 Mon Sep 17 00:00:00 2001 From: shreddedbacon Date: Wed, 12 Feb 2025 10:04:05 +1100 Subject: [PATCH 2/2] feat: more filters for deploymentsByFilter --- .../api/src/resources/deployment/resolvers.ts | 17 ++++++++--------- services/api/src/typeDefs.js | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/services/api/src/resources/deployment/resolvers.ts b/services/api/src/resources/deployment/resolvers.ts index 84a81fbc98..5a24e088a1 100644 --- a/services/api/src/resources/deployment/resolvers.ts +++ b/services/api/src/resources/deployment/resolvers.ts @@ -151,7 +151,7 @@ export const getDeploymentsByFilter: ResolverFn = async ( { sqlClientPool, hasPermission, models, keycloakGrant, keycloakUsersGroups, adminScopes } ) => { - const { openshifts, deploymentStatus = ["NEW", "PENDING", "RUNNING", "QUEUED"], month, includeDeleted } = input; + const { openshifts, deploymentStatus = ["NEW", "PENDING", "RUNNING", "QUEUED"], startDate, endDate, includeDeleted } = input; /* use the same mechanism for viewing all projects @@ -181,14 +181,13 @@ export const getDeploymentsByFilter: ResolverFn = async ( queryBuilder = queryBuilder.whereIn('environment.project', userProjectIds); } - // collect builds for a specific year/month - if (month) { - queryBuilder = queryBuilder.andWhere( - knex.raw(`YEAR(deployment.created) = YEAR(STR_TO_DATE(?, '%Y-%m'))`, month), - ) - .andWhere( - knex.raw(`MONTH(deployment.created) = MONTH(STR_TO_DATE(?, '%Y-%m'))`, month), - ); + // collect builds for a specific date range + if (startDate) { + queryBuilder = queryBuilder.where('deployment.created', '>=', input.startDate); + } + + if (endDate) { + queryBuilder = queryBuilder.where('deployment.created', '<=', input.endDate); } if(openshifts) { diff --git a/services/api/src/typeDefs.js b/services/api/src/typeDefs.js index 433f641188..cf5fb26e39 100644 --- a/services/api/src/typeDefs.js +++ b/services/api/src/typeDefs.js @@ -1350,7 +1350,7 @@ const typeDefs = gql` deploymentByRemoteId(id: String): Deployment deploymentByName(input: DeploymentByNameInput): Deployment deploymentsByBulkId(bulkId: String): [Deployment] - deploymentsByFilter(openshifts: [Int], deploymentStatus: [DeploymentStatusType], month: Date, includeDeleted: Boolean): [Deployment] + deploymentsByFilter(openshifts: [Int], deploymentStatus: [DeploymentStatusType], startDate: Date, endDate: Date, includeDeleted: Boolean): [Deployment] taskByTaskName(taskName: String): Task taskByRemoteId(id: String): Task taskById(id: Int): Task