@pashoo2/clean-architecture-boilerplate
Version:
Clean architecture boilerplate
24 lines (23 loc) • 1.89 kB
TypeScript
import { IEntity, TEntityImplementation, IEntityImplementationWithInitialization } from '../../entities/interfaces/entity';
import { IBaseEntityEventsList, IBaseEntityParameters, IBaseEntityServices } from '../../entities/interfaces/baseEntity';
import { TPickTransferableProperties } from '../../interfaces/transferable';
import { TGetEvents, TGetEventsNames } from '../../events/interfaces/events';
import { IDomainEventFailed, IDomainEventListener, IDomainFailedEventListener } from '../../events/interfaces/domainEvents';
import { TIdentityValueObject } from '../../valueObjects/interfaces/index';
export declare abstract class BaseEntityAbstractClass<Id extends TIdentityValueObject, Type extends string, E extends IBaseEntityEventsList<Id, Type>> implements TEntityImplementation<Id, Type, E>, IEntityImplementationWithInitialization {
abstract get id(): Id;
abstract get isDeleted(): boolean;
abstract readonly type: Type;
protected constructor(parameters: IBaseEntityParameters<Id>, services: IBaseEntityServices<E>);
$initializeInstance(): void;
abstract equalsTo(anotherEntity: IEntity<Id, Type>): boolean;
abstract getTransferableProps(): TPickTransferableProperties<this>;
abstract emit<Event extends TGetEvents<E>>(event: Event): void;
abstract emitEventFailed<Ev extends TGetEvents<E>>(eventFailed: IDomainEventFailed<Ev>): void;
abstract subscribe<N extends TGetEventsNames<E>>(eventName: N, eventListener: IDomainEventListener<E[N]>): void;
abstract subscribeOnFailed<N extends TGetEventsNames<E>>(eventName: N, eventListener: IDomainFailedEventListener<E[N]>): void;
abstract unsubscribe<N extends TGetEventsNames<E>>(eventName: N, eventListener: IDomainEventListener<E[N]>): void;
protected abstract _emitCreateEvent(): void;
protected abstract _validate(): void;
protected abstract _markDeleted(): void;
}