feat: add isAdmin column to token entity; implement migration for isAdmin; enhance logging and error handling in query execution; update query plugin to support new logging structure

This commit is contained in:
lborv
2025-10-11 17:59:06 +03:00
parent 57e4a8b932
commit 08a62fa2c5
13 changed files with 135 additions and 55 deletions

View File

@ -15,6 +15,7 @@ import { QueryExecuterService } from "../executer/query.executer.service";
import { QueryGuard } from "src/query/guards/query.guard";
import { LoggerService } from "../logger/logger.service";
import { TLogType } from "../logger/logger.types";
import { QueryResponse } from "src/vm/vm.constants";
@UseGuards(ApiTokenGuard)
export abstract class BaseQueryController {
@ -53,6 +54,7 @@ export abstract class BaseQueryController {
@Headers() headers: Record<string, any>,
@Res() res: Response
) {
let queryResult: QueryResponse;
const loggerTraceId =
headers["x-trace-id"] || LoggerService.generateTraceId();
const log = LoggerService.log(
@ -69,20 +71,35 @@ export abstract class BaseQueryController {
{ content: "", type: TLogType.info, timeStamp: new Date().getTime() }
);
const queryResult = await this.queryExecuterService.runQueryQueued(
id,
query,
log,
headers,
headers.cookie.split("; ").reduce((acc, cookie) => {
const [key, value] = cookie.split("=");
acc[key] = value;
return acc;
}, {})
);
try {
queryResult = await this.queryExecuterService.runQueryQueued(
id,
query,
log,
headers,
headers.cookie.split("; ").reduce((acc, cookie) => {
const [key, value] = cookie.split("=");
acc[key] = value;
return acc;
}, {})
);
} catch (error) {
log.content.push({
content: `Query execution failed: ${error.message}`,
type: TLogType.error,
timeStamp: new Date().getTime(),
});
log.endTime = new Date().getTime();
await this.loggerService.create(log.traceId, log);
res.status(500).send({ error: "Internal Server Error" });
return;
}
if (queryResult?.log) {
queryResult.log.endTime = new Date().getTime();
const res = JSON.parse(JSON.stringify(queryResult));
delete res.log;
queryResult.log.response = res;
await this.loggerService.create(queryResult.log.traceId, queryResult.log);
}