chore: add blog blog comment and blog category crud
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
import { ArrayMinSize, IsArray, IsBoolean, IsNotEmpty, IsString, IsUUID, MaxLength } from "class-validator";
|
||||
|
||||
import { BlogMessage } from "../../../common/enums/message.enum";
|
||||
|
||||
export class CreateBlogDto {
|
||||
@IsNotEmpty({ message: BlogMessage.TITLE_REQUIRED })
|
||||
@IsString({ message: BlogMessage.TITLE_STRING })
|
||||
@MaxLength(150, { message: BlogMessage.TITLE_MAX_LENGTH })
|
||||
@ApiProperty({ description: "Title of the blog", example: "Blog Title" })
|
||||
title: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.PREVIEW_CONTENT_REQUIRED })
|
||||
@IsString({ message: BlogMessage.PREVIEW_CONTENT_STRING })
|
||||
@MaxLength(150, { message: BlogMessage.PREVIEW_CONTENT_MAX_LENGTH })
|
||||
@ApiProperty({ description: "Preview content of the blog", example: "Preview content of the blog" })
|
||||
previewContent: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.CONTENT_REQUIRED })
|
||||
@IsString({ message: BlogMessage.CONTENT_STRING })
|
||||
@MaxLength(600, { message: BlogMessage.CONTENT_MAX_LENGTH })
|
||||
@ApiProperty({ description: "Content of the blog", example: "Content of the blog" })
|
||||
content: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.IMAGE_URL_REQUIRED })
|
||||
@IsString({ message: BlogMessage.IMAGE_URL_STRING })
|
||||
@MaxLength(150, { message: BlogMessage.IMAGE_URL_MAX_LENGTH })
|
||||
imageUrl: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.META_TITLE_REQUIRED })
|
||||
@IsString({ message: BlogMessage.META_TITLE_STRING })
|
||||
@MaxLength(60, { message: BlogMessage.META_TITLE_MAX_LENGTH })
|
||||
@ApiProperty({ description: "Meta title of the blog", example: "Meta title of the blog" })
|
||||
metaTitle: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.META_DESCRIPTION_REQUIRED })
|
||||
@IsString({ message: BlogMessage.META_DESCRIPTION_STRING })
|
||||
@MaxLength(160, { message: BlogMessage.META_DESCRIPTION_MAX_LENGTH })
|
||||
@ApiProperty({ description: "Meta description of the blog", example: "Meta description of the blog" })
|
||||
metaDescription: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.TAGS_REQUIRED })
|
||||
@IsArray({ message: BlogMessage.TAGS_ARRAY })
|
||||
@IsString({ each: true, message: BlogMessage.TAGS_STRING })
|
||||
@ArrayMinSize(1, { message: BlogMessage.TAGS_MIN_SIZE })
|
||||
@ApiProperty({ description: "Tags of the blog", example: ["tag1", "tag2", "tag3"] })
|
||||
tags: string[];
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.CATEGORY_ID_REQUIRED })
|
||||
@IsUUID("4", { message: BlogMessage.CATEGORY_ID_UUID })
|
||||
@ApiProperty({ description: "Category ID of the blog", example: "123e4567-e89b-12d3-a456-426614174000" })
|
||||
categoryId: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.IS_ACTIVE_REQUIRED })
|
||||
@IsBoolean({ message: BlogMessage.IS_ACTIVE_SHOULD_BE_A_BOOLEAN })
|
||||
@ApiProperty({ description: "Is active of the blog", example: true })
|
||||
isActive: boolean;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
import { IsBoolean, IsNotEmpty, IsString, IsUrl, MaxLength } from "class-validator";
|
||||
|
||||
import { BlogMessage } from "../../../common/enums/message.enum";
|
||||
|
||||
export class CreateCategoryDto {
|
||||
@IsNotEmpty({ message: BlogMessage.TITLE_REQUIRED })
|
||||
@IsString({ message: BlogMessage.TITLE_STRING })
|
||||
@MaxLength(100, { message: BlogMessage.TITLE_MAX_LENGTH })
|
||||
@ApiProperty({ description: "The title of the category", example: "This is the title of the category" })
|
||||
title: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.DESCRIPTION_REQUIRED })
|
||||
@IsString({ message: BlogMessage.DESCRIPTION_STRING })
|
||||
@MaxLength(255, { message: BlogMessage.DESCRIPTION_MAX_LENGTH })
|
||||
@ApiProperty({ description: "The description of the category", example: "This is the description of the category" })
|
||||
description: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.ICON_URL_REQUIRED })
|
||||
@IsUrl({ protocols: ["http", "https"] }, { message: BlogMessage.ICON_URL_INVALID })
|
||||
@MaxLength(255, { message: BlogMessage.ICON_URL_MAX_LENGTH })
|
||||
@ApiProperty({ description: "The URL of the icon for the category", example: "https://example.com/icon.png" })
|
||||
iconUrl: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.IS_ACTIVE_REQUIRED })
|
||||
@IsBoolean({ message: BlogMessage.IS_ACTIVE_SHOULD_BE_A_BOOLEAN })
|
||||
@ApiProperty({ description: "The status of the category", example: true })
|
||||
isActive: boolean;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
import { IsNotEmpty, IsString } from "class-validator";
|
||||
|
||||
import { BlogMessage } from "../../../common/enums/message.enum";
|
||||
|
||||
export class CreateCommentDto {
|
||||
@IsNotEmpty({ message: BlogMessage.TITLE_REQUIRED })
|
||||
@IsString({ message: BlogMessage.TITLE_STRING })
|
||||
@ApiProperty({ description: "the title of comment" })
|
||||
title: string;
|
||||
|
||||
@IsNotEmpty({ message: BlogMessage.COMMENT_CONTENT_REQUIRED })
|
||||
@IsString({ message: BlogMessage.COMMENT_CONTENT_STRING })
|
||||
@ApiProperty({ description: "the content of comment", example: "sd" })
|
||||
content: string;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
import { IsNotEmpty, IsString } from "class-validator";
|
||||
|
||||
import { BlogMessage } from "../../../common/enums/message.enum";
|
||||
|
||||
export class BlogSlugDto {
|
||||
@IsNotEmpty({ message: BlogMessage.SLUG_NOT_EMPTY })
|
||||
@IsString({ message: BlogMessage.SLUG_STRING })
|
||||
@ApiProperty({ description: "The slug of the blog", example: "blog-slug" })
|
||||
slug: string;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
import { ApiPropertyOptional, PickType } from "@nestjs/swagger";
|
||||
import { Type } from "class-transformer";
|
||||
import { IsDateString, IsIn, IsOptional, IsString, IsUUID } from "class-validator";
|
||||
|
||||
import { PaginationDto } from "../../../common/DTO/pagination.dto";
|
||||
import { BlogMessage, CategoryMessage } from "../../../common/enums/message.enum";
|
||||
|
||||
export class BlogListSearchQueryDto extends PaginationDto {
|
||||
@IsOptional()
|
||||
@IsString({ message: BlogMessage.SEARCH_QUERY_STRING })
|
||||
@ApiPropertyOptional({ description: "Search query", example: "search query" })
|
||||
q?: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsUUID(4, { message: CategoryMessage.CAT_ID_SHOULD_BE_UUID })
|
||||
@ApiPropertyOptional({ description: "Category id", example: "8b1e8b1e-8b1e-8b1e-8b1e-8b1e8b1e8b1e" })
|
||||
categoryId?: string;
|
||||
|
||||
@IsOptional()
|
||||
@IsDateString({}, { message: BlogMessage.INVALID_DATE })
|
||||
@ApiPropertyOptional({ description: "since query", example: "2025-01-27" })
|
||||
since?: string;
|
||||
|
||||
@IsOptional()
|
||||
@Type(() => Number)
|
||||
@IsIn([1, 0], { message: BlogMessage.IS_ACTIVE_SHOULD_BE_1_0 })
|
||||
@ApiPropertyOptional({ description: "blog status", example: 1 })
|
||||
isActive?: number;
|
||||
}
|
||||
|
||||
export class BlogSearchQueryDto extends PickType(BlogListSearchQueryDto, ["limit", "page", "categoryId"] as const) {}
|
||||
@@ -0,0 +1,5 @@
|
||||
import { PartialType } from "@nestjs/swagger";
|
||||
|
||||
import { CreateBlogDto } from "./create-blog.dto";
|
||||
|
||||
export class UpdateBlogDto extends PartialType(CreateBlogDto) {}
|
||||
@@ -0,0 +1,5 @@
|
||||
import { PartialType } from "@nestjs/swagger";
|
||||
|
||||
import { CreateCategoryDto } from "./create-category.dto";
|
||||
|
||||
export class UpdateCategoryDto extends PartialType(CreateCategoryDto) {}
|
||||
@@ -0,0 +1,12 @@
|
||||
import { ApiProperty } from "@nestjs/swagger";
|
||||
import { IsEnum, IsNotEmpty } from "class-validator";
|
||||
|
||||
import { BlogMessage } from "../../../common/enums/message.enum";
|
||||
import { CommentStatus } from "../enums/comment-status.enum";
|
||||
|
||||
export class UpdateCommentStatusDto {
|
||||
@IsNotEmpty({ message: BlogMessage.COMMENT_STATUS_REQUIRED })
|
||||
@IsEnum(CommentStatus)
|
||||
@ApiProperty({ description: "the status of comment", example: CommentStatus.APPROVED, enum: CommentStatus })
|
||||
status: CommentStatus;
|
||||
}
|
||||
Reference in New Issue
Block a user