/** * Example Repository * * Data access layer for Example entities. * Extends BaseRepository from @plyaz/db for consistent CRUD operations. * Falls back to in-memory dummy data when DbService is not initialized. * * @example * ```typescript * // With DbService initialized * const db = DbService.getInstance().getDatabase(); * const repository = new ExampleRepository(db); * * // Get all entities * const result = await repository.findMany(); * if (result.success) { * console.log('Entities:', result.value.data); * } * * // Get by ID * const entity = await repository.findById('123'); * ``` */ import { BaseRepository } from '@plyaz/db'; import type { DatabaseResult, PaginatedResult, QueryOptions, DatabaseServiceInterface, OperationConfig } from '@plyaz/types/db'; /** * Database row type for Example entity (snake_case for DB) */ export interface ExampleDatabaseRow { id: string; name: string; description: string | null; amount: number; owner_id: string; status: string; is_visible: boolean; created_at: string; updated_at: string; deleted_at?: string | null; [key: string]: unknown; } /** * Create input for Example entity */ export type ExampleCreateInput = Omit; /** * Update input for Example entity */ export type ExampleUpdateInput = Partial>; /** * Example Repository * * Extends BaseRepository for consistent data access patterns. * When DbService is not initialized, falls back to in-memory dummy data. * * @example * ```typescript * // Create repository (auto-detects DbService availability) * const repo = ExampleRepository.create(); * * // Or with explicit database service * const db = DbService.getInstance().getDatabase(); * const repo = new ExampleRepository(db); * * // Use CRUD operations * const result = await repo.findById('example-001'); * ``` */ export declare class ExampleRepository extends BaseRepository { private readonly useDummyData; private dummyStore; constructor(db: DatabaseServiceInterface, useDummyData?: boolean); /** * Create repository instance. * Uses DbService if initialized, otherwise creates a dummy-data repository. */ static create(): ExampleRepository; /** * Find entity by ID */ findById(id: string, config?: OperationConfig): Promise>; /** * Find multiple entities */ findMany(options?: QueryOptions, config?: OperationConfig): Promise>>; /** * Create new entity * * Note: `id` is auto-generated by DB (uuid_generate_v4) if not provided. * `owner_id` is required by FK constraint - must be a valid user UUID (or null if DB allows). */ create(data: Partial, config?: OperationConfig): Promise>; /** * Update entity */ update(id: string, data: Partial, config?: OperationConfig): Promise>; /** * Soft delete entity */ softDelete(id: string, config?: OperationConfig): Promise>; /** * Hard delete entity */ delete(id: string, config?: OperationConfig): Promise>; /** * Find entities by status using fluent QueryBuilder * * @example * ```typescript * const result = await repo.findByStatus('active'); * ``` */ findByStatus(status: string): Promise>>; /** * Find entities by owner using fluent QueryBuilder * * @example * ```typescript * const result = await repo.findByOwner('user-001'); * ``` */ findByOwner(ownerId: string): Promise>>; /** * Find visible entities only using fluent QueryBuilder * * @example * ```typescript * const result = await repo.findVisible(); * ``` */ findVisible(): Promise>>; /** * Find active and visible entities using complex QueryBuilder * * @example * ```typescript * const items = await repo.findActiveAndVisible(); * ``` */ findActiveAndVisible(): Promise; /** * Find entities by owner with status filter using QueryBuilder * * @example * ```typescript * const items = await repo.findByOwnerWithStatus('user-001', 'active'); * ``` */ findByOwnerWithStatus(ownerId: string, status: string): Promise; /** * Count entities by status using QueryBuilder * * @example * ```typescript * const count = await repo.countByStatus('active'); * ``` */ countByStatus(status: string): Promise; /** * Check if entity exists by ID */ exists(id: string, config?: OperationConfig): Promise>; /** * Get the table name for this repository * Used for transaction operations */ getTableName(): string; } //# sourceMappingURL=ExampleRepository.d.ts.map