Files
clipperia-api/src/modules/videos/dto/create-video-dto.ts
2025-10-03 00:59:51 -03:00

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;
}