import { Insertable, Kysely, ShallowDehydrateObject, Updateable } from 'kysely';
import { AlbumUserCreateDto } from 'src/dtos/album.dto';
import { DB } from 'src/schema';
import { AlbumTable } from 'src/schema/tables/album.table';
export interface AlbumAssetCount {
    albumId: string;
    assetCount: number;
    startDate: Date | null;
    endDate: Date | null;
    lastModifiedAssetTimestamp: Date | null;
}
export interface AlbumInfoOptions {
    withAssets: boolean;
}
export declare class AlbumRepository {
    private db;
    constructor(db: Kysely<DB>);
    getById(id: string, options: AlbumInfoOptions): Promise<{
        assets: {
            id: string;
            type: import("../enum").AssetType;
            duration: string | null;
            updatedAt: string;
            createdAt: string;
            deletedAt: string | null;
            status: import("../enum").AssetStatus;
            updateId: string;
            ownerId: string;
            width: number | null;
            height: number | null;
            deviceAssetId: string;
            deviceId: string;
            originalPath: string;
            fileCreatedAt: string;
            fileModifiedAt: string;
            isFavorite: boolean;
            checksum: string;
            checksumAlgorithm: import("../enum").ChecksumAlgorithm;
            livePhotoVideoId: string | null;
            originalFileName: string;
            thumbhash: string | null;
            isOffline: boolean;
            libraryId: string | null;
            isExternal: boolean;
            localDateTime: string;
            stackId: string | null;
            duplicateId: string | null;
            visibility: import("../enum").AssetVisibility;
            isEdited: boolean;
            exifInfo: ShallowDehydrateObject<{
                description: string;
                assetId: string;
                state: string | null;
                updatedAt: Date;
                updateId: string;
                make: string | null;
                model: string | null;
                exifImageWidth: number | null;
                exifImageHeight: number | null;
                fileSizeInByte: number | null;
                orientation: string | null;
                dateTimeOriginal: Date | null;
                modifyDate: Date | null;
                lensModel: string | null;
                fNumber: number | null;
                focalLength: number | null;
                iso: number | null;
                latitude: number | null;
                longitude: number | null;
                city: string | null;
                country: string | null;
                fps: number | null;
                exposureTime: string | null;
                livePhotoCID: string | null;
                timeZone: string | null;
                projectionType: string | null;
                profileDescription: string | null;
                colorspace: string | null;
                bitsPerSample: number | null;
                autoStackId: string | null;
                rating: number | null;
                tags: string[] | null;
                lockedProperties: ("description" | "dateTimeOriginal" | "latitude" | "longitude" | "timeZone" | "rating" | "tags")[] | null;
            }>;
        }[] | undefined;
        id: string;
        description: string;
        updatedAt: Date;
        createdAt: Date;
        deletedAt: Date | null;
        updateId: string;
        ownerId: string;
        albumName: string;
        albumThumbnailAssetId: string | null;
        isActivityEnabled: boolean;
        order: import("../enum").AssetOrder;
        owner: {
            name: string;
            id: string;
            email: string;
            profileImagePath: string;
            avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user", "avatarColor">;
            profileChangedAt: string;
        };
        sharedLinks: {
            password: string | null;
            key: string;
            slug: string | null;
            id: string;
            type: import("../enum").SharedLinkType;
            description: string | null;
            userId: string;
            expiresAt: string | null;
            createdAt: string;
            albumId: string | null;
            allowUpload: boolean;
            allowDownload: boolean;
            showExif: boolean;
        }[];
        albumUsers: {
            role: import("../enum").AlbumUserRole;
            user: {
                name: string;
                id: string;
                email: string;
                profileImagePath: string;
                avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user" | "album_user", "avatarColor">;
                profileChangedAt: string;
            };
        }[];
    } | undefined>;
    getByAssetId(ownerId: string, assetId: string): Promise<{
        id: string;
        description: string;
        updatedAt: Date;
        createdAt: Date;
        deletedAt: Date | null;
        updateId: string;
        ownerId: string;
        albumName: string;
        albumThumbnailAssetId: string | null;
        isActivityEnabled: boolean;
        order: import("../enum").AssetOrder;
        owner: {
            name: string;
            id: string;
            email: string;
            profileImagePath: string;
            avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user", "avatarColor">;
            profileChangedAt: string;
        };
        albumUsers: {
            role: import("../enum").AlbumUserRole;
            user: {
                name: string;
                id: string;
                email: string;
                profileImagePath: string;
                avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user" | "album_user", "avatarColor">;
                profileChangedAt: string;
            };
        }[];
    }[]>;
    getByAssetIds(ownerId: string, assetIds: string[]): Promise<Map<string, string[]>>;
    getMetadataForIds(ids: string[]): Promise<AlbumAssetCount[]>;
    getOwned(ownerId: string): Promise<{
        id: string;
        description: string;
        updatedAt: Date;
        createdAt: Date;
        deletedAt: Date | null;
        updateId: string;
        ownerId: string;
        albumName: string;
        albumThumbnailAssetId: string | null;
        isActivityEnabled: boolean;
        order: import("../enum").AssetOrder;
        owner: {
            name: string;
            id: string;
            email: string;
            profileImagePath: string;
            avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user", "avatarColor">;
            profileChangedAt: string;
        };
        albumUsers: {
            role: import("../enum").AlbumUserRole;
            user: {
                name: string;
                id: string;
                email: string;
                profileImagePath: string;
                avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user" | "album_user", "avatarColor">;
                profileChangedAt: string;
            };
        }[];
        sharedLinks: {
            password: string | null;
            key: string;
            slug: string | null;
            id: string;
            type: import("../enum").SharedLinkType;
            description: string | null;
            userId: string;
            expiresAt: string | null;
            createdAt: string;
            albumId: string | null;
            allowUpload: boolean;
            allowDownload: boolean;
            showExif: boolean;
        }[];
    }[]>;
    getShared(ownerId: string): Promise<{
        id: string;
        description: string;
        updatedAt: Date;
        createdAt: Date;
        deletedAt: Date | null;
        updateId: string;
        ownerId: string;
        albumName: string;
        albumThumbnailAssetId: string | null;
        isActivityEnabled: boolean;
        order: import("../enum").AssetOrder;
        albumUsers: {
            role: import("../enum").AlbumUserRole;
            user: {
                name: string;
                id: string;
                email: string;
                profileImagePath: string;
                avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user" | "album_user", "avatarColor">;
                profileChangedAt: string;
            };
        }[];
        owner: {
            name: string;
            id: string;
            email: string;
            profileImagePath: string;
            avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user", "avatarColor">;
            profileChangedAt: string;
        };
        sharedLinks: {
            password: string | null;
            key: string;
            slug: string | null;
            id: string;
            type: import("../enum").SharedLinkType;
            description: string | null;
            userId: string;
            expiresAt: string | null;
            createdAt: string;
            albumId: string | null;
            allowUpload: boolean;
            allowDownload: boolean;
            showExif: boolean;
        }[];
    }[]>;
    getNotShared(ownerId: string): Promise<{
        id: string;
        description: string;
        updatedAt: Date;
        createdAt: Date;
        deletedAt: Date | null;
        updateId: string;
        ownerId: string;
        albumName: string;
        albumThumbnailAssetId: string | null;
        isActivityEnabled: boolean;
        order: import("../enum").AssetOrder;
        owner: {
            name: string;
            id: string;
            email: string;
            profileImagePath: string;
            avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user", "avatarColor">;
            profileChangedAt: string;
        };
    }[]>;
    restoreAll(userId: string): Promise<void>;
    softDeleteAll(userId: string): Promise<void>;
    deleteAll(userId: string): Promise<void>;
    removeAssetsFromAll(assetIds: string[]): Promise<void>;
    removeAssetIds(albumId: string, assetIds: string[]): Promise<void>;
    getAssetIds(albumId: string, assetIds: string[]): Promise<Set<string>>;
    addAssetIds(albumId: string, assetIds: string[]): Promise<void>;
    create(album: Insertable<AlbumTable>, assetIds: string[], albumUsers: AlbumUserCreateDto[]): Promise<{
        assets: {
            id: string;
            type: import("../enum").AssetType;
            duration: string | null;
            updatedAt: string;
            createdAt: string;
            deletedAt: string | null;
            status: import("../enum").AssetStatus;
            updateId: string;
            ownerId: string;
            width: number | null;
            height: number | null;
            deviceAssetId: string;
            deviceId: string;
            originalPath: string;
            fileCreatedAt: string;
            fileModifiedAt: string;
            isFavorite: boolean;
            checksum: string;
            checksumAlgorithm: import("../enum").ChecksumAlgorithm;
            livePhotoVideoId: string | null;
            originalFileName: string;
            thumbhash: string | null;
            isOffline: boolean;
            libraryId: string | null;
            isExternal: boolean;
            localDateTime: string;
            stackId: string | null;
            duplicateId: string | null;
            visibility: import("../enum").AssetVisibility;
            isEdited: boolean;
            exifInfo: ShallowDehydrateObject<{
                description: string;
                assetId: string;
                state: string | null;
                updatedAt: Date;
                updateId: string;
                make: string | null;
                model: string | null;
                exifImageWidth: number | null;
                exifImageHeight: number | null;
                fileSizeInByte: number | null;
                orientation: string | null;
                dateTimeOriginal: Date | null;
                modifyDate: Date | null;
                lensModel: string | null;
                fNumber: number | null;
                focalLength: number | null;
                iso: number | null;
                latitude: number | null;
                longitude: number | null;
                city: string | null;
                country: string | null;
                fps: number | null;
                exposureTime: string | null;
                livePhotoCID: string | null;
                timeZone: string | null;
                projectionType: string | null;
                profileDescription: string | null;
                colorspace: string | null;
                bitsPerSample: number | null;
                autoStackId: string | null;
                rating: number | null;
                tags: string[] | null;
                lockedProperties: ("description" | "dateTimeOriginal" | "latitude" | "longitude" | "timeZone" | "rating" | "tags")[] | null;
            }>;
        }[];
        id: string;
        description: string;
        updatedAt: Date;
        createdAt: Date;
        deletedAt: Date | null;
        updateId: string;
        ownerId: string;
        albumName: string;
        albumThumbnailAssetId: string | null;
        isActivityEnabled: boolean;
        order: import("../enum").AssetOrder;
        owner: {
            name: string;
            id: string;
            email: string;
            profileImagePath: string;
            avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user", "avatarColor">;
            profileChangedAt: string;
        };
        albumUsers: {
            role: import("../enum").AlbumUserRole;
            user: {
                name: string;
                id: string;
                email: string;
                profileImagePath: string;
                avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user" | "album_user", "avatarColor">;
                profileChangedAt: string;
            };
        }[];
    }>;
    update(id: string, album: Updateable<AlbumTable>): Promise<{
        id: string;
        description: string;
        updatedAt: Date;
        createdAt: Date;
        deletedAt: Date | null;
        updateId: string;
        ownerId: string;
        albumName: string;
        albumThumbnailAssetId: string | null;
        isActivityEnabled: boolean;
        order: import("../enum").AssetOrder;
        owner: {
            name: string;
            id: string;
            email: string;
            profileImagePath: string;
            avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user", "avatarColor">;
            profileChangedAt: string;
        };
        sharedLinks: {
            password: string | null;
            key: string;
            slug: string | null;
            id: string;
            type: import("../enum").SharedLinkType;
            description: string | null;
            userId: string;
            expiresAt: string | null;
            createdAt: string;
            albumId: string | null;
            allowUpload: boolean;
            allowDownload: boolean;
            showExif: boolean;
        }[];
        albumUsers: {
            role: import("../enum").AlbumUserRole;
            user: {
                name: string;
                id: string;
                email: string;
                profileImagePath: string;
                avatarColor: import("kysely").ExtractColumnType<DB, "album" | "user" | "album_user", "avatarColor">;
                profileChangedAt: string;
            };
        }[];
    }>;
    delete(id: string): Promise<void>;
    private addAssets;
    addAssetIdsToAlbums(values: {
        albumId: string;
        assetId: string;
    }[]): Promise<void>;
    updateThumbnails(): Promise<number | undefined>;
    private updateThumbnailBuilder;
    getContributorCounts(id: string): Promise<{
        userId: string;
        assetCount: number;
    }[]>;
    copyAlbums({ sourceAssetId, targetAssetId }: {
        sourceAssetId: string;
        targetAssetId: string;
    }): Promise<import("kysely").InsertResult[]>;
}
