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(
@Res() res: Response,
@Body() updateAboutFieldsDto: UpdateAboutFieldsDto,
@Param("id", new IsUuidPipe("blog not found")) id: string
@Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> {
await this.blogsService.updateAboutFields(id, updateAboutFieldsDto);
return CustomResponses.successResponse(res, "", HttpStatus.OK);
@@ -83,7 +83,7 @@ export class BlogsController {
async updateFeaturedImage(
@Res() res: Response,
@Body() updateFeaturedImageDto: UpdateFeaturedImageDto,
@Param("id", new IsUuidPipe("blog not found")) id: string
@Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateFeaturedImageById(id, updateFeaturedImageDto.image);
@@ -105,7 +105,7 @@ export class BlogsController {
async updateGallery(
@Res() res: Response,
@Body() updateGalleryDto: UpdateGalleryDto,
@Param("id", new IsUuidPipe("blog not found")) id: string
@Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateGalleryById(id, updateGalleryDto.gallery);
@@ -127,7 +127,7 @@ export class BlogsController {
async updateDynamicData(
@Res() res: Response,
@Body() updateDynamicDataDto: UpdateDynamicDataDto,
@Param("id", new IsUuidPipe("blog not found")) id: string
@Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateDynamicDataById(id, updateDynamicDataDto);
@@ -149,7 +149,7 @@ export class BlogsController {
async updateTranslations(
@Res() res: Response,
@Body() updateTranslationsDto: UpdateTranslationsDto,
@Param("id", new IsUuidPipe("blog not found")) id: string
@Param("id", new IsUuidPipe("blog not found")) id: string,
): Promise<Response> {
if (!(await this.blogsService.isBlogExistsById(id))) throw new ApiError("blog not found", HttpStatus.NOT_FOUND);
await this.blogsService.updateTranslationsDataById(id, updateTranslationsDto);
@@ -197,7 +197,7 @@ export class BlogsController {
@Get("latest/:language")
async getLatestBlogs(
@Res() res: Response,
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum,
): Promise<Response> {
const blogs = await this.blogsService.fetchLastBlogsByLanguage(language);
return CustomResponses.successResponse(res, "", HttpStatus.OK, blogs);
@@ -208,7 +208,7 @@ export class BlogsController {
@Get("all/:language")
async getNewestBlogs(
@Res() res: Response,
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum
@Param("language", new IsLanguageEnumPipe("language not found")) language: LanguageEnum,
): Promise<Response> {
const blogs = await this.blogsService.fetchNewestBlogsByLanguage(language);
return CustomResponses.successResponse(res, "", HttpStatus.OK, blogs);
@@ -220,9 +220,21 @@ export class BlogsController {
async getSingleBlog(
@Res() res: Response,
@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> {
const blog = await this.blogsService.fetchSingleBlogByLanguageAndHref(language, href);
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;
}
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[]> {
const blogs = await this.blogsRepository
.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 })
.where("blog.publishedAt IS NOT NULL")
.where("blog.deletedAt IS NULL")
.andWhere("blog.publishedAt IS NOT NULL")
.orderBy("blog.publishedAt", "DESC")
.getMany();
@@ -318,8 +336,9 @@ export class BlogsService {
async fetchSingleBlogByLanguageAndHref(language: LanguageEnum, href: string): Promise<Blog | null> {
const blog = await this.blogsRepository
.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.writer", "writer")
.where("blog.publishedAt IS NOT NULL AND blog.href = :href", { href })
.getOne();