Add basic concepts for event bus, and implement in request and model
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2021-06-04 01:03:31 -05:00
parent dab3d006c8
commit 61731c4ebd
20 changed files with 375 additions and 52 deletions

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right after a model is inserted.
*/
export class ModelCreatedEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right before a model is inserted.
*/
export class ModelCreatingEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right after a model is deleted.
*/
export class ModelDeletedEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right before a model is deleted.
*/
export class ModelDeletingEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,31 @@
import {Model} from '../Model'
import {Event} from '../../../event/Event'
import {JSONState} from '../../../util'
/**
* Base class for events that concern an instance of a model.
*/
export abstract class ModelEvent<T extends Model<T>> extends Event {
/**
* The instance of the model.
*/
public instance!: T
constructor(
instance?: T,
) {
super()
if ( instance ) {
this.instance = instance
}
}
// TODO implement serialization here
dehydrate(): Promise<JSONState> {
return Promise.resolve({})
}
rehydrate(/* state: JSONState */): void | Promise<void> {
return undefined
}
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right after a model's data is loaded from the source.
*/
export class ModelRetrievedEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right after a model is persisted to the source.
*/
export class ModelSavedEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right before a model is persisted to the source.
*/
export class ModelSavingEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right after a model's data is updated.
*/
export class ModelUpdatedEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,9 @@
import {Model} from '../Model'
import {ModelEvent} from './ModelEvent'
/**
* Event fired right before a model's data is updated.
*/
export class ModelUpdatingEvent<T extends Model<T>> extends ModelEvent<T> {
}

View File

@@ -0,0 +1,21 @@
import {ModelCreatedEvent} from './ModelCreatedEvent'
import {ModelUpdatingEvent} from './ModelUpdatingEvent'
import {ModelCreatingEvent} from './ModelCreatingEvent'
import {ModelSavedEvent} from './ModelSavedEvent'
import {ModelDeletedEvent} from './ModelDeletedEvent'
import {ModelDeletingEvent} from './ModelDeletingEvent'
import {ModelRetrievedEvent} from './ModelRetrievedEvent'
import {ModelUpdatedEvent} from './ModelUpdatedEvent'
import {ModelEvent} from './ModelEvent'
export const ModelEvents = {
ModelCreatedEvent,
ModelCreatingEvent,
ModelDeletedEvent,
ModelDeletingEvent,
ModelEvent,
ModelRetrievedEvent,
ModelSavedEvent,
ModelUpdatedEvent,
ModelUpdatingEvent,
}