import { type SQL } from 'drizzle-orm';
import type { InferSelectModel } from 'drizzle-orm';
import type { PgTable } from 'drizzle-orm/pg-core';
import { entitySchemas } from './entity-schema';
import type { CrudTrashQueryOptions } from '../../typings/comm/crud';
import type { PageResult } from '../../typings/comm/page';
type SchemaBundle = ReturnType<typeof entitySchemas>;
/**
 * 表级数据访问（按 pgTable 单例缓存）
 *
 * 查询默认排除已软删；写入走 Zod（entitySchemas）校验。
 */
export declare class Repository<T extends PgTable> {
    readonly table: T;
    readonly schema: SchemaBundle;
    constructor(table: T, schema?: SchemaBundle);
    /** 表是否有 deleteTime，能否进回收站 */
    supportsSoftDelete(): boolean;
    private scopedWhere;
    /** 列表查询 */
    find(where?: SQL | undefined, options?: CrudTrashQueryOptions & {
        orderBy?: SQL[];
    }): Promise<InferSelectModel<T>[]>;
    /** 取第一条（SQL LIMIT 1）；支持 orderBy */
    findOne(where?: SQL | undefined, options?: CrudTrashQueryOptions & {
        orderBy?: SQL[];
    }): Promise<InferSelectModel<T> | undefined>;
    /** 按主键 id 查询 */
    findById(id: number | string, options?: CrudTrashQueryOptions): Promise<InferSelectModel<T> | undefined>;
    /** 计数 */
    count(where?: SQL | undefined, options?: CrudTrashQueryOptions): Promise<number>;
    /** 分页：返回 list + pagination */
    findPage(options: {
        page: number;
        size: number;
        where?: SQL | undefined;
        orderBy?: SQL[];
    } & CrudTrashQueryOptions): Promise<PageResult<InferSelectModel<T>>>;
    private parseInsert;
    /** 插入；对象 / 数组都直接交给 values()（Drizzle 两者都支持） */
    create(data: readonly unknown[]): Promise<InferSelectModel<T>[]>;
    create(data: unknown): Promise<InferSelectModel<T>>;
    /**
     * 有 id 且存在则更新，否则插入。
     * 对象 / 数组均可；数组时一次查出已存在 id，再批量 update + insert。
     */
    save(data: readonly unknown[]): Promise<InferSelectModel<T>[]>;
    save(data: unknown): Promise<InferSelectModel<T>>;
    /**
     * 更新：
     * - update(where, patch) 条件更新
     * - update([{ id, ...patch }, ...]) 按 id 批量；相同 patch 合并为一次 inArray
     */
    update(whereOrRows: SQL | undefined | Record<string, unknown>[], data?: unknown): Promise<InferSelectModel<T> | InferSelectModel<T>[] | undefined>;
    /** 按行批量更新：同 patch 合并 inArray，一次 SQL */
    private updateByRows;
    /** SQL 或 id / id[] → where（数组走 inArray，一次条件） */
    private resolveIdWhere;
    /** 软删：写入 deleteTime；支持 SQL / id / id[] */
    softDelete(whereOrIds: SQL | number | string | Array<number | string>): Promise<void>;
    /** 恢复：清空 deleteTime；支持 SQL / id / id[] */
    restore(whereOrIds: SQL | number | string | Array<number | string>): Promise<void>;
    /** 硬删；支持 SQL / id / id[]（一次 DELETE … IN） */
    forceDelete(whereOrIds: SQL | number | string | Array<number | string>): Promise<void>;
}
/** 按表取单例 Repository */
export declare function getRepository<T extends PgTable>(table: T): Repository<T>;
/**
 * 属性注入 Repository
 *
 * @example
 * ```ts
 * @InjectRepository(baseUser)
 * baseUserEntity: Repository<typeof baseUser>
 * ```
 */
export declare function InjectRepository<T extends PgTable>(table: T): (target: object, propertyKey: string | symbol) => void;
export {};
