diff --git a/services/api/src/resources/deployment/resolvers.ts b/services/api/src/resources/deployment/resolvers.ts index 28d815518f..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"] } = input; + const { openshifts, deploymentStatus = ["NEW", "PENDING", "RUNNING", "QUEUED"], startDate, endDate, includeDeleted } = input; /* use the same mechanism for viewing all projects @@ -181,13 +181,28 @@ export const getDeploymentsByFilter: ResolverFn = async ( queryBuilder = queryBuilder.whereIn('environment.project', userProjectIds); } + // 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) { 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..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]): [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