38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { Actor } from './types/actor.type';
|
|
import ObjectID from 'bson-objectid';
|
|
import { BaseEvent } from './event.base';
|
|
type BaseEntityUpdatedXData = {
|
|
updatedAt: Date;
|
|
updatedBy: Actor;
|
|
} | {
|
|
updatedAt: null;
|
|
updatedBy: null;
|
|
};
|
|
type BaseEntityData = {
|
|
id: ObjectID;
|
|
deleted: boolean;
|
|
createdAt: Date;
|
|
createdBy: Actor;
|
|
} & BaseEntityUpdatedXData;
|
|
type Optional<T> = {
|
|
[K in keyof T]?: T[K];
|
|
};
|
|
export declare class Entity<Data> {
|
|
protected attr: Data & Optional<BaseEntityData>;
|
|
constructor(attr: Data & Optional<BaseEntityData>, actor?: Actor);
|
|
private events;
|
|
protected addEvent(event: BaseEvent<unknown>): void;
|
|
static getEventsToDispatch(entity: Entity<unknown>, fn: (events: BaseEvent<unknown>[]) => void): void;
|
|
private actor?;
|
|
setActor(actor: Actor): void;
|
|
get id(): ObjectID;
|
|
get createdAt(): Date | undefined;
|
|
get createdBy(): Actor | undefined;
|
|
get updatedAt(): Date | null | undefined;
|
|
get updatedBy(): Actor | null | undefined;
|
|
get deleted(): boolean | undefined;
|
|
delete(): void;
|
|
protected set<K extends keyof Data>(key: K, value: Data[K], actor?: Actor): void;
|
|
}
|
|
export {};
|