import { Count, Filter, Getter, Options, PropertyDefinition, Where, } from '@loopback/repository'; export interface Constructor { prototype: T; // eslint-disable-next-line @typescript-eslint/no-explicit-any new (...args: any[]): T; // NOSONAR } export interface AbstractConstructor { prototype: T; // eslint-disable-next-line @typescript-eslint/no-explicit-any new (...args: any[]): T; // NOSONAR } export type MixinBaseClass = Constructor & AbstractConstructor; export interface IUser { id?: number | string; getIdentifier?(): number | string | undefined; } export interface IBaseEntityConfig { deleted?: Partial; deletedOn?: Partial; deletedBy?: Partial; } export interface IBaseEntity { deleted?: boolean; deletedOn?: Date; deletedBy?: string; } export interface ISoftCrudRepositoryMixin { getCurrentUser: Getter; findAll(filter?: Filter, options?: Options): Promise<(E & R)[]>; deleteHard(entity: E, options?: Options): Promise; deleteByIdHard(id: ID, options?: Options): Promise; findByIdIncludeSoftDelete( id: ID, filter?: Filter, options?: Options, ): Promise; deleteAllHard(where?: Where, options?: Options): Promise; findOneIncludeSoftDelete( filter?: Filter, options?: Options, ): Promise<(E & R) | null>; findById(id: ID, filter?: Filter, options?: Options): Promise; countAll(where?: Where, options?: Options): Promise; }