docv/lib/4nk/models/FolderData.ts

88 lines
1.9 KiB
TypeScript

import type { RoleDefinition } from "./Roles";
export interface FolderData {
folderNumber: string;
name: string;
description: string;
created_at: string;
updated_at: string;
notes: string[];
messages: string[];
messages_owner: string[];
}
export function isFolderData(data: any): data is FolderData {
if (typeof data !== 'object' || data === null) return false;
const requiredStringFields = [
'folderNumber',
'name',
'description',
'created_at',
'updated_at'
];
for (const field of requiredStringFields) {
if (typeof data[field] !== 'string') return false;
}
// Vérifier que notes est un tableau de chaînes
if (!Array.isArray(data.notes) || !data.notes.every((item: any) => typeof item === 'string')) {
return false;
}
return true;
}
const emptyFolderData: FolderData = {
folderNumber: '',
name: '',
description: '',
created_at: '',
updated_at: '',
notes: [],
messages: [],
messages_owner: [],
};
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
data: FolderData,
}
export function setDefaultFolderRoles(ownerId: string): Record<string, RoleDefinition> {
return {
demiurge: {
members: [ownerId],
validation_rules: [],
storages: []
},
owner: {
members: [ownerId],
validation_rules: [
{
quorum: 0.5,
fields: [...folderDataFields, 'roles'],
min_sig_member: 1,
},
],
storages: ['https://dev2.4nkweb.com/storage']
},
apophis: {
members: [ownerId],
validation_rules: [],
storages: []
}
}
};