Define models for roles and folder data

This commit is contained in:
Sosthene 2025-06-12 17:24:54 +02:00
parent 32f11a56ef
commit 02a490d3e3
2 changed files with 114 additions and 0 deletions

View File

@ -1,3 +1,5 @@
import type { RoleDefinition } from "./Roles";
export interface FolderData {
folderNumber: string;
name: string;
@ -13,8 +15,109 @@ export interface FolderData {
stakeholders: string[];
}
export function isFolderData(data: any): data is FolderData {
if (typeof data !== 'object' || data === null) return false;
const requiredStringFields = [
'folderNumber',
'name',
'deedType',
'description',
'archived_description',
'status',
'created_at',
'updated_at'
];
for (const field of requiredStringFields) {
if (typeof data[field] !== 'string') return false;
}
const requiredArrayFields = [
'customers',
'documents',
'motes',
'stakeholders'
];
for (const field of requiredArrayFields) {
if (!Array.isArray(data[field]) || !data[field].every((item: any) => typeof item === 'string')) {
return false;
}
}
return true;
}
const emptyFolderData: FolderData = {
folderNumber: '',
name: '',
deedType: '',
description: '',
archived_description: '',
status: '',
created_at: '',
updated_at: '',
customers: [],
documents: [],
motes: [],
stakeholders: []
};
const folderDataFields: string[] = Object.keys(emptyFolderData);
const FolderPublicFields: string[] = [];
// All the attributes are private in that case
export const FolderPrivateFields = [
...folderDataFields.filter(key => !FolderPublicFields.includes(key))
];
export interface FolderCreated {
processId: string,
process: any, // Process
folderData: FolderData,
}
export function setDefaultFolderRoles(ownerId: string, stakeholdersId: string[], customersId: string[]): Record<string, RoleDefinition> {
return {
owner: {
members: [ownerId],
validation_rules: [
{
quorum: 0.5,
fields: [...folderDataFields, 'roles'],
min_sig_member: 1,
},
],
storages: []
},
stakeholders: {
members: stakeholdersId,
validation_rules: [
{
quorum: 0.5,
fields: ['documents', 'motes'],
min_sig_member: 1,
},
],
storages: []
},
customers: {
members: customersId,
validation_rules: [
{
quorum: 0.0,
fields: folderDataFields,
min_sig_member: 0.0,
},
],
storages: []
},
apophis: {
members: [ownerId],
validation_rules: [],
storages: []
}
}
};

11
src/sdk/models/Roles.ts Normal file
View File

@ -0,0 +1,11 @@
export interface ValidationRule {
quorum: number,
fields: string[],
min_sig_member: number,
}
export interface RoleDefinition {
members: string[],
validation_rules: ValidationRule[],
storages: string[]
}