75 lines
1.4 KiB
TypeScript
75 lines
1.4 KiB
TypeScript
import dayjs from 'dayjs';
|
|
import duration from 'dayjs/plugin/duration';
|
|
|
|
import { Transform } from 'class-transformer';
|
|
import {
|
|
IsArray,
|
|
IsNumber,
|
|
IsOptional,
|
|
IsString,
|
|
IsUrl,
|
|
MaxLength,
|
|
} from 'class-validator';
|
|
|
|
dayjs.extend(duration);
|
|
|
|
export class CreateVideoDto {
|
|
@IsOptional()
|
|
@IsString({ message: 'Id deve ser uma string' })
|
|
@MaxLength(244)
|
|
id?: string;
|
|
|
|
@IsOptional()
|
|
@IsArray({ message: 'Tags deve ser um array' })
|
|
tags?: string[];
|
|
|
|
@IsUrl()
|
|
@MaxLength(244)
|
|
url!: string;
|
|
|
|
@IsOptional()
|
|
@IsArray({ message: 'Categories deve ser um array' })
|
|
categories?: string[];
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(244)
|
|
title?: string;
|
|
|
|
@IsOptional()
|
|
@IsUrl()
|
|
@MaxLength(244)
|
|
thumbnail?: string;
|
|
|
|
@IsOptional()
|
|
@IsString({ message: 'Videoid deve ser uma string' })
|
|
@MaxLength(244)
|
|
videoid?: string;
|
|
|
|
@IsOptional()
|
|
@IsString({ message: 'Duration deve ser uma string' })
|
|
@Transform(({ value }: { value: number }) => {
|
|
const duration = dayjs.duration(value, 'seconds');
|
|
|
|
return duration.format('HH:mm:ss');
|
|
})
|
|
duration?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(244)
|
|
description?: string;
|
|
|
|
@IsOptional()
|
|
@IsNumber(
|
|
{ allowNaN: false, allowInfinity: false },
|
|
{ message: 'Timestamp deve ser um número' },
|
|
)
|
|
@Transform(({ value }: { value: number }) => {
|
|
const duration = dayjs(value * 1000);
|
|
|
|
return duration.format('DD/MM/YYYY HH:mm:ss');
|
|
})
|
|
timestamp?: string;
|
|
}
|