import type { GetPrivateAlbumsInput, IPrivateZoneRepository, } from "@/data/repositories/interfaces"; import { type PrivateAlbumsResponse, type PrivateAlbumUnlockResponse, UnlockPrivateAlbumRequestSchema, } from "@/data/schemas/private-zone"; import { PrivateZoneApi, privateZoneApi, } from "@/data/services/api/private_zone_api"; import { Result } from "@/utils/result"; import { createLazySingleton } from "./lazy_singleton"; export class PrivateZoneRepository implements IPrivateZoneRepository { constructor(private readonly api: PrivateZoneApi) {} getAlbums( input: GetPrivateAlbumsInput, ): Promise> { return Result.wrap(() => this.api.getAlbums(input)); } unlockAlbum( albumId: string, expectedCost: number, ): Promise> { return Result.wrap(() => this.api.unlockAlbum( albumId, UnlockPrivateAlbumRequestSchema.parse({ expectedCost }), ), ); } } export const getPrivateZoneRepository = createLazySingleton( () => new PrivateZoneRepository(privateZoneApi), );