All files / blog/domain blog.service.ts

38.46% Statements 5/13
0% Branches 0/2
33.33% Functions 2/6
36.36% Lines 4/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66                                                1x   3x 3x                                                       1x                    
import { Inject, Injectable } from '@nestjs/common';
import { Blog, BlogPrincipal, BlogRecord } from './models/blog.model';
import { IBlogRepository } from './blog.repository';
import { BlogRepository } from '../adapters/database/blog.repository';
import { CommentRepository } from '../adapters/database/comment.repository';
import { ICommentRepository } from './comment.repository';
 
interface IBlogService {
  search(
    search?: string,
    limit?: number,
    skip?: number,
  ): Promise<BlogPrincipal[]>;
 
  get(id: string): Promise<Blog | null>;
 
  create(blog: BlogRecord): Promise<BlogPrincipal>;
 
  update(id: string, blog: BlogRecord): Promise<BlogPrincipal>;
 
  delete(id: string): Promise<void>;
}
 
@Injectable()
class BlogService implements IBlogService {
  constructor(
    @Inject(BlogRepository) private readonly repo: IBlogRepository,
    @Inject(CommentRepository) private readonly commentRepo: ICommentRepository,
  ) {}
 
  create(blog: BlogRecord): Promise<BlogPrincipal> {
    return this.repo.create(blog);
  }
 
  delete(id: string): Promise<void> {
    return this.repo.delete(id);
  }
 
  async get(id: string): Promise<Blog | null> {
    const blog = await this.repo.get(id);
    if (blog == null) return blog;
    const comments = await this.commentRepo.search(
      undefined,
      undefined,
      undefined,
      id,
    );
    return new Blog(blog, comments);
  }
 
  search(
    search?: string,
    limit?: number,
    skip?: number,
  ): Promise<BlogPrincipal[]> {
    return this.repo.search(search, limit, skip);
  }
 
  update(id: string, blog: BlogRecord): Promise<BlogPrincipal> {
    return this.repo.update(id, blog);
  }
}
 
export { BlogService };
export type { IBlogService };