import { UniqueID } from "../../../../../../packages/rdx-ddd/src";
import { Result } from "../../../../../../packages/rdx-utils/src";
import { VerifactuRecord } from "../aggregates";

/**
 * Interfaz del repositorio para el agregado `Verifactu`.
 * El escopado multitenant está representado por `companyId`.
 */
export interface IVerifactuRecordRepository {
  /**
   *
   * Persiste una nueva factura o actualiza una existente.
   * Retorna el objeto actualizado tras la operación.
   *
   * @param verifactuRecord - El agregado a guardar.
   * @param transaction - Transacción activa para la operación.
   * @returns Result<VerifactuRecord, Error>
   */
  save(
    verifactuRecord: VerifactuRecord,
    transaction: unknown
  ): Promise<Result<VerifactuRecord, Error>>;

  /**
   * Recupera un registro por su ID.
   * Devuelve un `NotFoundError` si no se encuentra.
   */
  getById(id: UniqueID, transaction?: unknown): Promise<Result<VerifactuRecord, Error>>;
}
