2019-07-17 17:20:24 +08:00

524 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import getGameInfoModel from '../../models/admin/GameInfo'
import {Router} from 'express'
import {userInfo} from 'os'
import axios from 'axios'
import config from '../../../config/config'
import logger from '../../utils/logger'
const router = new Router()
const GameInfo = getGameInfoModel()
const GameInfoTest = getGameInfoModel('test')
// 获取游戏列表
router.get('/list', async (req, res, next) => {
const query = req.query || {}
const userPerms = req.user.permissions
try {
let search = []
let result = []
if (query.type === 'all') {
// 返回所有游戏信息仅包含游戏_id与游戏名
// logger.db(req, '游戏管理', '游戏列表', '获取所有游戏非权限信息');
result = await GameInfo.find({deleted: false})
} else {
// 有权限查阅的游戏
// logger.db(req, '游戏管理', '游戏列表', '获取权限游戏所有信息');
search = await GameInfo.find({deleted: false})
result = search.filter(game => {
const uid = game._id
return (
userPerms.includes(`${uid}-readable`) ||
userPerms.includes(`${uid}-edit`) ||
userPerms.includes(`${uid}-publish`) ||
userPerms.includes(`games-writeable`)
)
})
}
res.send({
errcode: 0,
gameList: result,
user: req.user,
})
} catch (err) {
next(err)
}
})
// 保存游戏信息
router.post('/save', async (req, res, next) => {
logger.db(req, '游戏管理', '游戏列表', '添加游戏')
// 权限判断
const hasPerm = req.user.permissions.includes('games-writeable')
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无游戏编辑权限!',
})
return
}
const body = req.body
try {
const search = await GameInfo.findOne({
$or: [
{game_id: body.game_id},
{game_name: body.game_name},
{game_name_en: body.game_name_en},
],
})
if (search && !search.deleted) {
res.send({
errcode: 1,
errmsg: '游戏已存在!',
})
} else {
const newGameInfo = new GameInfo(body)
const result = await newGameInfo.save()
res.send({
errcode: 0,
gameInfo: result,
})
}
} catch (err) {
next(err)
}
})
// 查找单个游戏信息
router.get('/info', async (req, res, next) => {
// logger.db(req, '游戏管理', '游戏列表', '查询单个游戏信息');
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.query.uid}-readable`) ||
req.user.permissions.includes(`${req.query.uid}-edit`) ||
req.user.permissions.includes(`${req.query.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏查看权限!',
})
return
}
const query = req.query
const data_type = query.data_type
const GameInfoModel = data_type === 'dev' ? GameInfoTest : GameInfo
delete req.query.data_type
try {
const search = await GameInfoModel.findOne({
_id: query.uid,
deleted: false,
})
if (search) {
res.send({
errcode: 0,
gameInfo: search,
})
} else {
res.send({
errcode: 1,
errmsg: '游戏不存在或已删除!',
})
}
} catch (err) {
next(err)
}
})
// 更新游戏信息
router.post('/update', async (req, res, next) => {
logger.db(req, '游戏管理', '游戏列表', '更新单个游戏信息')
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.body._id}-edit`) ||
req.user.permissions.includes(`${req.body._id}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无游戏编辑权限!',
})
return
}
const body = req.body
try {
const search = await GameInfo.findOne({
_id: body._id,
deleted: false,
})
if (search) {
if (body.info) {
const info = body.info
const platformInfo = search.platforms[info.platformIndex]
const curStatus = platformInfo ? platformInfo.status : ''
delete body.platforms[info.platformIndex].newPlatform
delete body.info
// 状态变更会新增平台 发送通知
if (curStatus !== info.status || !platformInfo) {
let token = ''
const loginRes = await axios({
url: config.minigame.api + 'gettoken/',
method: 'post',
data: {
username: config.minigame.username,
password: config.minigame.password,
},
})
const loginData = loginRes.data
const loginStatus = loginRes.status
if (loginStatus === 200) {
token = loginData.token
} else {
res.send({
errcode: 1,
errmsg: '游戏状态修改发生异常!',
})
return
}
const statusRes = await axios({
url: config.minigame.api + 'minigame/',
method: 'post',
data: {
action: 'game_status_change',
data: {
game: search.game_name,
game_name: search.game_name_en,
game_id: search.game_id,
platform: body.platforms[info.platformIndex].platform.name_en,
platform_name: body.platforms[info.platformIndex].platform.name,
platform_id:
body.platforms[info.platformIndex].platform.platform_id,
status_id: info.status,
},
},
headers: {
authorization: 'Bearer ' + token,
},
})
const statusStatus = statusRes.status
if (statusStatus !== 200) {
res.send({
errcode: 1,
errmsg: '游戏状态修改发生异常!',
})
return
}
}
}
const result = await GameInfo.updateOne(
{
_id: body._id,
deleted: false,
},
body
)
res.send({
errcode: 0,
})
} else {
res.send({
errcode: 1,
errmsg: '游戏不存在或已删除!',
})
}
} catch (err) {
next(err)
}
})
// 更新推荐信息
router.post('/update_rc', async (req, res, next) => {
logger.db(req, '游戏管理', '游戏列表', '更新游戏推荐列表')
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.body._id}-edit`) ||
req.user.permissions.includes(`${req.body._id}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无游戏编辑权限!',
})
return
}
const body = req.body
const isDev = body.isDev
const GameInfoModel = isDev ? GameInfoTest : GameInfo
delete body.isDev
try {
const search = await GameInfoModel.findOne({
_id: body._id,
deleted: false,
})
// TODO:
if (search) {
// 更新
const recommendation = search.recommendation ? search.recommendation : {}
if (body.platform_id) {
recommendation[body.platform_id] = body.RCList
}
const result = await GameInfoModel.updateOne(
{
_id: body._id,
deleted: false,
},
{recommendation: recommendation, rc_published: body.published}
)
res.send({
errcode: 0,
})
} else {
// 新建
const gameInfo = body.gameInfo
gameInfo.recommendation = {}
if (body.platform_id) {
gameInfo.recommendation[body.platform_id] = body.RCList
}
gameInfo.rc_published = body.published
const newGameInfo = new GameInfoModel(gameInfo)
const result = await newGameInfo.save()
res.send({
errcode: 0,
})
}
} catch (err) {
next(err)
}
})
// 删除一个游戏
router.post('/del', async (req, res, next) => {
logger.db(req, '游戏管理', '游戏列表', '删除单个游戏')
const body = req.body
// 权限判断
const hasPerm =
req.user.permissions.includes(`${body.uid}-edit`) ||
req.user.permissions.includes(`${body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无游戏编辑权限!',
})
return
}
try {
const search = await GameInfo.findOne({
_id: body.uid,
deleted: false,
})
if (search) {
const result = await GameInfo.updateOne(
{
_id: body.uid,
deleted: false,
},
{deleted: true}
)
res.send({
errcode: 0,
})
} else {
res.send({
errcode: 1,
errmsg: '游戏不存在或已删除!',
})
}
} catch (err) {
next(err)
}
})
// 创建新平台获取ftp账号
router.post('/create-ftp', async (req, res, next) => {
logger.db(req, '游戏管理', '游戏列表', '为游戏添加一个平台账号')
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.body.uid}-edit`) ||
req.user.permissions.includes(`${req.body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无游戏编辑权限!',
})
return
}
const body = req.body
try {
let token = ''
const loginRes = await axios({
url: config.minigame.api + 'gettoken/',
method: 'post',
data: {
username: config.minigame.username,
password: config.minigame.password,
},
})
const loginData = loginRes.data
const loginStatus = loginRes.status
if (loginStatus === 200) {
token = loginData.token
} else {
res.send({
errcode: 1,
errmsg: '创建ftp账号时发生错误',
})
return
}
const ftpRes = await axios({
url: config.minigame.api + 'minigame/',
method: 'post',
data: {
action: 'game_deploy',
data: {
game: body.game_name,
game_name: body.game_name_en,
game_id: body.game_id,
platform: body.platformInfo.platform.name_en,
platform_id: body.platformInfo.platform.platform_id,
},
},
headers: {
authorization: 'Bearer ' + token,
},
})
const ftpStatus = ftpRes.status
if (ftpStatus === 200) {
// 通知用户刷新页面等待ftp账号
res.send({
errcode: 0,
msg: '正在创建ftp账号请等待一段时间后刷新页面',
})
} else {
res.send({
errcode: 1,
errmsg: '创建ftp账号时发生错误',
})
return
}
} catch (err) {
next(err)
}
})
// 发布游戏配置
router.post('/deploy-config', async (req, res, next) => {
logger.db(req, '游戏管理', '游戏列表', '修改游戏平台信息')
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.body.uid}-edit`) ||
req.user.permissions.includes(`${req.body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无游戏编辑权限!',
})
return
}
const body = req.body
try {
const info = body.platformInfo
const search = await GameInfo.findOne({
game_id: body.game_id,
deleted: false,
})
if (search) {
const platforms = search.platforms
for (let i = 0; i < platforms.length; i++) {
if (platforms[i].platform.name_en === body.platform) {
platforms[i] = info
break
}
}
await GameInfo.updateOne(
{game_id: body.game_id, deleted: false},
{
platforms: platforms,
}
)
} else {
res.send({
errcode: 1,
errmsg: '游戏不存在或已删除!',
})
return
}
let token = ''
const loginRes = await axios({
url: config.minigame.api + 'gettoken/',
method: 'post',
data: {
username: config.minigame.username,
password: config.minigame.password,
},
})
const loginData = loginRes.data
const loginStatus = loginRes.status
if (loginStatus === 200) {
token = loginData.token
} else {
res.send({
errcode: 1,
errmsg: '发布配置时发生错误!',
})
}
const ftpRes = await axios({
url: config.minigame.api + 'minigame/',
method: 'post',
data: {
action: 'config_deploy',
data: {
config: {
app_id: body.app_id,
app_secret: body.app_secret,
},
game_id: body.game_id,
platform: body.platform,
},
},
headers: {
authorization: 'Bearer ' + token,
},
})
const ftpStatus = ftpRes.status
if (ftpStatus === 200) {
res.send({
errcode: 0,
})
} else {
res.send({
errcode: 1,
errmsg: 'ftp账号更新发生错误',
})
}
} catch (err) {
next(err)
}
})
export default router