From a5976a337722c32dd4432970355e3e882d5caee8 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Tue, 15 Apr 2025 12:02:17 +0330 Subject: [PATCH] update: add blog slug to the dto --- src/common/enums/message.enum.ts | 2 ++ src/configs/typeorm.config.ts | 2 +- src/modules/blogs/DTO/create-blog.dto.ts | 6 ++++++ src/modules/blogs/providers/blogs.service.ts | 9 +++++++-- .../blogs/repositories/blog-categories.repository.ts | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index 5064bbf..d36fdbe 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -673,6 +673,8 @@ export const enum BlogMessage { IS_ACTIVE_SHOULD_BE_1_0 = "وضعیت فعال بودن باید یکی از ۱ یا ۰ باشد", SEARCH_QUERY_STRING = "رشته جستجو باید یک رشته باشد", IS_PINNED_SHOULD_BE_A_BOOLEAN = "وضعیت سنجاق بودن باید یک بولین باشد", + SLUG_REQUIRED = "اسلاگ بلاگ الزامی است", + SLUG_MAX_LENGTH = "حداکثر طول اسلاگ بلاگ باید ۱۵۰ کاراکتر باشد", } export const enum SliderMessage { diff --git a/src/configs/typeorm.config.ts b/src/configs/typeorm.config.ts index 8d8378f..9391ab2 100755 --- a/src/configs/typeorm.config.ts +++ b/src/configs/typeorm.config.ts @@ -13,7 +13,7 @@ export function databaseConfigs(): TypeOrmModuleAsyncOptions { username: configService.getOrThrow("DB_USER"), password: configService.getOrThrow("DB_PASS"), autoLoadEntities: true, - synchronize: configService.getOrThrow("NODE_ENV") == "production" ? false : true, + synchronize: configService.getOrThrow("NODE_ENV") == "production" ? false : false, logging: configService.getOrThrow("NODE_ENV") == "production" ? false : true, migrationsTableName: "typeorm_migrations", migrationsRun: false, diff --git a/src/modules/blogs/DTO/create-blog.dto.ts b/src/modules/blogs/DTO/create-blog.dto.ts index 182cab9..4ac24d1 100644 --- a/src/modules/blogs/DTO/create-blog.dto.ts +++ b/src/modules/blogs/DTO/create-blog.dto.ts @@ -10,6 +10,12 @@ export class CreateBlogDto { @ApiProperty({ description: "Title of the blog", example: "Blog Title" }) title: string; + @IsNotEmpty({ message: BlogMessage.SLUG_REQUIRED }) + @IsString({ message: BlogMessage.SLUG_STRING }) + @MaxLength(150, { message: BlogMessage.SLUG_MAX_LENGTH }) + @ApiProperty({ description: "Slug of the blog", example: "blog-title" }) + slug: string; + @IsNotEmpty({ message: BlogMessage.PREVIEW_CONTENT_REQUIRED }) @IsString({ message: BlogMessage.PREVIEW_CONTENT_STRING }) @MaxLength(150, { message: BlogMessage.PREVIEW_CONTENT_MAX_LENGTH }) diff --git a/src/modules/blogs/providers/blogs.service.ts b/src/modules/blogs/providers/blogs.service.ts index 7cd4972..a1930b4 100644 --- a/src/modules/blogs/providers/blogs.service.ts +++ b/src/modules/blogs/providers/blogs.service.ts @@ -98,7 +98,7 @@ export class BlogsService { const category = await this.findCategoryById(createBlogDto.categoryId); - const slug = this.generateSlug(createBlogDto.title); + const slug = this.generateSlug(createBlogDto.slug); const blog = this.blogsRepository.create({ ...createBlogDto, @@ -123,7 +123,6 @@ export class BlogsService { if (updateBlogDto.title) { const existBlog = await this.blogsRepository.findOne({ where: { title: updateBlogDto.title, id: Not(id) } }); if (existBlog) throw new BadRequestException(BlogMessage.BLOG_ALREADY_EXISTS); - blog.slug = this.generateSlug(updateBlogDto.title); } if (updateBlogDto.categoryId) { @@ -131,6 +130,12 @@ export class BlogsService { blog.category = category; } + if (updateBlogDto.slug) { + const existBlog = await this.blogsRepository.findOne({ where: { slug: updateBlogDto.slug, id: Not(id) } }); + if (existBlog) throw new BadRequestException(BlogMessage.BLOG_ALREADY_EXISTS); + blog.slug = this.generateSlug(updateBlogDto.slug); + } + await this.blogsRepository.save({ ...blog, ...updateBlogDto }); return { diff --git a/src/modules/blogs/repositories/blog-categories.repository.ts b/src/modules/blogs/repositories/blog-categories.repository.ts index 612bf5f..637219e 100644 --- a/src/modules/blogs/repositories/blog-categories.repository.ts +++ b/src/modules/blogs/repositories/blog-categories.repository.ts @@ -39,7 +39,7 @@ export class BlogCategoriesRepository extends Repository { query.andWhere("blogCategory.isActive = :isActive", { isActive: queryDto.isActive }); } - query.skip(skip).take(limit).orderBy({ createdAt: "DESC" }); + query.skip(skip).take(limit).orderBy("blogCategory.createdAt", "DESC"); return query.getManyAndCount(); }