import { err, ok, type CommandContext } from "@tailor-platform/erp-kit/core"; import { reactivateAddress } from "../domain/businessPartner"; import type { Transaction } from "../generated/kysely-tailordb"; import { AddressNotFoundError } from "../lib/errors.generated"; import { createBusinessPartnerRepository, type BusinessPartnerRepository, } from "../repository/businessPartnerRepository"; export interface ReactivatePartnerAddressInput { id: string; } export async function run( db: Transaction, input: ReactivatePartnerAddressInput, _ctx: CommandContext, repositoryFactory: ( db: Transaction, ) => BusinessPartnerRepository = createBusinessPartnerRepository, ) { const repository = repositoryFactory(db); const partner = await repository.findByAddressId(input.id, { forUpdate: true }); if (!partner) return err(new AddressNotFoundError(input.id)); const result = reactivateAddress(partner, input.id); if (!result.ok) return result; await repository.save(result.value.partner); return ok({ partnerAddressId: result.value.address.id }); }