feat: implement session management with SessionService and SessionPlugin; refactor query execution to handle session cookies; update token and query handling for improved session tracking

This commit is contained in:
Boris D
2025-10-10 14:03:21 +03:00
parent 5513dccc11
commit 210253628c
13 changed files with 205 additions and 25 deletions

View File

@ -0,0 +1,57 @@
import { Query } from "src/query/entities/query.entity";
import { Plugin } from "../plugin.class";
import { QueryExecuterService } from "src/query/executer/query.executer.service";
export class SessionPlugin extends Plugin {
constructor(
name: string,
private query: Query,
private queryExecuterService: QueryExecuterService,
private session: Record<string, any>
) {
super(name, ["get", "set", "delete"]);
}
static async init(
query: Query,
queryExecuterService: QueryExecuterService,
sessionId: string | null
) {
const session = await queryExecuterService.sessionService.get(
sessionId,
query.project.id
);
return new SessionPlugin("session", query, queryExecuterService, session);
}
async get(property: string): Promise<any> {
this.session = await this.queryExecuterService.sessionService.get(
this.session?.sessionId,
this.query.project.id
);
return this.session[property];
}
async set(property: string, data: any): Promise<void> {
this.session[property] = data;
await this.queryExecuterService.sessionService.set(
this.session?.sessionId,
this.query.project.id,
this.session
);
}
async delete(): Promise<void> {
return await this.queryExecuterService.sessionService.delete(
this.session?.sessionId,
this.query.project.id
);
}
onFinish() {
// No resources to clean up
}
}