88 lines
2.3 KiB
TypeScript
88 lines
2.3 KiB
TypeScript
import { ApiExtraModels, ApiProperty } from "@nestjs/swagger";
|
|
import { IsArray, IsDefined, IsIn, IsInt, IsNotEmpty, IsOptional, IsString } from "class-validator";
|
|
|
|
/**
|
|
* List of allowed properties in this DTO
|
|
*/
|
|
const allowedProperties = ['id', 'title', 'authors', 'topic', 'summary', 'tags', 'content'];
|
|
|
|
/**
|
|
* Structure of the document stored and retrieved from Elasticsearch
|
|
*/
|
|
@ApiExtraModels()
|
|
export class PaperDto {
|
|
/**
|
|
* Unique ID of the paper
|
|
*/
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
@ApiProperty({
|
|
description: 'Unique ID of the paper',
|
|
example: 'cc3c3cca-f763-495c-8dfa-69c45ca738ff'
|
|
})
|
|
id: string;
|
|
|
|
/**
|
|
* Title of the paper
|
|
*/
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
@ApiProperty({
|
|
description: 'Title of the paper',
|
|
example: 'Mucosal associated invariant T cell',
|
|
})
|
|
title: string;
|
|
|
|
/**
|
|
* List of authors of the paper
|
|
*/
|
|
@IsNotEmpty()
|
|
@IsArray()
|
|
@ApiProperty({
|
|
description: 'List of authors of the paper',
|
|
example: ['Daniil Mikhaylov', 'Denis Gorbunov', 'Maxim Ten']
|
|
})
|
|
authors: string[];
|
|
|
|
/**
|
|
* Topic of the paper
|
|
*/
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
@ApiProperty({
|
|
description: 'Topic of the paper',
|
|
example: 'Physics'
|
|
})
|
|
topic: string;
|
|
|
|
/**
|
|
* Summary of the paper. May be a short excerpt from the main text.
|
|
*/
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
@ApiProperty({
|
|
description: 'Summary of the paper. May be a short excerpt from the main text',
|
|
example: 'S-algol (St Andrews Algol):vii is a computer programming language derivative of ALGOL 60 developed at the University of St Andrews in 1979 by Ron Morrison and Tony Davie'
|
|
})
|
|
summary: string;
|
|
|
|
/**
|
|
* List of tags, that show the certain topics/fields of knowledge paper is touching
|
|
*/
|
|
@IsNotEmpty()
|
|
@IsArray()
|
|
@ApiProperty({
|
|
description: 'List of tags, that show the certain topics/fields of knowledge paper is touching',
|
|
example: ['Neurobiology', 'Neuron structure', 'Neuroimaging']
|
|
})
|
|
tags: string[];
|
|
|
|
/**
|
|
* Contents of the paper [Markdown]
|
|
*/
|
|
@ApiProperty({
|
|
description: 'Contents of the paper presented in Markdown (.md) format',
|
|
example: '...'
|
|
})
|
|
content: string;
|
|
} |