diff --git a/backend/src/modules/blog/services/BlogPostsService.spec.ts b/backend/src/modules/blog/services/BlogPostsService.spec.ts index 64d4e5f..ad16f29 100644 --- a/backend/src/modules/blog/services/BlogPostsService.spec.ts +++ b/backend/src/modules/blog/services/BlogPostsService.spec.ts @@ -1,6 +1,6 @@ import { NotFoundException } from '@nestjs/common'; import type { Repository } from 'typeorm'; -import { resolveBlogImagePath } from '../../../config/uploadPaths'; +import { getBlogImagePublicUrl, resolveBlogImagePath } from '../../../config/uploadPaths'; import { removeFileFromDisk } from '../../../utils/removeFileFromDisk'; import { BlogPost } from '../entities/BlogPost'; import { BlogPostsService } from './BlogPostsService'; @@ -58,7 +58,28 @@ describe('BlogPostsService', () => { id: 'post-1', title: '', contentHtml: '', - isDraft: true + isDraft: true, + thumbnailUrl: null, + bannerUrl: null + }) + ); + }); + + it('maps image storage keys to public urls', async () => { + blogPostRepo.findOne.mockResolvedValue({ + id: 'post-1', + title: 'Hello', + thumbnailStorageKey: 'thumb.webp', + bannerStorageKey: 'banner.webp', + contentHtml: '
Body
', + isDraft: false + }); + + await expect(service.findOne('post-1')).resolves.toEqual( + expect.objectContaining({ + title: 'Hello', + thumbnailUrl: getBlogImagePublicUrl('thumb.webp'), + bannerUrl: getBlogImagePublicUrl('banner.webp') }) ); }); diff --git a/backend/src/modules/blog/services/BlogPostsService.ts b/backend/src/modules/blog/services/BlogPostsService.ts index 72a24ea..042d6b7 100644 --- a/backend/src/modules/blog/services/BlogPostsService.ts +++ b/backend/src/modules/blog/services/BlogPostsService.ts @@ -1,12 +1,13 @@ import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { resolveBlogImagePath } from '../../../config/uploadPaths'; +import { getBlogImagePublicUrl, resolveBlogImagePath } from '../../../config/uploadPaths'; import type { PaginatedResponse } from '../../../types/PaginatedResponse'; import { removeFileFromDisk } from '../../../utils/removeFileFromDisk'; import type { ListBlogPostsQueryDto } from '../dto/ListBlogPostsQueryDto'; import { UpdateBlogPostDto } from '../dto/UpdateBlogPostDto'; import { BlogPost } from '../entities/BlogPost'; +import type { BlogPostExtended } from '../types/BlogPostExtended'; @Injectable() export class BlogPostsService { @@ -15,17 +16,19 @@ export class BlogPostsService { private readonly blogPostRepo: Repository