UNPKG

@pashoo2/clean-architecture-boilerplate

Version:
38 lines (37 loc) 2.31 kB
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; }