Skip to content

Commit ccd9916

Browse files
committed
fix query, and optimize retrieving specific endpoint
1 parent 3bfad2f commit ccd9916

File tree

1 file changed

+20
-19
lines changed
  • backend/src/services/get-endpoints

1 file changed

+20
-19
lines changed

backend/src/services/get-endpoints/index.ts

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,42 +55,43 @@ export class GetEndpointsService {
5555
const queryRunner = AppDataSource.createQueryRunner()
5656
try {
5757
await queryRunner.connect()
58-
let whereFilter = ''
58+
let whereFilter = []
59+
let whereFilterString = ''
5960
let argNumber = 1
6061
const parameters = []
6162

6263
if (getEndpointParams?.hosts) {
63-
whereFilter += `endpoint.host = ANY($${argNumber++})\n`
64+
whereFilter.push(`endpoint.host = ANY($${argNumber++})`)
6465
parameters.push(getEndpointParams.hosts)
6566
}
6667
if (getEndpointParams?.riskScores) {
67-
whereFilter += `endpoint."riskScore" = ANY($${argNumber++})\n`
68+
whereFilter.push(`endpoint."riskScore" = ANY($${argNumber++})`)
6869
parameters.push(getEndpointParams.riskScores)
6970
}
7071
if (getEndpointParams?.dataClasses) {
71-
whereFilter += `data_field."dataClasses" && $${argNumber++}\n`
72+
whereFilter.push(`data_field."dataClasses" && $${argNumber++}`)
7273
parameters.push(getEndpointParams.dataClasses)
7374
}
7475
if (getEndpointParams?.searchQuery) {
75-
whereFilter += `endpoint.path ILIKE $${argNumber++}\n`
76+
whereFilter.push(`endpoint.path ILIKE $${argNumber++}`)
7677
parameters.push(`%${getEndpointParams.searchQuery}%`)
7778
}
78-
if (getEndpointParams?.isAuthenticatedDetected) {
79-
const isAuthenticated = getEndpointParams.isAuthenticatedDetected
79+
if (getEndpointParams?.isAuthenticated) {
80+
const isAuthenticated = getEndpointParams.isAuthenticated
8081
if (String(isAuthenticated) === 'true') {
81-
whereFilter += '(endpoint."isAuthenticatedDetected" = TRUE AND endpoint."isAuthenticatedUserSet" = TRUE)'
82+
whereFilter.push('(endpoint."isAuthenticatedUserSet" = TRUE OR (endpoint."isAuthenticatedDetected" = TRUE AND (endpoint."isAuthenticatedUserSet" IS NULL OR endpoint."isAuthenticatedUserSet" = TRUE)))')
8283
} else {
83-
whereFilter += '(endpoint."isAuthenticatedDetected" = FALSE OR endpoint."isAuthenticatedUserSet" = FALSE)'
84+
whereFilter.push('(endpoint."isAuthenticatedUserSet" = FALSE OR (endpoint."isAuthenticatedDetected" = FALSE AND (endpoint."isAuthenticatedUserSet" IS NULL OR endpoint."isAuthenticatedUserSet" = FALSE)))')
8485
}
8586
}
8687
if (whereFilter.length > 0) {
87-
whereFilter = `WHERE ${whereFilter}`
88+
whereFilterString = `WHERE ${whereFilter.join(" AND ")}`
8889
}
8990
const limitFilter = `LIMIT ${getEndpointParams?.limit ?? 10}`
9091
const offsetFilter = `OFFSET ${getEndpointParams?.offset ?? 10}`
9192

92-
const endpointResults = await queryRunner.query(getEndpointsQuery(whereFilter, limitFilter, offsetFilter), parameters)
93-
const countResults = await queryRunner.query(getEndpointsCountQuery(whereFilter), parameters)
93+
const endpointResults = await queryRunner.query(getEndpointsQuery(whereFilterString, limitFilter, offsetFilter), parameters)
94+
const countResults = await queryRunner.query(getEndpointsCountQuery(whereFilterString), parameters)
9495

9596
return [endpointResults, countResults?.[0]?.count]
9697
} catch (err) {
@@ -104,12 +105,10 @@ export class GetEndpointsService {
104105
static async getEndpoint(
105106
endpointId: string,
106107
): Promise<ApiEndpointDetailedResponse> {
108+
const queryRunner = AppDataSource.createQueryRunner()
107109
try {
108-
const apiEndpointRepository = AppDataSource.getRepository(ApiEndpoint)
109-
const apiTraceRepository = AppDataSource.getRepository(ApiTrace)
110-
const apiEndpointTestRepository =
111-
AppDataSource.getRepository(ApiEndpointTest)
112-
const endpoint = await apiEndpointRepository.findOne({
110+
await queryRunner.connect()
111+
const endpoint = await queryRunner.manager.findOne(ApiEndpoint, {
113112
select: {
114113
alerts: {
115114
uuid: true,
@@ -132,12 +131,12 @@ export class GetEndpointsService {
132131
if (!endpoint) {
133132
throw new Error404NotFound("Endpoint does not exist.")
134133
}
135-
const traces = await apiTraceRepository.find({
134+
const traces = await queryRunner.manager.find(ApiTrace, {
136135
where: { apiEndpointUuid: endpoint.uuid },
137136
order: { createdAt: "DESC" },
138137
take: 100,
139138
})
140-
const tests = await apiEndpointTestRepository.find({
139+
const tests = await queryRunner.manager.find(ApiEndpointTest, {
141140
where: { apiEndpoint: { uuid: endpointId } },
142141
})
143142
return {
@@ -148,6 +147,8 @@ export class GetEndpointsService {
148147
} catch (err) {
149148
console.error(`Error in Get Endpoints service: ${err}`)
150149
throw new Error500InternalServer(err)
150+
} finally {
151+
await queryRunner.release()
151152
}
152153
}
153154

0 commit comments

Comments
 (0)