byChannelName.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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, ICommonPageResult } from '~~/server/db/CommonModel';
  5. import type { IArticle } from './[id]';
  6. export default defineEventHandler<EventHandlerRequest, Promise<IResponse<ICommonPageResult<IArticle> & {
  7. channel_id: number;
  8. }>>>(async (event) => {
  9. try {
  10. const query = getQuery(event);
  11. const page = Number(query.page as string) || 1;
  12. const pageSize = Number(query.pageSize as string) || 10;
  13. const channelName = query.channelName as string;
  14. if (!channelName)
  15. return createErrorResponse('分类名称不能为空');
  16. // 1. 从pr_cms_channel表中通过name查询channel_id
  17. const channel = await DB.table('pr_cms_channel')
  18. .where('name', channelName)
  19. .where('status', 'normal')
  20. .select('id')
  21. .first();
  22. // 如果没有找到对应的频道,返回空数组
  23. if (!channel)
  24. return createSuccessResponse(new CommonPageResult<IArticle>(undefined, [], page, pageSize, 0));
  25. // 2. 从pr_cms_archives表中通过channel_id查询文章
  26. const channelId = channel.id;
  27. const articles = await DB.table('pr_cms_archives')
  28. .where('channel_id', channelId)
  29. .where('status', 'normal')
  30. .whereNull('deletetime')
  31. .orderBy('weigh', 'desc')
  32. .orderBy('publishtime', 'desc')
  33. .orderBy('createtime', 'desc')
  34. .orderBy('id', 'asc')
  35. .paginate(page, pageSize);
  36. if (!articles)
  37. return createErrorResponse('文章不存在');
  38. return createSuccessResponse({
  39. channel_id: channelId,
  40. ...articles
  41. });
  42. } catch (error) {
  43. return createErrorResponse(error);
  44. }
  45. });