argos/dmp-frontend/src/app/core/model/dmp/dmp.ts

213 lines
4.7 KiB
TypeScript

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<Guid, DmpBlueprintValuePersist>;
contacts: DmpContactPersist[];
}
export interface DmpBlueprintValuePersist {
fieldId: Guid;
fieldValue: string;
references: 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;
}