Skip to content

Commit 9e18235

Browse files
committed
refactor: adjust route endpoints to use less ids for inputs
1 parent 17d469a commit 9e18235

File tree

9 files changed

+416
-112
lines changed

9 files changed

+416
-112
lines changed

services/api/database/migrations/20250925000000_routes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ exports.up = async function(knex) {
88
return knex.schema
99
.createTable('routes', function (table) {
1010
table.increments('id').notNullable().primary();
11+
table.timestamp('created').notNullable().defaultTo(knex.fn.now());
12+
table.timestamp('updated').notNullable().defaultTo(knex.fn.now());
1113
table.string('domain', 300).notNullable();
1214
table.integer('project').notNullable();
1315
table.integer('environment');

services/api/src/resolvers.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ const {
311311
} = require('./resources/env-variables/resolvers');
312312

313313
const {
314-
addRoute,
314+
addRouteToProject,
315315
deleteRoute,
316316
getRoutesByProjectId,
317317
getRoutesByEnvironmentId,
@@ -324,6 +324,8 @@ const {
324324
removeRouteAnnotation,
325325
addPathRoutesToRoute,
326326
removePathRouteFromRoute,
327+
addOrUpdateRouteToEnvironment,
328+
removeRouteFromEnvironment,
327329
} = require('./resources/routes/resolvers');
328330

329331
async function getResolvers() {
@@ -554,6 +556,8 @@ async function getResolvers() {
554556
alternativeNames: getAlternateRoutesByRouteId,
555557
annotations: getRouteAnnotationsByRouteId,
556558
pathRoutes: getPathRoutesByRouteId,
559+
environment: getEnvironmentById,
560+
project: getProjectById,
557561
},
558562
Organization: {
559563
groups: getGroupsByOrganizationId,
@@ -844,7 +848,9 @@ async function getResolvers() {
844848
deleteHistoryRetentionPolicy,
845849
addHistoryRetentionPolicyLink,
846850
removeHistoryRetentionPolicyLink,
847-
addRoute,
851+
addRouteToProject,
852+
addOrUpdateRouteToEnvironment,
853+
removeRouteFromEnvironment,
848854
addRouteAlternativeDomains,
849855
removeRouteAlternativeDomain,
850856
deleteRoute,

services/api/src/resources/environment/helpers.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Sql as problemSql } from '../problem/sql';
77
import { Sql as factSql } from '../fact/sql';
88
// import { Sql as backupSql } from '../backup/sql';
99
import { Helpers as projectHelpers } from '../project/helpers';
10+
import { Helpers as routeHelpers } from '../routes/helpers';
1011
import { HistoryRetentionEnforcer } from '../retentionpolicy/history';
1112
import { logger } from '../../loggers/logger';
1213

@@ -91,6 +92,12 @@ export const Helpers = (sqlClientPool: Pool) => {
9192
problemSql.deleteProblemsForEnvironment(eid)
9293
);
9394

95+
// delete any autogenerated routes from the api for this environment
96+
await routeHelpers(sqlClientPool).deleteEnvironmentAutogeneratedRoutes(eid)
97+
// remove all remaining route associations from environment
98+
// but leave the routes in the api attached to the project
99+
await routeHelpers(sqlClientPool).removeAllRoutesFromEnvironment(eid)
100+
94101
// delete the environment backups rows
95102
// logger.debug(`deleting environment ${name}/id:${eid}/project:${pid} environment backups`)
96103
// @TODO: this could be done here, but it would mean that to recover all the backup ids of a deleted environment

services/api/src/resources/environment/resolvers.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,19 @@ export const getEnvironmentByName: ResolverFn = async (
4646
};
4747

4848
export const getEnvironmentById = async (
49-
root,
49+
eid,
5050
args,
5151
{ sqlClientPool, hasPermission, adminScopes }
5252
) => {
53-
const environment = await Helpers(sqlClientPool).getEnvironmentById(args.id);
53+
// handle dealing with arg or passthrough
54+
let environmentId = args.id
55+
if (eid) {
56+
environmentId = eid.id
57+
}
58+
if (eid == null && !args.id) {
59+
return null;
60+
}
61+
const environment = await Helpers(sqlClientPool).getEnvironmentById(environmentId);
5462

5563
if (!environment) {
5664
return null;
@@ -1059,10 +1067,7 @@ export const getEnvironmentServicesByEnvironmentId: ResolverFn = async (
10591067
args,
10601068
{ sqlClientPool }
10611069
) => {
1062-
const rows = await query(
1063-
sqlClientPool,
1064-
Sql.selectServicesByEnvironmentId(eid)
1065-
);
1070+
const rows = await Helpers(sqlClientPool).getEnvironmentServices(eid)
10661071
return rows;
10671072
};
10681073

services/api/src/resources/routes/helpers.ts

Lines changed: 52 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,56 @@
1-
export type RouteAnnotation = {
2-
key: string;
3-
value: string;
4-
};
1+
import { Pool } from 'mariadb';
2+
import { query } from '../../util/db';
3+
import { Sql } from './sql';
4+
import { Helpers as environmentHelpers } from '../environment/helpers';
5+
import { Helpers as projectHelpers } from '../project/helpers';
56

6-
export type RouteAnnotations = RouteAnnotation[];
7+
import { RouteAnnotations, PathRoutes } from './types';
8+
9+
export const Helpers = (sqlClientPool: Pool) => {
10+
const removeAllRoutesFromEnvironment = async (environmentId: number) => {
11+
await query(
12+
sqlClientPool,
13+
Sql.removeAllRoutesFromEnvironment(environmentId)
14+
)
15+
}
16+
const deleteEnvironmentAutogeneratedRoutes = async (environmentId: number) => {
17+
await query(
18+
sqlClientPool,
19+
Sql.deleteEnvironmentAutogeneratedRoutes(environmentId)
20+
)
21+
}
22+
const removeRouteFromEnvironment = async (domain: string, environmentId: number) => {
23+
const routes = await query(
24+
sqlClientPool,
25+
Sql.selectRoutesByDomainAndEnvironmentID(domain, environmentId)
26+
)
27+
if (routes.length == 0) {
28+
throw Error(`Route doesn't exist on this environment`)
29+
}
30+
const route = routes[0]
31+
if (route.autogenerated == true) {
32+
throw Error(`Cannot remove autogenerated routes`)
33+
}
34+
await query(
35+
sqlClientPool,
36+
Sql.updateRoute({
37+
id: route.id,
38+
patch: {
39+
environment: null,
40+
service: null,
41+
pathRoutes: null,
42+
}
43+
})
44+
);
45+
return route.id
46+
};
47+
48+
return {
49+
removeAllRoutesFromEnvironment,
50+
deleteEnvironmentAutogeneratedRoutes,
51+
removeRouteFromEnvironment,
52+
}
53+
}
754

855
export function addAnnotation(
956
annotations: RouteAnnotations,
@@ -30,13 +77,6 @@ export function removeAnnotation(
3077
);
3178
}
3279

33-
export type PathRoute = {
34-
toService: string;
35-
path: string;
36-
};
37-
38-
export type PathRoutes = PathRoute[];
39-
4080
export function addServicePathRoute(
4181
pathRoutes: PathRoutes,
4282
newToService: string,

0 commit comments

Comments
 (0)