interfaces.ts 1.3 KB

12345678910111213141516171819202122232425262728
  1. import { DatabaseManager } from '@joystream/hydra-common'
  2. export type IChangePair<Change> = {
  3. old: Change | undefined
  4. new: Change | undefined
  5. }
  6. export interface IListener<Entity, Change> {
  7. getRelationDependencies(): string[]
  8. hasValueChanged(oldValue: Entity, newValue: Entity): IChangePair<Change> | undefined
  9. hasValueChanged(oldValue: Entity | undefined, newValue: Entity): IChangePair<Change> | undefined
  10. hasValueChanged(oldValue: Entity, newValue: Entity | undefined): IChangePair<Change> | undefined
  11. }
  12. export interface IExecutor<Entity, Change, DerivedEntity> {
  13. loadDerivedEntities(store: DatabaseManager, entity: Entity): Promise<DerivedEntity[]>
  14. saveDerivedEntities(store: DatabaseManager, entities: DerivedEntity[]): Promise<void>
  15. updateOldValue(entity: DerivedEntity, change: Change): DerivedEntity
  16. updateNewValue(entity: DerivedEntity, change: Change): DerivedEntity
  17. }
  18. export interface IDerivedPropertiesManager<Entity, Change> {
  19. registerListener(listener: IListener<Entity, Change>, executors: IExecutor<unknown, Change, unknown>[]): void
  20. onMainEntityCreation(entity: Entity): Promise<void>
  21. onMainEntityUpdate(newEntity: Entity): Promise<void>
  22. onMainEntityUpdate(initialEntity: Entity, newEntity: Entity): Promise<void>
  23. onMainEntityDeletion(initialEntity: Entity): Promise<void>
  24. }