import { err, ok, type CommandContext } from "@tailor-platform/erp-kit/core"; import { deactivate } from "../domain/supplierAccount"; import type { Transaction } from "../generated/kysely-tailordb"; import { SupplierAccountNotFoundError } from "../lib/errors.generated"; import { createSupplierAccountRepository, type SupplierAccountRepository, } from "../repository/supplierAccountRepository"; export interface DeactivateSupplierAccountInput { id: string; } export async function run( db: Transaction, input: DeactivateSupplierAccountInput, _ctx: CommandContext, repositoryFactory: ( db: Transaction, ) => SupplierAccountRepository = createSupplierAccountRepository, ) { const repository = repositoryFactory(db); const account = await repository.findById(input.id, { forUpdate: true }); if (!account) return err(new SupplierAccountNotFoundError(input.id)); const deactivated = deactivate(account); if (!deactivated.ok) return deactivated; await repository.save(deactivated.value); return ok({ supplierAccountId: deactivated.value.id }); }