Files
bknd/app/src/data/events/index.ts

108 lines
2.8 KiB
TypeScript

import type { PrimaryFieldType } from "core";
import { Event, InvalidEventReturn } from "core/events";
import type { Entity, EntityData } from "../entities";
import type { RepoQuery } from "../server/data-query-impl";
export class MutatorInsertBefore extends Event<{ entity: Entity; data: EntityData }, EntityData> {
static override slug = "mutator-insert-before";
override validate(data: EntityData) {
const { entity } = this.params;
if (!entity.isValidData(data, "create")) {
throw new InvalidEventReturn("EntityData", "invalid");
}
return this.clone({
entity,
data,
});
}
}
export class MutatorInsertAfter extends Event<{
entity: Entity;
data: EntityData;
changed: EntityData;
}> {
static override slug = "mutator-insert-after";
}
export class MutatorUpdateBefore extends Event<
{
entity: Entity;
entityId: PrimaryFieldType;
data: EntityData;
},
EntityData
> {
static override slug = "mutator-update-before";
override validate(data: EntityData) {
const { entity, ...rest } = this.params;
if (!entity.isValidData(data, "update")) {
throw new InvalidEventReturn("EntityData", "invalid");
}
return this.clone({
...rest,
entity,
data,
});
}
}
export class MutatorUpdateAfter extends Event<{
entity: Entity;
entityId: PrimaryFieldType;
data: EntityData;
changed: EntityData;
}> {
static override slug = "mutator-update-after";
}
export class MutatorDeleteBefore extends Event<{ entity: Entity; entityId: PrimaryFieldType }> {
static override slug = "mutator-delete-before";
}
export class MutatorDeleteAfter extends Event<{
entity: Entity;
entityId: PrimaryFieldType;
data: EntityData;
}> {
static override slug = "mutator-delete-after";
}
export const MutatorEvents = {
MutatorInsertBefore,
MutatorInsertAfter,
MutatorUpdateBefore,
MutatorUpdateAfter,
MutatorDeleteBefore,
MutatorDeleteAfter,
};
export class RepositoryFindOneBefore extends Event<{ entity: Entity; options: RepoQuery }> {
static override slug = "repository-find-one-before";
}
export class RepositoryFindOneAfter extends Event<{
entity: Entity;
options: RepoQuery;
data: EntityData;
}> {
static override slug = "repository-find-one-after";
}
export class RepositoryFindManyBefore extends Event<{ entity: Entity; options: RepoQuery }> {
static override slug = "repository-find-many-before";
static another = "one";
}
export class RepositoryFindManyAfter extends Event<{
entity: Entity;
options: RepoQuery;
data: EntityData;
}> {
static override slug = "repository-find-many-after";
}
export const RepositoryEvents = {
RepositoryFindOneBefore,
RepositoryFindOneAfter,
RepositoryFindManyBefore,
RepositoryFindManyAfter,
};