import { err, ok, type CommandContext } from "@tailor-platform/erp-kit/core"; import { updateDetails } from "../domain/businessPartner"; import type { Transaction } from "../generated/kysely-tailordb"; import { PartnerNotFoundError } from "../lib/errors.generated"; import { createBusinessPartnerRepository, type BusinessPartnerRepository, } from "../repository/businessPartnerRepository"; export type UpdatePartnerInput = { id: string; name?: string }; export async function run>( db: Transaction, input: UpdatePartnerInput & Omit, "status" | "type">, _ctx: CommandContext, repositoryFactory: ( db: Transaction, ) => BusinessPartnerRepository = createBusinessPartnerRepository, ) { const { id, name, ...customFieldPatch } = input; const repository = repositoryFactory(db); const partner = await repository.findById(id, { forUpdate: true }); if (!partner) return err(new PartnerNotFoundError(id)); const updated = updateDetails(partner, { name, customFields: { ...partner.header.customFields, ...customFieldPatch }, }); if (!updated.ok) return updated; await repository.save(updated.value); return ok({ partnerId: updated.value.id }); }