Refactor event bus and queue system; detect cycles in DI realization and make
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -1,67 +1,17 @@
|
||||
import {Event} from '../../../event/Event'
|
||||
import {Inject, Injectable} from '../../../di'
|
||||
import {InvalidJSONStateError, JSONState} from '../../../util'
|
||||
import {Connection} from '../Connection'
|
||||
import {DatabaseService} from '../../DatabaseService'
|
||||
import {BaseEvent} from '../../../support/bus'
|
||||
|
||||
/**
|
||||
* Event fired when a query is executed.
|
||||
*/
|
||||
@Injectable()
|
||||
export class QueryExecutedEvent extends Event {
|
||||
@Inject()
|
||||
protected database!: DatabaseService
|
||||
|
||||
/**
|
||||
* The name of the connection where the query was executed.
|
||||
* @protected
|
||||
*/
|
||||
public connectionName!: string
|
||||
|
||||
/**
|
||||
* The connection where the query was executed.
|
||||
*/
|
||||
public connection!: Connection
|
||||
|
||||
/**
|
||||
* The query that was executed.
|
||||
*/
|
||||
public query!: string
|
||||
|
||||
export class QueryExecutedEvent extends BaseEvent {
|
||||
constructor(
|
||||
connectionName?: string,
|
||||
connection?: Connection,
|
||||
query?: string,
|
||||
public readonly connectionName: string,
|
||||
public readonly connection: Connection,
|
||||
public readonly query: string,
|
||||
) {
|
||||
super()
|
||||
if ( connectionName ) {
|
||||
this.connectionName = connectionName
|
||||
}
|
||||
|
||||
if ( connection ) {
|
||||
this.connection = connection
|
||||
}
|
||||
|
||||
if ( query ) {
|
||||
this.query = query
|
||||
}
|
||||
}
|
||||
|
||||
async dehydrate(): Promise<JSONState> {
|
||||
return {
|
||||
connectionName: this.connectionName,
|
||||
query: this.query,
|
||||
}
|
||||
}
|
||||
|
||||
rehydrate(state: JSONState): void {
|
||||
if ( !state.connectionName || !state.query ) {
|
||||
throw new InvalidJSONStateError('Missing connectionName or query from QueryExecutedEvent state.')
|
||||
}
|
||||
|
||||
this.query = String(state.query)
|
||||
this.connectionName = String(state.connectionName)
|
||||
this.connection = this.database.get(this.connectionName)
|
||||
}
|
||||
|
||||
eventName = '@extollo/lib.QueryExecutedEvent'
|
||||
}
|
||||
|
||||
38
src/orm/connection/event/QueryExecutedEventSerializer.ts
Normal file
38
src/orm/connection/event/QueryExecutedEventSerializer.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import {BaseSerializer} from '../../../support/bus'
|
||||
import {QueryExecutedEvent} from './QueryExecutedEvent'
|
||||
import {Awaitable, JSONState} from '../../../util'
|
||||
import {Container, Inject, Injectable} from '../../../di'
|
||||
import {DatabaseService} from '../../DatabaseService'
|
||||
import {ObjectSerializer} from '../../../support/bus/serial/decorators'
|
||||
|
||||
export interface QueryExecutedEventSerialPayload extends JSONState {
|
||||
connectionName: string
|
||||
query: string
|
||||
}
|
||||
|
||||
@ObjectSerializer()
|
||||
@Injectable()
|
||||
export class QueryExecutedEventSerializer extends BaseSerializer<QueryExecutedEvent, QueryExecutedEventSerialPayload> {
|
||||
@Inject()
|
||||
protected readonly injector!: Container
|
||||
|
||||
protected decodeSerial(serial: QueryExecutedEventSerialPayload): Awaitable<QueryExecutedEvent> {
|
||||
const connection = this.injector.make<DatabaseService>(DatabaseService).get(serial.connectionName)
|
||||
return new QueryExecutedEvent(serial.connectionName, connection, serial.query)
|
||||
}
|
||||
|
||||
protected encodeActual(actual: QueryExecutedEvent): Awaitable<QueryExecutedEventSerialPayload> {
|
||||
return {
|
||||
connectionName: actual.connectionName,
|
||||
query: actual.query,
|
||||
}
|
||||
}
|
||||
|
||||
protected getName(): string {
|
||||
return '@extollo/lib.QueryExecutedEventSerializer'
|
||||
}
|
||||
|
||||
matchActual(some: QueryExecutedEvent): boolean {
|
||||
return some instanceof QueryExecutedEvent
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user