import { FilterQuery, UpdateQuery, Document, QueryOptions, PopulateOptions, MongooseUpdateQueryOptions, UpdateWriteOpResult, ClientSession, CreateOptions, PipelineStage } from 'mongoose'; import { TPaginationOptions } from '../../types/commonType'; interface IReadService { findAll(filter: FilterQuery, options?: QueryOptions, populate?: PopulateOptions | PopulateOptions[]): Promise; findOne(filter: FilterQuery, options?: QueryOptions, populate?: PopulateOptions | PopulateOptions[]): Promise; findById(id: string, options?: QueryOptions, populate?: PopulateOptions | PopulateOptions[]): Promise; findAllWithPagination(filter: FilterQuery, options: QueryOptions, populate?: PopulateOptions | PopulateOptions[]): Promise>; count(filter: FilterQuery): Promise; aggregate(pipeline: PipelineStage[], options?: QueryOptions): Promise<{ [key: string]: string | number | object; }[]>; } interface IWriteService { update(filter: FilterQuery, updateData: UpdateQuery, options?: MongooseUpdateQueryOptions & { userId?: string; session?: ClientSession; }): Promise; upsert(filter: FilterQuery, updateData: UpdateQuery, options?: QueryOptions & { userId?: string; session?: ClientSession; }): Promise; create(createData: Partial, options?: CreateOptions & { userId?: string; session?: ClientSession; }): Promise; bulkCreate(createData: Partial[], options?: CreateOptions & { userId?: string; session?: ClientSession; }): Promise; } interface IDeleteService { delete(filter: FilterQuery, options?: MongooseUpdateQueryOptions & { userId?: string; session?: ClientSession; }): Promise; hardDelete(filter: FilterQuery, options?: MongooseUpdateQueryOptions & { session?: ClientSession; }): Promise<{ deletedCount?: number; }>; } export interface IMongooseCommonService extends IReadService, IWriteService, IDeleteService { } export {};