import { ApiExtraModels, ApiProperty, PartialType } from "@nestjs/swagger";
import { IsArray } from "class-validator";
import { PageMetaDto } from "./page-meta.dto";
import { PaperDto } from "./paper.dto";

/**
 * List of allowed properties in this DTO
 */
const allowedProperties = ['data', 'meta'];

/**
 * Page model for pagination
 */
@ApiExtraModels()
export class PageDto {
    /**
     * Data block of the page
     */
    @IsArray()
    @ApiProperty({
        description: 'All data (papers) the page contains',
        isArray: true,
        type: PaperDto,
    })
    readonly data: PaperDto[];

    /**
     * Metadata of the page
     */
    @ApiProperty({
        description: 'Metadata for the page',
        type: PageMetaDto,
        
    })
    readonly meta: PageMetaDto;

    /**
     * Constructs an object with provided parameters
     * @param data 
     * @param meta 
     */
    constructor(data: PaperDto[], meta: PageMetaDto) {
        this.data = data;
        this.meta = meta;
    }
}