postiz/libraries/nestjs-libraries/src/dtos/posts/providers-settings/reddit.dto.ts

75 lines
1.4 KiB
TypeScript

import {
ArrayMinSize,
IsBoolean,
IsDefined,
IsString,
IsUrl,
Matches,
MinLength,
ValidateIf,
ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';
export class RedditFlairDto {
@IsString()
@IsDefined()
id: string;
@IsString()
@IsDefined()
name: string;
}
export class RedditSettingsDtoInner {
@IsString()
@MinLength(2)
@IsDefined()
subreddit: string;
@IsString()
@MinLength(2)
@IsDefined()
title: string;
@IsString()
@MinLength(2)
@IsDefined()
type: string;
@IsUrl()
@IsDefined()
@ValidateIf((o) => o.type === 'link' && o?.url?.indexOf('(post:') === -1)
@Matches(
/^(|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})$/,
{
message: 'Invalid URL',
}
)
url: string;
@IsBoolean()
@IsDefined()
is_flair_required: boolean;
@ValidateIf((e) => e.is_flair_required)
@IsDefined()
@ValidateNested()
@Type(() => RedditFlairDto)
flair: RedditFlairDto;
}
export class RedditSettingsValueDto {
@Type(() => RedditSettingsDtoInner)
@IsDefined()
@ValidateNested()
value: RedditSettingsDtoInner;
}
export class RedditSettingsDto {
@Type(() => RedditSettingsValueDto)
@ValidateNested({ each: true })
@ArrayMinSize(1)
subreddit: RedditSettingsValueDto[];
}