import { DmpAccessType } from '@app/core/common/enum/dmp-access-type'; import { DmpStatus } from '@app/core/common/enum/dmp-status'; import { DmpUserRole } from '@app/core/common/enum/dmp-user-role'; import { DmpVersionStatus } from '@app/core/common/enum/dmp-version-status'; import { BaseEntity, BaseEntityPersist } from '@common/base/base-entity.model'; import { Guid } from '@common/types/guid'; import { DescriptionTemplate } from '../description-template/description-template'; import { Description, PublicDescription } from '../description/description'; import { DmpBlueprint } from '../dmp-blueprint/dmp-blueprint'; import { EntityDoi } from '../entity-doi/entity-doi'; import { ReferencePersist } from '../reference/reference'; import { DmpAssociatedUser, User } from "../user/user"; import { DmpReference } from './dmp-reference'; import { IsActive } from '@app/core/common/enum/is-active.enum'; import { AppPermission } from '@app/core/common/enum/permission.enum'; import { EntityType } from '@app/core/common/enum/entity-type'; export interface Dmp extends BaseEntity { label?: string; version?: number; status?: DmpStatus; versionStatus?: DmpVersionStatus; properties?: DmpProperties; groupId?: String; description?: String; finalizedAt?: Date; publishedAt?: Date; creator?: User; accessType?: DmpAccessType; blueprint?: DmpBlueprint; language?: String; publicAfter?: Date; dmpReferences?: DmpReference[]; dmpUsers?: DmpUser[]; descriptions?: Description[]; dmpDescriptionTemplates?: DmpDescriptionTemplate[]; entityDois?: EntityDoi[]; authorizationFlags?: AppPermission[]; } export interface DmpProperties { dmpBlueprintValues: DmpBlueprintValue[]; contacts: DmpContact[]; } export interface DmpBlueprintValue { fieldId: Guid; fieldValue: string; } export interface DmpContact { user?: DmpAssociatedUser; firstName: string; lastName: string; email: string; } export interface DmpUser extends BaseEntity { dmp: Dmp; user: User; role: DmpUserRole; sectionId: Guid; } export interface DmpDescriptionTemplate extends BaseEntity { dmp?: Dmp; currentDescriptionTemplate?: DescriptionTemplate; //TODO: what is this? descriptionTemplates?: DescriptionTemplate[]; //TODO: why it is array? descriptionTemplateGroupId?: Guid; sectionId?: Guid; } // // Persist // export interface DmpPersist extends BaseEntityPersist { label: string; status: DmpStatus; properties: DmpPropertiesPersist; description: String; language: String; blueprint: Guid; accessType: DmpAccessType; descriptionTemplates: DmpDescriptionTemplatePersist[]; users: DmpUserPersist[]; } export interface DmpPropertiesPersist { dmpBlueprintValues: Map; contacts: DmpContactPersist[]; } export interface DmpBlueprintValuePersist { fieldId: Guid; fieldValue: string; references: DmpReferencePersist[]; reference: DmpReferencePersist; } export interface DmpContactPersist { userId: Guid; firstName: string; lastName: string; email: string; } export interface DmpReferencePersist { reference?: ReferencePersist; data?: DmpReferenceDataPersist; } export interface DmpReferenceDataPersist { blueprintFieldId: Guid; } export interface DmpDescriptionTemplatePersist { descriptionTemplateGroupId: Guid; sectionId: Guid; } export interface CloneDmpPersist { id: Guid; label: string; description: String; descriptions: Guid[]; } export interface NewVersionDmpPersist { id: Guid; label: string; description: String; blueprintId: Guid; descriptions: Guid[]; hash?: string; } export interface DmpUserPersist { user: Guid; role: DmpUserRole; email: string; sectionId: Guid; } export interface DmpUserRemovePersist { id: Guid; dmpId: Guid; role: DmpUserRole; } export interface DmpUserInvitePersist { users: DmpUserPersist[]; } // // Public // export interface PublicDmp extends BaseEntity { label?: string; version?: number; description?: string; finalizedAt?: Date; publishedAt?: Date; status?: DmpStatus; groupId?: String; accessType: DmpAccessType; dmpReferences: PublicDmpReference[]; dmpUsers: PublicDmpUser[]; descriptions: PublicDescription[]; entityDois: PublicEntityDoi[]; } export interface PublicDmpReference { id: Guid; dmp: PublicDmp; reference: PublicReference; isActive?: IsActive; } export interface PublicReference { id: Guid; label: string; type: PublicReferenceType; description?: string; reference?: string; } export interface PublicReferenceType { id: Guid; name: string; code: string; } export interface PublicDmpUser { id: Guid; dmp: PublicDmp; user: PublicUser; role: DmpUserRole; } export interface PublicUser { id: Guid; name: string; } export interface PublicEntityDoi { id: Guid; entityType: EntityType; entityId: Guid; repositoryId: string; doi: string; }