import {v1} from 'uuid'; import SqlSession from "../session/SqlSession"; import DefaultTransactionData from "../data/DefaultTransactionData"; import DefaultTransactionProcessor from "../patterns/DefaultTransactionProcessor"; import {CONNECTION_END_TYPE} from "../@types/types"; import {DefaultRequestSession} from "../session/DefaultRequestSession"; interface REQUEST_SCOPE_DATA{ [scopeid:string]:any } export default class RequestContext { public id?:string; public uuid:string = v1(); public contextMap: REQUEST_SCOPE_DATA = {}; public sqlSession!: SqlSession; public request?: any; public response?: any; public session?: any; public packet?: DefaultTransactionData; public transactionService?: DefaultTransactionProcessor; constructor(request?:any, contextID?:string) { this.request = request; this.id = contextID; if(this.sqlSession){ this.sqlSession.release(); } this.sqlSession = new SqlSession(this); this.session = new DefaultRequestSession(request); this.packet = new DefaultTransactionData(); this.packet.init(request); } public setResponse(res:any) { this.response = res; } public getSession() { return this.session; } public getScopeData(className: string) { return this.contextMap[`${className}`]; } public addScopeData(className: string, data: any) { this.contextMap[`${className}`] = data; } public setTranctionProcesser(processer: DefaultTransactionProcessor) { this.transactionService = processer; } public getTranctionProcesser():DefaultTransactionProcessor|undefined { return this.transactionService; } public getSqlSession(): SqlSession { return this.sqlSession; } public getPacket(){ if (!this.packet) { this.packet = new DefaultTransactionData(); this.packet.init(this.request); } return this.packet; } public async destroy(mode?:CONNECTION_END_TYPE){ if (this.sqlSession) { await this.sqlSession.destroy(mode); } } }