管理员列出post

This commit is contained in:
juzeon 2021-07-25 20:04:04 +08:00
父節點 959bf13156
當前提交 8f7a71321b
共有 7 個檔案被更改,包括 61 行新增4 行删除

查看文件

@ -1,5 +1,6 @@
NDH_PORT=9444 NDH_PORT=9444
NDH_JWT_SECRET= NDH_JWT_SECRET=
NDH_POST_PER_PAGE=10
NDH_DB_HOST= NDH_DB_HOST=
NDH_DB_USER= NDH_DB_USER=

查看文件

@ -5,6 +5,7 @@ const appConfig = {
dbUser: process.env.NDH_DB_USER, dbUser: process.env.NDH_DB_USER,
dbPassword: process.env.NDH_DB_PASSWORD, dbPassword: process.env.NDH_DB_PASSWORD,
dbName: process.env.NDH_DB_NAME, dbName: process.env.NDH_DB_NAME,
jwtSecret:process.env.NDH_JWT_SECRET || 'default-jwt-secret' jwtSecret: process.env.NDH_JWT_SECRET || 'default-jwt-secret',
postPerPage: process.env.NDH_POST_PER_PAGE as any as number
} }
export {appConfig} export {appConfig}

查看文件

@ -77,3 +77,7 @@ export function getAxiosInstance() {
export function getTimestampInSeconds() { export function getTimestampInSeconds() {
return Math.floor(Date.now() / 1000) return Math.floor(Date.now() / 1000)
} }
export function pageToLimitSqlSegment(page: number) {
return ' limit ' + (page - 1) * appConfig.postPerPage + ',' + appConfig.postPerPage
}

查看文件

@ -8,6 +8,7 @@ import expressJWT from 'express-jwt'
import type {ErrorRequestHandler} from "express" import type {ErrorRequestHandler} from "express"
import {IResultJson} from "./types" import {IResultJson} from "./types"
import {postRouter} from "./routers/post-router" import {postRouter} from "./routers/post-router"
import {adminRouter} from "./routers/admin-router"
const app = express() const app = express()
@ -30,7 +31,8 @@ const authErrorHandler: ErrorRequestHandler =
app.use(authErrorHandler) app.use(authErrorHandler)
app.use('/user', userRouter) app.use('/user', userRouter)
app.use('/post',postRouter) app.use('/post', postRouter)
app.use('/admin',adminRouter)
async function entrypoint() { async function entrypoint() {
await getPoolCreatingPromise() await getPoolCreatingPromise()

查看文件

@ -1,7 +1,8 @@
import 'reflect-metadata' import 'reflect-metadata'
import {Service} from "typedi" import {Service} from "typedi"
import {IPost} from "../types" import {IPost, TPostStatus} from "../types"
import {db} from "../includes" import {db, pageToLimitSqlSegment} from "../includes"
import {fillIPost} from "../helpers/entity-fill"
@Service() @Service()
export class PostModel { export class PostModel {
@ -10,4 +11,10 @@ export class PostModel {
post.userId, post.content, post.image, post.status, post.time post.userId, post.content, post.image, post.status, post.time
]) ])
} }
async findPostByStatus(status: TPostStatus, page: number) {
let arr = await db.query('select * from posts where status=? order by time desc '
+ pageToLimitSqlSegment(page),[status])
return arr.map((single: any) => fillIPost(single))
}
} }

查看文件

@ -0,0 +1,27 @@
import 'reflect-metadata'
import express from "express"
import {JWTUserPayload, TPostStatus} from "../types"
import {hasValidationErrors, resultJson} from "../includes"
import {param, query} from "express-validator"
import {Container} from "typedi"
import {AdminService} from "../services/admin-service"
let adminService = Container.get(AdminService)
let adminRouter = express.Router()
adminRouter.use((req: express.Request, res: express.Response, next) => {
if ((req.user as JWTUserPayload).role < 2) {
res.json(resultJson.error('您需要管理员权限来造访该接口'))
} else {
next()
}
})
adminRouter.get('/list/:status',
param('status').isIn([1, 2, 3]).withMessage('Post状态仅支援1,2,3'),
query('page').default(1).isInt({min: 1}).withMessage('页码必须>=1'),
async (req: express.Request, res: express.Response) => {
if(hasValidationErrors(req,res)) return
res.json(await adminService.list(req.params.status as any as TPostStatus, req.query.page as any as number))
}
)
export {adminRouter}

查看文件

@ -0,0 +1,15 @@
import 'reflect-metadata'
import {Inject, Service} from "typedi"
import {TPostStatus} from "../types"
import {resultJson} from "../includes"
import {PostModel} from "../models/post-model"
@Service()
export class AdminService {
@Inject()
postModel!: PostModel
async list(status: TPostStatus, page: number) {
return resultJson.success(await this.postModel.findPostByStatus(status, page))
}
}