生成器
This commit is contained in:
parent
61c1e77adb
commit
09ae05effa
@ -1,6 +1,9 @@
|
|||||||
import { Router } from 'express'
|
import { Router } from 'express'
|
||||||
import Maker from '../../models/maker/Maker'
|
import Maker from '../../models/maker/Maker'
|
||||||
|
import RedisDao from '../../redis/redis.dao'
|
||||||
|
import logger from '../../utils/logger';
|
||||||
|
|
||||||
|
const redisDao = new RedisDao()
|
||||||
const router = new Router()
|
const router = new Router()
|
||||||
|
|
||||||
router.get('/', async (req, res, next) => {
|
router.get('/', async (req, res, next) => {
|
||||||
@ -19,9 +22,21 @@ router.get('/', async (req, res, next) => {
|
|||||||
const pageSize = query.pageSize || 0
|
const pageSize = query.pageSize || 0
|
||||||
const start = (currentPage - 1) * pageSize
|
const start = (currentPage - 1) * pageSize
|
||||||
const limit = Number(pageSize)
|
const limit = Number(pageSize)
|
||||||
const result = await Maker.find({}).skip(start).limit(limit).sort({ createdAt: 'desc' }).select('_id title desc')
|
const order = query.order
|
||||||
|
const opt = {}
|
||||||
|
const sortObj = {}
|
||||||
|
if(order === 'ascending') {
|
||||||
|
sortObj.view = 'asc'
|
||||||
|
} else if(order === 'descending') {
|
||||||
|
sortObj.view = 'desc'
|
||||||
|
} else {
|
||||||
|
sortObj.createdAt = 'desc'
|
||||||
|
}
|
||||||
|
|
||||||
|
if(query.isRecommand) opt.isRecommand = query.isRecommand
|
||||||
|
const result = await Maker.find(opt).skip(start).limit(limit).sort(sortObj).select('_id title desc tags isRecommand view')
|
||||||
|
|
||||||
const total = await Maker.find({}).countDocuments()
|
const total = await Maker.find(opt).countDocuments()
|
||||||
res.send({
|
res.send({
|
||||||
errcode: 0,
|
errcode: 0,
|
||||||
result,
|
result,
|
||||||
@ -36,19 +51,28 @@ router.get('/', async (req, res, next) => {
|
|||||||
|
|
||||||
router.post('/', async (req, res, next) => {
|
router.post('/', async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
|
logger.db(req, '游戏管理', '生成器', '添加模板')
|
||||||
const body = req.body
|
const body = req.body
|
||||||
const title = body.title
|
const title = body.title
|
||||||
const desc = body.desc
|
const desc = body.desc
|
||||||
const template = body.template
|
const template = body.template
|
||||||
const list = body.list
|
const list = body.list
|
||||||
|
const tags = body.tags
|
||||||
|
const view = body.view
|
||||||
|
const isRecommand = body.isRecommand
|
||||||
|
|
||||||
|
|
||||||
const newMaker = new Maker({
|
const newMaker = new Maker({
|
||||||
title,
|
title,
|
||||||
desc,
|
desc,
|
||||||
template,
|
template,
|
||||||
list,
|
list,
|
||||||
|
tags,
|
||||||
|
view,
|
||||||
|
isRecommand
|
||||||
})
|
})
|
||||||
const result = await newMaker.save()
|
const result = await newMaker.save()
|
||||||
|
updateTags(tags)
|
||||||
res.send({
|
res.send({
|
||||||
errcode: 0,
|
errcode: 0,
|
||||||
result
|
result
|
||||||
@ -61,12 +85,16 @@ router.post('/', async (req, res, next) => {
|
|||||||
|
|
||||||
router.put('/', async (req, res, next) => {
|
router.put('/', async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
|
logger.db(req, '游戏管理', '生成器', '更新模板')
|
||||||
const body = req.body
|
const body = req.body
|
||||||
const _id = body._id
|
const _id = body._id
|
||||||
const title = body.title
|
const title = body.title
|
||||||
const desc = body.desc
|
const desc = body.desc
|
||||||
const template = body.template
|
const template = body.template
|
||||||
const list = body.list
|
const list = body.list
|
||||||
|
const tags = body.tags
|
||||||
|
const view = body.view
|
||||||
|
const isRecommand = body.isRecommand
|
||||||
|
|
||||||
const result = await Maker.updateOne(
|
const result = await Maker.updateOne(
|
||||||
{
|
{
|
||||||
@ -77,9 +105,12 @@ router.put('/', async (req, res, next) => {
|
|||||||
desc,
|
desc,
|
||||||
template,
|
template,
|
||||||
list,
|
list,
|
||||||
|
tags,
|
||||||
|
view,
|
||||||
|
isRecommand
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
updateTags(tags)
|
||||||
res.send({
|
res.send({
|
||||||
errcode: 0,
|
errcode: 0,
|
||||||
})
|
})
|
||||||
@ -90,6 +121,7 @@ router.put('/', async (req, res, next) => {
|
|||||||
|
|
||||||
router.delete('/', async (req, res, next) => {
|
router.delete('/', async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
|
logger.db(req, '游戏管理', '生成器', '删除模板')
|
||||||
const body = req.body
|
const body = req.body
|
||||||
const _id = body._id
|
const _id = body._id
|
||||||
const result = await Maker.deleteOne({ _id })
|
const result = await Maker.deleteOne({ _id })
|
||||||
@ -103,4 +135,42 @@ router.delete('/', async (req, res, next) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
router.get('/tags', async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
const result = await redisDao.getByKey('maker_tags') || ''
|
||||||
|
res.send({
|
||||||
|
errcode: 0,
|
||||||
|
result
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
router.put('/tags', async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
logger.db(req, '游戏管理', '生成器', '更新标签')
|
||||||
|
const body = req.body
|
||||||
|
const tags = body.tags
|
||||||
|
let result = await redisDao.updateOneKey('maker_tags', tags)
|
||||||
|
|
||||||
|
res.send({
|
||||||
|
errcode: 0,
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
async function updateTags(tags) {
|
||||||
|
let result = await redisDao.getByKey('maker_tags')
|
||||||
|
result = result ? result + ',' + tags : tags
|
||||||
|
result = result.split(',')
|
||||||
|
const map = new Set(result)
|
||||||
|
result = [...map]
|
||||||
|
result = result.join(',')
|
||||||
|
redisDao.updateOneKey('maker_tags', result)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
|
@ -10,6 +10,7 @@ import gameListRouter from './game-list'
|
|||||||
import cfgRouter from './cfg'
|
import cfgRouter from './cfg'
|
||||||
import zpRouter from './zp'
|
import zpRouter from './zp'
|
||||||
import testRouter from './test'
|
import testRouter from './test'
|
||||||
|
import makerRouter from './maker'
|
||||||
|
|
||||||
|
|
||||||
const router = new Router()
|
const router = new Router()
|
||||||
@ -22,6 +23,7 @@ router.use('/game-list', gameListRouter)
|
|||||||
router.use('/cfg',cfgRouter)
|
router.use('/cfg',cfgRouter)
|
||||||
router.use('/zp',zpRouter)
|
router.use('/zp',zpRouter)
|
||||||
router.use('/test',testRouter)
|
router.use('/test',testRouter)
|
||||||
|
router.use('/maker',makerRouter)
|
||||||
|
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
|
191
src/controllers/open/maker.js
Normal file
191
src/controllers/open/maker.js
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
// 小程序-心里测试专用
|
||||||
|
|
||||||
|
import { Router } from 'express'
|
||||||
|
import Maker from '../../models/maker/Maker'
|
||||||
|
|
||||||
|
const router = new Router()
|
||||||
|
|
||||||
|
// 获取生成器列表:最新、最热、页数、推荐
|
||||||
|
router.get('/list', async (req, res, next) => {
|
||||||
|
|
||||||
|
try {
|
||||||
|
const query = req.query
|
||||||
|
const type = query.type
|
||||||
|
const select = '_id title desc tags view'
|
||||||
|
let result = []
|
||||||
|
if (type === 'new') {
|
||||||
|
result = await Maker.find({}).skip(0).limit(10).sort({ createdAt: 'desc' }).select(select)
|
||||||
|
|
||||||
|
} else if (type === 'hot') {
|
||||||
|
result = await Maker.find({}).skip(0).limit(10).sort({ view: 'desc' }).select(select)
|
||||||
|
} else if (type === 'recommand') {
|
||||||
|
result = await Maker.find({ isRecommand: true }).skip(0).limit(10).sort({ view: 'desc' }).select(select)
|
||||||
|
} else {
|
||||||
|
const currentPage = query.currentPage || 0
|
||||||
|
const pageSize = query.pageSize || 0
|
||||||
|
const start = (currentPage - 1) * pageSize
|
||||||
|
const limit = Number(pageSize)
|
||||||
|
result = await Maker.find({}).skip(start).limit(limit).sort({ view: 'desc' }).select(select)
|
||||||
|
}
|
||||||
|
|
||||||
|
res.send({
|
||||||
|
errcode: 0,
|
||||||
|
result
|
||||||
|
})
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 查询生成器:关键词、标签
|
||||||
|
router.get('/search', async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
const query = req.query
|
||||||
|
const key = query.key
|
||||||
|
const regTag = /^tag:.*/
|
||||||
|
const select = '_id title desc tags view'
|
||||||
|
let result = []
|
||||||
|
if (regTag.test(key)) {
|
||||||
|
const reg = new RegExp(key.slice(4))
|
||||||
|
result = await Maker.find({ tags: { $regex: reg } }).select(select)
|
||||||
|
} else {
|
||||||
|
const reg = new RegExp(key)
|
||||||
|
result = await Maker.find({ title: { $regex: reg } }).select(select)
|
||||||
|
}
|
||||||
|
res.send({
|
||||||
|
errcode: 0,
|
||||||
|
result
|
||||||
|
})
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 获取单条详情
|
||||||
|
router.get('/details', async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
const query = req.query
|
||||||
|
const _id = query._id
|
||||||
|
const result = await Maker.findOne({ _id }).select('_id title desc')
|
||||||
|
const regUser = /\[n(\d+)\]/g
|
||||||
|
let count = 0 //计算输入个数
|
||||||
|
let text = result.template
|
||||||
|
// 己算输入个数
|
||||||
|
while (regUser.test(text)) {
|
||||||
|
text = text.replace(regUser, (match, p1) => {
|
||||||
|
count++
|
||||||
|
return '天外来客'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
res.send({
|
||||||
|
errcode: 0,
|
||||||
|
result,
|
||||||
|
count
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 生成结果
|
||||||
|
router.get('/result', async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
const query = req.query
|
||||||
|
const _id = query._id
|
||||||
|
let users = query.users
|
||||||
|
const search = await Maker.findOne({ _id })
|
||||||
|
let text = search.template
|
||||||
|
users = users.split(',')
|
||||||
|
|
||||||
|
const regUser = /\[n(\d+)\]/g
|
||||||
|
const regList = /\[i(\d+)\]/g
|
||||||
|
const regPer1 = /\[%\]/g
|
||||||
|
const regPer2 = /\[∞\]/g
|
||||||
|
const regNum = /\[(0+)\]/g
|
||||||
|
|
||||||
|
// 替换用户输入
|
||||||
|
while (regUser.test(text)) {
|
||||||
|
text = text.replace(regUser, (match, p1) => {
|
||||||
|
return users[p1] || '天外来客'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 替换清单
|
||||||
|
while (regList.test(text)) {
|
||||||
|
text = text.replace(regList, (match, p1) => {
|
||||||
|
const list = search.list[p1].text.split(',')
|
||||||
|
const idx = Math.floor(Math.random() * list.length)
|
||||||
|
return list[idx] || '天外来客'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//替换百分比
|
||||||
|
let countP = 0
|
||||||
|
while (regPer1.test(text)) {
|
||||||
|
text = text.replace(regPer1, (match, p1) => {
|
||||||
|
countP++
|
||||||
|
return '[∞]'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const nums = randomNum(countP, 100)
|
||||||
|
let idx = 0
|
||||||
|
while (regPer2.test(text)) {
|
||||||
|
text = text.replace(regPer2, (match, p1) => {
|
||||||
|
return nums[idx++] + '%'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 替换随机数字
|
||||||
|
while (regNum.test(text)) {
|
||||||
|
text = text.replace(regNum, (match, p1) => {
|
||||||
|
return Math.floor(Math.random() * Math.pow(10, p1.length))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const result = text.split('\n')
|
||||||
|
res.send({
|
||||||
|
errcode: 0,
|
||||||
|
result
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 增加浏览数
|
||||||
|
router.post('/view', async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
const body = query.body
|
||||||
|
const _id = body._id
|
||||||
|
const search = await Maker.findOne({ _id })
|
||||||
|
const view = search.view || 0
|
||||||
|
const result = await Maker.updateOne({ _id }, {
|
||||||
|
view: view + 1
|
||||||
|
})
|
||||||
|
res.send({
|
||||||
|
errcode: 0,
|
||||||
|
result
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
next(err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 生成随机数
|
||||||
|
function randomNum(n, v) {
|
||||||
|
var i,
|
||||||
|
s = 0,
|
||||||
|
r = [],
|
||||||
|
x = v
|
||||||
|
for (i = 1; i < n; i++) {
|
||||||
|
x = Math.random() * x
|
||||||
|
r.push(x.toFixed(0))
|
||||||
|
s += x
|
||||||
|
x = v - s
|
||||||
|
}
|
||||||
|
r.push(x.toFixed(0))
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
export default router
|
@ -5,10 +5,13 @@ import mongoose from 'mongoose';
|
|||||||
* 生成器
|
* 生成器
|
||||||
*/
|
*/
|
||||||
const Maker = new mongoose.Schema({
|
const Maker = new mongoose.Schema({
|
||||||
title: {type: String},
|
title: { type: String, default: '' },
|
||||||
desc: {type: String},
|
desc: { type: String, default: '' },
|
||||||
template: {type: String},
|
template: { type: String, default: '' },
|
||||||
list: {type: Object},
|
list: { type: Object, default: {} },
|
||||||
|
tags: { type: String, default: '' },
|
||||||
|
view: { type: String, default: 0 },
|
||||||
|
isRecommand: { type: Boolean, default: false }
|
||||||
}, {
|
}, {
|
||||||
collection: 'maker',
|
collection: 'maker',
|
||||||
timestamps: true,
|
timestamps: true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user