@pashoo2/clean-architecture-boilerplate
Version:
Clean architecture boilerplate
38 lines (37 loc) • 2.31 kB
TypeScript
import { ENTITY_TYPE_PREFIX } from '../../entities/constants/entityType';
import { IBaseEntityEventsList } from '../../entities/interfaces/baseEntity';
import { IDomainEventFailed, IDomainEventListener, IDomainFailedEventListener, TGetEvents, TGetEventsNames } from '../../events/interfaces';
import { IComparable } from '../../interfaces/comparison';
import { ITransferable } from '../../interfaces/transferable';
import { TIdentityValueObject } from '../../valueObjects/interfaces/identityValueObject';
export declare type TEntityTypeMain<T extends string = string> = `${typeof ENTITY_TYPE_PREFIX}__${T}`;
export interface IEntity<Id extends TIdentityValueObject, Type extends string> {
readonly id: Id;
readonly type: Type;
readonly isDeleted: boolean;
}
export interface IEntityImplementationMethods<Id extends TIdentityValueObject, Type extends string, E extends IBaseEntityEventsList<Id, Type>> {
emit<Event extends TGetEvents<E>>(event: Event): void;
emitEventFailed<Ev extends TGetEvents<E>>(eventFailed: IDomainEventFailed<Ev>): void;
subscribe<N extends TGetEventsNames<E>>(eventName: N, eventListener: IDomainEventListener<E[N]>): void;
subscribeOnFailed<N extends TGetEventsNames<E>>(eventName: N, eventListener: IDomainFailedEventListener<E[N]>): void;
unsubscribe<N extends TGetEventsNames<E>>(eventName: N, eventListener: IDomainEventListener<E[N]>): void;
}
export declare type TEntityImplementation<Id extends TIdentityValueObject, Type extends string, E extends IBaseEntityEventsList<Id, Type>, Entity extends IEntity<Id, Type> = IEntity<Id, Type>> = Entity & IComparable<Entity> & ITransferable & IEntityImplementationMethods<Id, Type, E>;
export interface IEntityImplementationWithInitialization {
/**
* This is special public method for performing
* an initialization an instance
*
* @memberof IEntityImplementationWithInitialization
*/
$initializeInstance(): void;
}
export interface IEntityImplementationWithDeleteMethod<Id extends TIdentityValueObject, Type extends string, E extends IBaseEntityEventsList<Id, Type>> extends TEntityImplementation<Id, Type, E> {
/**
* Just set a flag that the entity's been deleted
*
* @memberof IEntityImplementationWithDeleteMethod
*/
$markDeleted(): void;
}