chore: 后端首次基线提交
运行必须源码:app/(controller/model/service/middleware/lib/utils/validate/router)、config/、database/(migrations/seeders/sql)、启动脚本、app/public/templates 模板。 已忽略运行非必须:node_modules/、logs/、run/、app/public 运行时上传数据、.env*、构建/缓存产物。
This commit is contained in:
70
app/controller/news.js
Normal file
70
app/controller/news.js
Normal file
@@ -0,0 +1,70 @@
|
||||
'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;
|
||||
Reference in New Issue
Block a user