Compare commits

..

No commits in common. "085713400c6566cdf505cdc936e940d51d86591d" and "1cf45b83ae0d266e53d9b8efe435dc7d6b51aa89" have entirely different histories.

2 changed files with 2279 additions and 307 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,19 @@
import { isFileBlob, type FileBlob } from "./Data";
import type { RoleDefinition } from "./Roles"; import type { RoleDefinition } from "./Roles";
export interface FolderData { export interface FolderData {
folderNumber: string; folderNumber: string;
name: string; name: string;
deedType: string;
description: string; description: string;
archived_description: string;
status: string;
created_at: string; created_at: string;
updated_at: string; updated_at: string;
customers: string[];
documents: FileBlob[];
notes: string[]; notes: string[];
stakeholders: string[];
} }
export function isFolderData(data: any): data is FolderData { export function isFolderData(data: any): data is FolderData {
@ -15,7 +22,10 @@ export function isFolderData(data: any): data is FolderData {
const requiredStringFields = [ const requiredStringFields = [
'folderNumber', 'folderNumber',
'name', 'name',
'deedType',
'description', 'description',
'archived_description',
'status',
'created_at', 'created_at',
'updated_at' 'updated_at'
]; ];
@ -24,10 +34,26 @@ export function isFolderData(data: any): data is FolderData {
if (typeof data[field] !== 'string') return false; if (typeof data[field] !== 'string') return false;
} }
// Vérifier que notes est un tableau de chaînes const requiredArrayFields = [
if (!Array.isArray(data.notes) || !data.notes.every((item: any) => typeof item === 'string')) { 'customers',
'notes',
'stakeholders'
];
for (const field of requiredArrayFields) {
if (!Array.isArray(data[field]) || !data[field].every((item: any) => typeof item === 'string')) {
return false; return false;
} }
}
const requiredFileBlobArrayFields = [
'documents',
];
for (const field of requiredFileBlobArrayFields) {
if (!Array.isArray(data[field])) return false;
if (data[field].length > 0 && !data[field].every(isFileBlob)) return false;
}
return true; return true;
} }
@ -35,10 +61,16 @@ export function isFolderData(data: any): data is FolderData {
const emptyFolderData: FolderData = { const emptyFolderData: FolderData = {
folderNumber: '', folderNumber: '',
name: '', name: '',
deedType: '',
description: '', description: '',
archived_description: '',
status: '',
created_at: '', created_at: '',
updated_at: '', updated_at: '',
notes: [] customers: [],
documents: [],
notes: [],
stakeholders: []
}; };
const folderDataFields: string[] = Object.keys(emptyFolderData); const folderDataFields: string[] = Object.keys(emptyFolderData);
@ -56,7 +88,7 @@ export interface FolderCreated {
data: FolderData, data: FolderData,
} }
export function setDefaultFolderRoles(ownerId: string): Record<string, RoleDefinition> { export function setDefaultFolderRoles(ownerId: string, stakeholdersId: string[], customersId: string[]): Record<string, RoleDefinition> {
return { return {
demiurge: { demiurge: {
members: [ownerId], members: [ownerId],
@ -74,6 +106,28 @@ export function setDefaultFolderRoles(ownerId: string): Record<string, RoleDefin
], ],
storages: [] storages: []
}, },
stakeholders: {
members: stakeholdersId,
validation_rules: [
{
quorum: 0.5,
fields: ['documents', 'notes'],
min_sig_member: 1,
},
],
storages: []
},
customers: {
members: customersId,
validation_rules: [
{
quorum: 0.0,
fields: folderDataFields,
min_sig_member: 0.0,
},
],
storages: []
},
apophis: { apophis: {
members: [ownerId], members: [ownerId],
validation_rules: [], validation_rules: [],