import { DescriptionStatus } from "@app/core/common/enum/description-status"; import { BaseEntity, BaseEntityPersist } from "@common/base/base-entity.model"; import { Guid } from "@common/types/guid"; import { DescriptionTemplate } from "../description-template/description-template"; import { Dmp, DmpDescriptionTemplate, PublicDmp } from "../dmp/dmp"; import { Reference, ReferencePersist } from "../reference/reference"; import { Tag } from "../tag/tag"; import { User } from "../user/user"; import { AppPermission } from "@app/core/common/enum/permission.enum"; export interface Description extends BaseEntity { label?: string; properties?: DescriptionPropertyDefinition; status?: DescriptionStatus; description?: string; createdBy?: User; finalizedAt?: Date; descriptionReferences?: DescriptionReference[]; descriptionTags?: DescriptionTag[]; descriptionTemplate?: DescriptionTemplate; dmpDescriptionTemplate?: DmpDescriptionTemplate; dmp?: Dmp; authorizationFlags?: AppPermission[]; } export interface DescriptionPropertyDefinition { fieldSets: Map; } export interface DescriptionPropertyDefinitionFieldSet { items?: DescriptionPropertyDefinitionFieldSetItem[]; } export interface DescriptionPropertyDefinitionFieldSetItem { fields?: Map; comment?: string; ordinal?: number; } export interface DescriptionField { textValue: string; textListValue: string[]; dateValue: Date; externalIdentifier?: DescriptionExternalIdentifier; references: Reference[]; } export interface DescriptionExternalIdentifier { identifier: string; type: string; } export interface DescriptionReference extends BaseEntity { description?: Description; reference?: Reference; data?: DescriptionReferenceData; } export interface DescriptionReferenceData { fieldId?: string; } export interface DescriptionTag extends BaseEntity { description?: Description; tag?: Tag; } // // Persist // export interface DescriptionPersist extends BaseEntityPersist { label: string; dmpId: Guid; dmpDescriptionTemplateId: Guid; descriptionTemplateId: Guid; status: DescriptionStatus; description: string; properties: DescriptionPropertyDefinitionPersist; tags: string[]; references: DescriptionReferencePersist[]; } export interface DescriptionPropertyDefinitionPersist { fieldSets: Map; } export interface DescriptionPropertyDefinitionFieldSetPersist { items?: DescriptionPropertyDefinitionFieldSetItemPersist[]; } export interface DescriptionPropertyDefinitionFieldSetItemPersist { fields?: Map; comment?: string; ordinal?: number; } export interface DescriptionFieldPersist { textValue: string; textListValue: string[]; dateValue: Date; references: ReferencePersist[]; externalIdentifier?: DescriptionExternalIdentifierPersist; } export interface DescriptionExternalIdentifierPersist { identifier: string; type: string; } export interface DescriptionReferencePersist { id: Guid; reference?: ReferencePersist; hash: string; } export interface DescriptionStatusPersist { id: Guid; status: DescriptionStatus; hash: string; } // // Public // export interface PublicDescription extends BaseEntity { label?: string; status?: DescriptionStatus; description?: string; finalizedAt?: Date; descriptionTemplate?: PublicDescriptionTemplate; dmpDescriptionTemplate?: PublicDmpDescriptionTemplate; dmp?: PublicDmp; } export interface PublicDmpDescriptionTemplate { id: Guid; dmp: PublicDmp; } export interface PublicDescriptionTemplate { id: Guid; label: string; description: string; } export interface DescriptionSectionPermissionResolver { dmpId: Guid; sectionIds: Guid[]; permissions: string[]; }