管理员列出post
This commit is contained in:
父節點
959bf13156
當前提交
8f7a71321b
@ -1,5 +1,6 @@
|
||||
NDH_PORT=9444
|
||||
NDH_JWT_SECRET=
|
||||
NDH_POST_PER_PAGE=10
|
||||
|
||||
NDH_DB_HOST=
|
||||
NDH_DB_USER=
|
||||
|
@ -5,6 +5,7 @@ const appConfig = {
|
||||
dbUser: process.env.NDH_DB_USER,
|
||||
dbPassword: process.env.NDH_DB_PASSWORD,
|
||||
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}
|
||||
|
@ -77,3 +77,7 @@ export function getAxiosInstance() {
|
||||
export function getTimestampInSeconds() {
|
||||
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 {IResultJson} from "./types"
|
||||
import {postRouter} from "./routers/post-router"
|
||||
import {adminRouter} from "./routers/admin-router"
|
||||
|
||||
const app = express()
|
||||
|
||||
@ -30,7 +31,8 @@ const authErrorHandler: ErrorRequestHandler =
|
||||
app.use(authErrorHandler)
|
||||
|
||||
app.use('/user', userRouter)
|
||||
app.use('/post',postRouter)
|
||||
app.use('/post', postRouter)
|
||||
app.use('/admin',adminRouter)
|
||||
|
||||
async function entrypoint() {
|
||||
await getPoolCreatingPromise()
|
||||
|
@ -1,7 +1,8 @@
|
||||
import 'reflect-metadata'
|
||||
import {Service} from "typedi"
|
||||
import {IPost} from "../types"
|
||||
import {db} from "../includes"
|
||||
import {IPost, TPostStatus} from "../types"
|
||||
import {db, pageToLimitSqlSegment} from "../includes"
|
||||
import {fillIPost} from "../helpers/entity-fill"
|
||||
|
||||
@Service()
|
||||
export class PostModel {
|
||||
@ -10,4 +11,10 @@ export class PostModel {
|
||||
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))
|
||||
}
|
||||
}
|
||||
|
27
src/routers/admin-router.ts
Normal file
27
src/routers/admin-router.ts
Normal file
@ -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}
|
15
src/services/admin-service.ts
Normal file
15
src/services/admin-service.ts
Normal file
@ -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))
|
||||
}
|
||||
}
|
載入中…
x
新增問題並參考
Block a user