@@ -9,10 +9,10 @@ const db = require('../db/')
9
9
const getIp = require ( '../utils/getIp' )
10
10
const api = require ( '../http/' )
11
11
const confirmToken = require ( '../middleware/confirmToken' )
12
- const unpublishedPermission = require ( '../middleware/unpublishedPermission ' )
12
+ const confirmUnpublish = require ( '../middleware/confirmUnpublish ' )
13
13
14
14
// 获取文章列表 / 按分类 / 按标签 筛选文章
15
- router . get ( '/api/front/article/gets' , unpublishedPermission , async ( req , res ) => {
15
+ router . get ( '/api/front/article/gets' , confirmUnpublish , async ( req , res ) => {
16
16
const params = { }
17
17
if ( req . query . publish ) params . publish = req . query . publish
18
18
if ( req . query . categoryId ) params . categoryId = req . query . categoryId
@@ -164,7 +164,7 @@ router.patch('/api/front/article/like', async (req, res) => {
164
164
} )
165
165
166
166
// 文章搜索
167
- router . get ( '/api/front/article/search' , unpublishedPermission , async ( req , res ) => {
167
+ router . get ( '/api/front/article/search' , confirmUnpublish , async ( req , res ) => {
168
168
const limit = 8
169
169
const skip = req . query . page * limit - limit
170
170
try {
@@ -231,6 +231,7 @@ router.get('/api/front/article/archives', async (req, res) => {
231
231
// 按月筛选
232
232
if ( req . query . filter ) {
233
233
const pipe = [
234
+ { $match : { publish : 1 } } ,
234
235
{
235
236
$project : {
236
237
month : { $dateToString : { format : '%Y-%m' , date : '$createTime' } } ,
@@ -249,7 +250,7 @@ router.get('/api/front/article/archives', async (req, res) => {
249
250
total = totalRes [ 0 ] . total
250
251
} else {
251
252
doc = await db . article . aggregate ( [
252
- { $match : { } } ,
253
+ { $match : { publish : 1 } } ,
253
254
{ $sort : { _id : - 1 } } ,
254
255
{ $skip : skip } ,
255
256
{ $limit : limit } ,
@@ -294,7 +295,7 @@ router.get('/api/front/article/hot', (req, res) => {
294
295
/***********后台管理文章: 改动 删除 修改 TODO:待重构**************/
295
296
296
297
// 获取文章详细信息
297
- router . get ( '/api/admin/article/getDraft' , unpublishedPermission , async ( req , res ) => {
298
+ router . get ( '/api/admin/article/getDraft' , confirmToken , async ( req , res ) => {
298
299
const { articleId, excludeContent } = req . query
299
300
const project = excludeContent ? { content : 0 , content_plain : 0 , content_draft : 0 } : { content_plain : 0 }
300
301
try {
@@ -337,7 +338,7 @@ router.post('/api/admin/article/save', confirmToken, async (req, res) => {
337
338
}
338
339
} )
339
340
340
- // 编辑文档
341
+ // 编辑文档(保存、更新/发布)
341
342
router . patch ( '/api/admin/article/edit' , confirmToken , async ( req , res ) => {
342
343
const updates = { }
343
344
try {
@@ -354,7 +355,12 @@ router.patch('/api/admin/article/edit', confirmToken, async (req, res) => {
354
355
updates . content = updates . content_draft
355
356
}
356
357
}
357
-
358
+ // 数据存储前获取原始发布状态
359
+ const oldDoc = await db . article . find (
360
+ { articleId : req . body . articleId } ,
361
+ { content : 0 , content_plain : 0 , content_draft : 0 }
362
+ )
363
+ const oldPublish = oldDoc [ 0 ] . publish
358
364
await db . article . update (
359
365
{ articleId : req . body . articleId } ,
360
366
{
@@ -367,6 +373,12 @@ router.patch('/api/admin/article/edit', confirmToken, async (req, res) => {
367
373
{ articleId : req . body . articleId } ,
368
374
{ content : 0 , content_plain : 0 , content_draft : 0 }
369
375
)
376
+ // 状态不一致说明发布状态已变更,更新分类表的统计字段
377
+ if ( oldPublish != doc [ 0 ] . publish ) {
378
+ const inc = doc [ 0 ] . publish ? 1 : - 1
379
+ await db . category . update ( { _id : doc [ 0 ] . categoryId } , { $inc : { total : inc } } )
380
+ }
381
+
370
382
res . json ( {
371
383
status : 200 ,
372
384
data : doc [ 0 ] ,
@@ -381,7 +393,17 @@ router.patch('/api/admin/article/edit', confirmToken, async (req, res) => {
381
393
router . delete ( '/api/admin/article/del' , confirmToken , async ( req , res ) => {
382
394
try {
383
395
const params = typeof req . query . id === 'string' ? { _id : req . query . id } : { _id : { $in : req . query . id } }
396
+ // 维护分类表
397
+ const articlesDoc = await db . article . find ( params )
398
+ if ( articlesDoc . length ) {
399
+ articlesDoc . forEach ( async ( doc ) => {
400
+ if ( doc . publish ) {
401
+ await db . category . update ( { _id : doc . categoryId } , { $inc : { total : - 1 } } )
402
+ }
403
+ } )
404
+ }
384
405
await db . article . remove ( params )
406
+
385
407
res . json ( {
386
408
status : 200 ,
387
409
info : '删除文档成功'
0 commit comments