/**
 * Repository クラス
 */
import { Entity } from './Entity';
import { Connection } from './Connection';
import { Logger } from '../utils/Logger';
import { EntityConstructor, FindOptions, DeleteOptions, EntityId } from '../types/EntityTypes';
/**
 * エンティティのCRUD操作を提供するリポジトリ
 */
export declare class Repository<T extends Entity> {
    private entityConstructor;
    private connection;
    private logger;
    private tableName;
    constructor(entityConstructor: EntityConstructor<T>, connection: Connection, logger: Logger);
    /**
     * エンティティを保存
     */
    save(entity: T): Promise<T>;
    /**
     * 新しいエンティティを作成
     */
    create(entity: T): Promise<T>;
    /**
     * エンティティを更新
     */
    update(entity: T): Promise<T>;
    /**
     * IDでエンティティを検索
     */
    findById(id: EntityId): Promise<T | null>;
    /**
     * 条件でエンティティを検索
     */
    find(options?: FindOptions<T>): Promise<T[]>;
    /**
     * 1つのエンティティを検索
     */
    findOne(options?: FindOptions<T>): Promise<T | null>;
    /**
     * エンティティを削除
     */
    delete(id: EntityId): Promise<boolean>;
    /**
     * 条件に基づいて削除
     */
    deleteMany(options: DeleteOptions<T>): Promise<number>;
    /**
     * エンティティ数をカウント
     */
    count(options?: FindOptions<T>): Promise<number>;
    /**
     * エンティティが存在するかチェック
     */
    exists(id: EntityId): Promise<boolean>;
    /**
     * 全エンティティを削除
     */
    clear(): Promise<void>;
    /**
     * イベントタイプでエンティティを検索
     */
    private findByEvent;
    /**
     * WHERE条件を適用
     */
    private applyWhereCondition;
    /**
     * 条件マッチングをチェック
     */
    private matchesCondition;
    /**
     * ORDER BY を適用
     */
    private applyOrderBy;
    /**
     * テーブル名を取得
     */
    private getTableName;
    /**
     * 新しいIDを生成
     */
    private generateId;
}
