增加游戏ip屏蔽的配置

This commit is contained in:
zhl 2020-11-11 15:28:41 +08:00
parent b61a2d76b5
commit 317f87d343
7 changed files with 170 additions and 3 deletions

View File

@ -58,6 +58,7 @@
"yargs": "^13.2.4"
},
"devDependencies": {
"@types/express": "^4.17.8",
"babel-cli": "^6.26.0",
"babel-preset-node8": "1.2.0",
"cross-env": "^5.2.0",

View File

@ -49,6 +49,51 @@ router.get('/china_region', async (req, res, next) => {
}
})
/* 获取省市列表, id为_id*/
router.get('/china_region_id', async (req, res, next) => {
try {
const provinces = await ChinaRegion.find({level: 1})
const citys = await ChinaRegion.find({level: 2, pinyin: {$ne: null}})
const result = []
const map = new Map()
const pIdx = {}
for (let i = 0; i < provinces.length; i++) {
result.push({
id: provinces[i]._id+'',
pid: '0',
name: provinces[i].short_name,
children: [],
})
map.set(provinces[i]._id, provinces[i])
if (!pIdx[provinces[i]._id]) {
pIdx[provinces[i]._id] = i
}
}
for (const c of citys) {
if (map.has(c.parent_id)) {
const pIndex = pIdx[c.parent_id]
result[pIndex].children.push({
id: c._id+'',
pid: map.get(c.parent_id)._id+'',
name: c.short_name,
})
}
}
// for (let data of result) {
// if (data.children.length <= 1) {
// data.children = [];
// }
// }
res.json({
errcode: 0,
records: result,
})
} catch (err) {
next(err)
}
})
/* 获取所有定义好的地域列表*/
router.get('/china_area', async (req, res, next) => {
try {

View File

@ -216,7 +216,7 @@ router.post('/update', async (req, res, next) => {
_id: body._id,
deleted: false,
},
{platforms, platforms}
{platforms}
)
res.send({
errcode: 0,
@ -228,7 +228,7 @@ router.post('/update', async (req, res, next) => {
_id: body._id,
deleted: false,
},
{platforms, platforms}
{platforms}
)
res.send({
errcode: 0,

View File

@ -11,6 +11,7 @@ import dataRouter from './data';
import giftRouter from './gift';
import orderRouter from './order';
import mailRouter from './mail';
import ipRouter from './ip';
@ -31,6 +32,7 @@ router.use('/data', dataRouter);
router.use('/gift', giftRouter);
router.use('/order', orderRouter);
router.use('/mail', mailRouter);
router.use('/ip', ipRouter);
router.use('/', gamesRouter);
export default router;

View File

@ -0,0 +1,59 @@
import {Router} from 'express'
import logger from '../../utils/logger'
import GameIpBlock from '../../models/snoopy/GameIpBlock';
const router = new Router();
router.get('/:gid/:pid', async (req, res, next) => {
let {gid, pid} = req.params;
if (!gid) {
return res.json({errcode: 101, errmsg: '参数不足'});
}
if (!pid) pid = 'all';
let data = await GameIpBlock.findInfo(gid, pid);
if (data) {
for (let obj of data.areas) {
obj._doc.pid = '0';
for (let subObj of obj.children) {
subObj._doc.pid = obj.id;
}
}
}
res.json({errcode: 0, errmsg: '', data});
});
router.post('/update', async (req, res, next) => {
logger.db(req, '游戏管理', 'IPBlock', '更新游戏IP屏蔽信息');
let data = req.body.data;
// 权限判断
const hasPerm =
req.user.permissions.includes(`${data.game_id}-edit`) ||
req.user.permissions.includes(`${data.game_id}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
return res.status(403).send({
errcode: 1,
errmsg: '用户无游戏编辑权限!',
})
}
try {
await GameIpBlock.updateOne({
game_id: data.game_id,
platform_id: data.platform_id,
},
{$set: data},
{upsert: true}
)
res.json({
errcode: 0,
})
} catch (err) {
res.json({errcode: 102,
errmsg: '保存出错!',});
}
})
export default router;

View File

@ -41,5 +41,30 @@ const ChinaRegion = new mongoose.Schema({
const conn = dbUtil.getConnSnoopy();
export default conn.model('ChinaRegion', ChinaRegion);
const ChinaRegionModel = conn.model('ChinaRegion', ChinaRegion);
ChinaRegionModel.fetchDataMap = async function (level) {
let map = new Map();
if (level >= 1) {
let datas = await ChinaRegion.find({level: 1});
for (let data of datas) {
map.set(data._id, data);
}
}
if (level >= 2) {
let datas = await ChinaRegion.find({level: 2});
for (let data of datas) {
map.set(data._id, data);
}
}
if (level >= 3) {
let datas = await ChinaRegion.find({level: 3});
for (let data of datas) {
map.set(data._id, data);
}
}
return map;
}
export default ChinaRegionModel;

View File

@ -0,0 +1,35 @@
import mongoose from 'mongoose'
import dbUtil from '../../utils/db.util'
const GameIpBlock = new mongoose.Schema({
// 游戏id
game_id: {type: String},
// 平台id
platform_id: {type: String},
// 启动参数白名单
more_params: {type: String},
// 屏蔽地区列表
areas: [{
_id: false,
id: {type: String},
name: {type: String},
all: {type: Boolean, default: false},
children: [{_id: false, id: {type: String}, name: {type: String}}]}],
// 屏蔽时间段列表
times: [{_id: false, start: {type: String}, end: {type: String}}],
}, {
collection: 'game_ip_block',
timestamps: true,
})
GameIpBlock.index({game_id: 1, platform_id: 1}, {unique: true});
const conn = dbUtil.getConnSnoopy();
let GameIpBlockModel = conn.model('GameIpBlock', GameIpBlock);
GameIpBlockModel.findInfo = function (gid, pid) {
return GameIpBlockModel.findOne({game_id: gid, platform_id: pid});
}
export default GameIpBlockModel;