Files
dbis_core/src/core/contracts/contract-fabric.service.ts
2026-01-02 20:27:42 -08:00

73 lines
2.0 KiB
TypeScript

// DBIS Sovereign Contract Fabric (DCF)
import { Prisma } from '@prisma/client';
import prisma from '@/shared/database/prisma';
import {
SmartContract,
ContractTemplateType,
ContractState,
} from '@/shared/types';
import { v4 as uuidv4 } from 'uuid';
export class ContractFabricService {
/**
* Create smart contract
*/
async createContract(
sovereignBankId: string,
templateType: ContractTemplateType,
parameters: Record<string, unknown>,
signatories: string[]
): Promise<SmartContract> {
const contractId = `CONTRACT-${uuidv4()}`;
const contract = await prisma.smartContract.create({
data: {
contractId,
sovereignBankId,
templateType,
contractState: ContractState.DRAFT,
parameters: parameters as Prisma.InputJsonValue,
signatories: signatories as Prisma.InputJsonValue,
},
});
return this.mapToSmartContract(contract);
}
/**
* Execute contract
*/
async executeContract(contractId: string, executionResult: Record<string, unknown>): Promise<void> {
await prisma.smartContract.update({
where: { contractId },
data: {
contractState: ContractState.EXECUTED,
executionResult: executionResult as Prisma.InputJsonValue,
executedAt: new Date(),
},
});
}
/**
* Map Prisma model to SmartContract type
*/
private mapToSmartContract(contract: any): SmartContract {
return {
id: contract.id,
contractId: contract.contractId,
sovereignBankId: contract.sovereignBankId,
templateType: contract.templateType as ContractTemplateType,
contractState: contract.contractState as ContractState,
parameters: contract.parameters as Record<string, unknown>,
signatories: contract.signatories as string[],
signatures: contract.signatures as Record<string, string> | undefined,
executionResult: contract.executionResult as Record<string, unknown> | undefined,
};
}
}
export const contractFabricService = new ContractFabricService();