corgi/src/admin/controllers/article.controller.ts
2021-04-19 18:06:36 +08:00

77 lines
1.8 KiB
TypeScript

import BaseController from 'common/base.controller'
import { permission, router } from 'decorators/router'
import { Article } from 'models/content/Article'
import { ZError } from '../../common/ZError'
export class ArticleController extends BaseController {
@permission('article:read')
@router('post /articles')
async query(req: any) {
let { start, limit } = req.params
start = +start || 0
limit = +limit || 10
let { opt, sort } = Article.parseQueryParam(req.params)
let articles = await Article.find(opt)
.sort(sort)
.skip(start)
.limit(limit)
let count = await Article.count(opt)
let records = []
for (let record of articles) {
records.push(record.toJson())
}
return {
total: count,
start,
limit,
records
}
}
@permission('article:read')
@router('get /article/:id')
async detail(req: any) {
let { id } = req.params
const record = await Article.findById(id)
if (!record) {
throw new ZError(11, 'article not found')
}
return record.toJson()
}
@permission('article:edit')
@router('post /article/save')
async save(req: any) {
let { _id } = req.params
let user = req.user
let record
if (!_id) {
record = new Article(req.params)
record.createdBy = user.id
} else {
record = await Article.findById(_id)
record.updateFromReq(req.params)
}
await record.save()
return {}
}
@permission('article:delete')
@router('post /article/:aid/delete')
async delete(req: any) {
let { id } = req.params
if (!id) {
throw new ZError(11, 'params mismatch')
}
await Article.findByIdAndUpdate(id, {
$set: {
deleted: true,
deleteTime: new Date()
}
})
return {}
}
}