byChannel.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { defineEventHandler, EventHandlerRequest } from 'h3';
  2. import { DB } from '~~/server/db/DB';
  3. import { createErrorResponse, createSuccessResponse, IResponse } from '~~/server/utils/response';
  4. import { CommonPageResult } from '~~/server/db/CommonModel';
  5. import type { IArticle } from './[id]';
  6. export default defineEventHandler<EventHandlerRequest, Promise<IResponse<CommonPageResult<IArticle>>>>(async (event) => {
  7. try {
  8. const query = getQuery(event);
  9. const page = query.page as string;
  10. const pageSize = query.pageSize as string;
  11. const channelId = query.channelId as string;
  12. const includeChilds = query.includeChilds === 'true';
  13. if (!channelId)
  14. return createErrorResponse('分类ID不能为空');
  15. const dbquery = DB.table('pr_cms_archives')
  16. .whereNull('deletetime')
  17. .where('status', 'normal')
  18. .orderBy('weigh', 'desc')
  19. .orderBy('publishtime', 'desc')
  20. .orderBy('createtime', 'desc')
  21. .orderBy('id', 'asc');
  22. if (includeChilds) {
  23. const childChannels = await DB.table('pr_cms_channel')
  24. .where('parent_id', channelId)
  25. .select('id')
  26. .get();
  27. dbquery.whereIn('channel_id', [channelId, ...childChannels.map(item => item.id)]);
  28. } else {
  29. dbquery.where('channel_id', channelId);
  30. }
  31. const articles = await dbquery.paginate(Number(page), Number(pageSize));
  32. if (!articles)
  33. return createErrorResponse('文章不存在');
  34. return createSuccessResponse(articles);
  35. } catch (error) {
  36. return createErrorResponse(error);
  37. }
  38. });