'use strict'; const Controller = require('egg').Controller; /** * 新闻控制器 - NewsController * * 负责新闻通知的查询和展示。 * 支持按 group 组别过滤、按 pinned 置顶过滤、分页查询。 * * 主要接口: * - GET /api/news : 获取新闻列表(支持 ?group= & ?pinned= & ?page= & ?pageSize= 参数) * - GET /api/news/:id : 获取新闻详情 */ class NewsController extends Controller { /** * 获取新闻列表 * * Query 参数: * - group: 组别筛选(如 zhongzhi/gaozhi/benke/jiaoshi),不传则返回全部 * - pinned: 是否仅返回置顶新闻(true/false),不传则返回全部 * - page: 页码,默认 1 * - pageSize: 每页数量,默认 20 * * 排序规则:置顶优先(pinned DESC),然后按发布时间降序 */ async index() { const { ctx, service } = this; const { group, pinned, page, pageSize } = ctx.query; const result = await service.news.list({ group, pinned, page, pageSize }); ctx.body = ctx.helper.success(result, '获取新闻列表成功'); } /** * 获取新闻详情 * * 通过 URL 参数 :id 获取单条新闻的完整信息。 */ async show() { const { ctx, service } = this; const { id } = ctx.params; const news = await service.news.findById(id); if (!news) { ctx.body = ctx.helper.error(4001, '新闻不存在'); return; } ctx.body = ctx.helper.success(news, '获取新闻详情成功'); } /** * 获取各分组新闻计数 * GET /api/news/counts * * 返回各分组可见新闻数量,用于首页 Tab 显示 */ async counts() { const { ctx, service } = this; const result = await service.news.getGroupCounts(); ctx.body = ctx.helper.success(result, '获取分组计数成功'); } } module.exports = NewsController;