final commit

This commit is contained in:
Pouya Defaei
2026-05-02 08:53:14 +03:30
parent a3e53b5fd2
commit 86b393e34f
2 changed files with 42 additions and 11 deletions

View File

@@ -62,7 +62,7 @@ export class BlogsController {
async updateAboutFields( async updateAboutFields(
@Res() res: Response, @Res() res: Response,
@Body() updateAboutFieldsDto: UpdateAboutFieldsDto, @Body() updateAboutFieldsDto: UpdateAboutFieldsDto,
@Param("id", new IsUuidPipe("blog not found")) id: string @Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> { ): Promise<Response> {
await this.blogsService.updateAboutFields(id, updateAboutFieldsDto); await this.blogsService.updateAboutFields(id, updateAboutFieldsDto);
return CustomResponses.successResponse(res, "", HttpStatus.OK); return CustomResponses.successResponse(res, "", HttpStatus.OK);
@@ -83,7 +83,7 @@ export class BlogsController {
async updateFeaturedImage( async updateFeaturedImage(
@Res() res: Response, @Res() res: Response,
@Body() updateFeaturedImageDto: UpdateFeaturedImageDto, @Body() updateFeaturedImageDto: UpdateFeaturedImageDto,
@Param("id", new IsUuidPipe("blog not found")) id: string @Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> { ): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND); if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateFeaturedImageById(id, updateFeaturedImageDto.image); await this.blogsService.updateFeaturedImageById(id, updateFeaturedImageDto.image);
@@ -105,7 +105,7 @@ export class BlogsController {
async updateGallery( async updateGallery(
@Res() res: Response, @Res() res: Response,
@Body() updateGalleryDto: UpdateGalleryDto, @Body() updateGalleryDto: UpdateGalleryDto,
@Param("id", new IsUuidPipe("blog not found")) id: string @Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> { ): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND); if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateGalleryById(id, updateGalleryDto.gallery); await this.blogsService.updateGalleryById(id, updateGalleryDto.gallery);
@@ -127,7 +127,7 @@ export class BlogsController {
async updateDynamicData( async updateDynamicData(
@Res() res: Response, @Res() res: Response,
@Body() updateDynamicDataDto: UpdateDynamicDataDto, @Body() updateDynamicDataDto: UpdateDynamicDataDto,
@Param("id", new IsUuidPipe("blog not found")) id: string @Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> { ): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND); if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateDynamicDataById(id, updateDynamicDataDto); await this.blogsService.updateDynamicDataById(id, updateDynamicDataDto);
@@ -149,7 +149,7 @@ export class BlogsController {
async updateTranslations( async updateTranslations(
@Res() res: Response, @Res() res: Response,
@Body() updateTranslationsDto: UpdateTranslationsDto, @Body() updateTranslationsDto: UpdateTranslationsDto,
@Param("id", new IsUuidPipe("blog not found")) id: string @Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> { ): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND); if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateTranslationsDataById(id, updateTranslationsDto); await this.blogsService.updateTranslationsDataById(id, updateTranslationsDto);
@@ -197,7 +197,7 @@ export class BlogsController {
@Get("latest/:language") @Get("latest/:language")
async getLatestBlogs( async getLatestBlogs(
@Res() res: Response, @Res() res: Response,
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum @Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum,
): Promise<Response> { ): Promise<Response> {
const blogs = await this.blogsService.fetchLastBlogsByLanguage(language); const blogs = await this.blogsService.fetchLastBlogsByLanguage(language);
return CustomResponses.successResponse(res, "", HttpStatus.OK, blogs); return CustomResponses.successResponse(res, "", HttpStatus.OK, blogs);
@@ -208,7 +208,7 @@ export class BlogsController {
@Get("all/:language") @Get("all/:language")
async getNewestBlogs( async getNewestBlogs(
@Res() res: Response, @Res() res: Response,
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum @Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum,
): Promise<Response> { ): Promise<Response> {
const blogs = await this.blogsService.fetchNewestBlogsByLanguage(language); const blogs = await this.blogsService.fetchNewestBlogsByLanguage(language);
return CustomResponses.successResponse(res, "", HttpStatus.OK, blogs); return CustomResponses.successResponse(res, "", HttpStatus.OK, blogs);
@@ -220,9 +220,21 @@ export class BlogsController {
async getSingleBlog( async getSingleBlog(
@Res() res: Response, @Res() res: Response,
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum, @Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum,
@Param("href", new IsHrefPipe("blog not found")) href: string @Param("href", new IsHrefPipe("blog not found")) href: string,
): Promise<Response> { ): Promise<Response> {
const blog = await this.blogsService.fetchSingleBlogByLanguageAndHref(language, href); const blog = await this.blogsService.fetchSingleBlogByLanguageAndHref(language, href);
return CustomResponses.successResponse(res, "", HttpStatus.OK, blog); return CustomResponses.successResponse(res, "", HttpStatus.OK, blog);
} }
@ApiOperation({ summary: "fetch related blogs by language exception" })
@PublicRoute()
@Get("related/:href/:language")
async getRelatedBlogs(
@Res() res: Response,
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum,
@Param("href", new IsHrefPipe("blog not found")) href: string,
): Promise<Response> {
const blog = await this.blogsService.fetchRelatedBlogsByLanguageAndExceptionHref(language, href);
return CustomResponses.successResponse(res, "", HttpStatus.OK, blog);
}
} }

View File

@@ -303,12 +303,30 @@ export class BlogsService {
return blogs; return blogs;
} }
async fetchRelatedBlogsByLanguageAndExceptionHref(language: LanguageEnum, href: string): Promise<Blog[]> {
const blogs = await this.blogsRepository
.createQueryBuilder("b")
.select(["b.id", "b.featuredImage", "b.gallery", "b.href", "b.publishedAt", "b.createdAt"])
.leftJoinAndSelect("b.writer", "writer")
.leftJoinAndSelect("b.translations", "translation", "translation.language = :language", { language })
.where("b.href != :href", { href })
.andWhere("b.deletedAt IS NULL")
.andWhere("b.publishedAt IS NOT NULL")
.orderBy("b.publishedAt", "DESC")
.limit(3)
.getMany();
return blogs;
}
async fetchNewestBlogsByLanguage(language: LanguageEnum): Promise<Blog[]> { async fetchNewestBlogsByLanguage(language: LanguageEnum): Promise<Blog[]> {
const blogs = await this.blogsRepository const blogs = await this.blogsRepository
.createQueryBuilder("blog") .createQueryBuilder("blog")
.select(["blog.id", "blog.featuredImage", "blog.gallery", "blog.href", "blog.publishedAt"]) .select(["blog.id", "blog.featuredImage", "blog.gallery", "blog.href", "blog.publishedAt", "blog.createdAt"])
.leftJoinAndSelect("blog.writer", "writer")
.leftJoinAndSelect("blog.translations", "translation", "translation.language = :language", { language }) .leftJoinAndSelect("blog.translations", "translation", "translation.language = :language", { language })
.where("blog.publishedAt IS NOT NULL") .where("blog.deletedAt IS NULL")
.andWhere("blog.publishedAt IS NOT NULL")
.orderBy("blog.publishedAt", "DESC") .orderBy("blog.publishedAt", "DESC")
.getMany(); .getMany();
@@ -318,8 +336,9 @@ export class BlogsService {
async fetchSingleBlogByLanguageAndHref(language: LanguageEnum, href: string): Promise<Blog | null> { async fetchSingleBlogByLanguageAndHref(language: LanguageEnum, href: string): Promise<Blog | null> {
const blog = await this.blogsRepository const blog = await this.blogsRepository
.createQueryBuilder("blog") .createQueryBuilder("blog")
.select(["blog.id", "blog.featuredImage", "blog.gallery", "blog.href", "blog.publishedAt"]) .select(["blog.id", "blog.featuredImage", "blog.gallery", "blog.href", "blog.publishedAt", "blog.createdAt"])
.leftJoinAndSelect("blog.translations", "translation", "translation.language = :language", { language }) .leftJoinAndSelect("blog.translations", "translation", "translation.language = :language", { language })
.leftJoinAndSelect("blog.writer", "writer")
.where("blog.publishedAt IS NOT NULL AND blog.href = :href", { href }) .where("blog.publishedAt IS NOT NULL AND blog.href = :href", { href })
.getOne(); .getOne();