import { DatabaseManager } from '@joystream/hydra-common' export type IChangePair = { old: Change | undefined new: Change | undefined } export interface IListener { getRelationDependencies(): string[] hasValueChanged(oldValue: Entity, newValue: Entity): IChangePair | undefined hasValueChanged(oldValue: Entity | undefined, newValue: Entity): IChangePair | undefined hasValueChanged(oldValue: Entity, newValue: Entity | undefined): IChangePair | undefined } export interface IExecutor { loadDerivedEntities(store: DatabaseManager, entity: Entity): Promise saveDerivedEntities(store: DatabaseManager, entities: DerivedEntity[]): Promise updateOldValue(entity: DerivedEntity, change: Change): DerivedEntity updateNewValue(entity: DerivedEntity, change: Change): DerivedEntity } export interface IDerivedPropertiesManager { registerListener(listener: IListener, executors: IExecutor[]): void onMainEntityCreation(entity: Entity): Promise onMainEntityUpdate(newEntity: Entity): Promise onMainEntityUpdate(initialEntity: Entity, newEntity: Entity): Promise onMainEntityDeletion(initialEntity: Entity): Promise }