add moodules

This commit is contained in:
2026-04-17 23:42:24 +01:00
parent 532458ecfa
commit a7fbb2c466
54 changed files with 3074 additions and 74 deletions
@@ -0,0 +1,14 @@
import { Type } from 'class-transformer';
import { IsInt, IsOptional, IsUUID, Max, Min } from 'class-validator';
export class AttachImageDto {
@IsUUID()
imageId: string;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(0)
@Max(10_000)
sortOrder?: number;
}
@@ -0,0 +1,53 @@
import { ArticleStatus } from '@prisma/client';
import {
ArrayUnique,
IsArray,
IsEnum,
IsOptional,
IsString,
IsUUID,
MaxLength,
MinLength,
} from 'class-validator';
export class CreateArticleDto {
@IsString()
@MinLength(1)
@MaxLength(200)
title: string;
@IsOptional()
@IsString()
@MaxLength(220)
slug?: string;
@IsString()
@MinLength(1)
content: string;
@IsOptional()
@IsString()
@MaxLength(500)
excerpt?: string;
@IsOptional()
@IsEnum(ArticleStatus)
status?: ArticleStatus;
@IsOptional()
@IsArray()
@ArrayUnique()
@IsUUID('4', { each: true })
categoryIds?: string[];
@IsOptional()
@IsArray()
@ArrayUnique()
@IsUUID('4', { each: true })
tagIds?: string[];
@IsOptional()
@IsArray()
@IsUUID('4', { each: true })
imageIds?: string[];
}
@@ -0,0 +1,36 @@
import { Type } from 'class-transformer';
import { IsEnum, IsInt, IsOptional, IsString, IsUUID, Max, Min } from 'class-validator';
import { ArticleStatus } from '@prisma/client';
export class ListArticlesQueryDto {
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
page?: number = 1;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
@Max(100)
limit?: number = 20;
@IsOptional()
@IsString()
search?: string;
@IsOptional()
@IsUUID()
categoryId?: string;
@IsOptional()
@IsUUID()
tagId?: string;
}
export class ManageArticlesQueryDto extends ListArticlesQueryDto {
@IsOptional()
@IsEnum(ArticleStatus)
status?: ArticleStatus;
}
@@ -0,0 +1,55 @@
import { ArticleStatus } from '@prisma/client';
import {
ArrayUnique,
IsArray,
IsEnum,
IsOptional,
IsString,
IsUUID,
MaxLength,
MinLength,
} from 'class-validator';
export class UpdateArticleDto {
@IsOptional()
@IsString()
@MinLength(1)
@MaxLength(200)
title?: string;
@IsOptional()
@IsString()
@MaxLength(220)
slug?: string;
@IsOptional()
@IsString()
@MinLength(1)
content?: string;
@IsOptional()
@IsString()
@MaxLength(500)
excerpt?: string;
@IsOptional()
@IsEnum(ArticleStatus)
status?: ArticleStatus;
@IsOptional()
@IsArray()
@ArrayUnique()
@IsUUID('4', { each: true })
categoryIds?: string[];
@IsOptional()
@IsArray()
@ArrayUnique()
@IsUUID('4', { each: true })
tagIds?: string[];
@IsOptional()
@IsArray()
@IsUUID('4', { each: true })
imageIds?: string[];
}