article.service.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { BadRequestException, Injectable } from '@nestjs/common';
  2. import { Article } from './article.entity';
  3. import { InjectRepository } from '@nestjs/typeorm';
  4. import { Like, Repository } from 'typeorm';
  5. import {
  6. CreateArticleDto,
  7. CreateArticleTranslations,
  8. GetArticleDto,
  9. QueryArticleDto,
  10. UpdateArticleDto,
  11. } from './dto';
  12. import { ArticleTranslation } from './article.entity.translation';
  13. @Injectable()
  14. export class ArticleService {
  15. constructor(
  16. @InjectRepository(Article)
  17. private articleRepo: Repository<Article>,
  18. @InjectRepository(ArticleTranslation)
  19. private articleTranslationRepo: Repository<ArticleTranslation>,
  20. ) { }
  21. async create(createArticleDto: CreateArticleDto) {
  22. const article = this.articleRepo.create(createArticleDto);
  23. return this.articleRepo.save(article);
  24. }
  25. async findAll(query: GetArticleDto) {
  26. return this.articleRepo.find({ where: query });
  27. }
  28. async findPagination(query: QueryArticleDto) {
  29. const pageSize = query.pageSize || 10;
  30. const pageNo = query.pageNo || 1;
  31. const [data, total] = await this.articleRepo.findAndCount({
  32. where: {
  33. title: Like(`%${query.title || ''}%`),
  34. enable: query.enable || undefined,
  35. },
  36. relations: { user: true, category: true, translations: true },
  37. select: {
  38. user: {
  39. id: true,
  40. username: true,
  41. },
  42. category: {
  43. id: true,
  44. title: true,
  45. },
  46. },
  47. order: {
  48. // title: 'ASC',
  49. createTime: 'DESC',
  50. },
  51. take: pageSize,
  52. skip: (pageNo - 1) * pageSize,
  53. });
  54. const pageData = data.map((item) => {
  55. return { ...item };
  56. });
  57. return { pageData, total };
  58. }
  59. async remove(id: number) {
  60. await this.articleRepo.delete(id);
  61. return true;
  62. }
  63. async find(id: number) {
  64. return await this.articleRepo.findOne({
  65. where: { id },
  66. relations: { user: true, translations: true },
  67. select: {
  68. user: {
  69. id: true,
  70. username: true,
  71. },
  72. category: {
  73. id: true,
  74. title: true,
  75. },
  76. },
  77. });
  78. }
  79. async update(id: number, updateArticleDto: UpdateArticleDto) {
  80. const article = await this.articleRepo.findOne({ where: { id } });
  81. if (!article) throw new BadRequestException('权限不存在或者已删除');
  82. const updateArticle = this.articleRepo.merge(article, updateArticleDto);
  83. await this.articleRepo.save(updateArticle);
  84. return true;
  85. }
  86. }