1. add channel api
This commit is contained in:
@@ -2,9 +2,12 @@ const Router = require('koa-router')
|
||||
const {
|
||||
genError,
|
||||
checkSession,
|
||||
resObject
|
||||
resObject,
|
||||
chkObject,
|
||||
toInt
|
||||
} = require('@libs/route-utils')
|
||||
const r = new Router()
|
||||
const evt = require('@root/event')
|
||||
|
||||
const typeTwitch = async (c, n) => {
|
||||
let text = `select * from "public"."twitch_channel" where "id" = $1`
|
||||
@@ -22,7 +25,7 @@ const typeSystem = async (c, n) => {
|
||||
return n()
|
||||
}
|
||||
|
||||
r.get('/channels', checkSession, async (c, n) => {
|
||||
const getChannelList = async (c, n) => {
|
||||
if (c.session.loginType === 'twitch') {
|
||||
return typeTwitch(c, n)
|
||||
} else if (c.session.loginType === 'system') {
|
||||
@@ -30,7 +33,28 @@ r.get('/channels', checkSession, async (c, n) => {
|
||||
}
|
||||
|
||||
throw genError('Forbidden')
|
||||
}, async (c, n) => {
|
||||
}
|
||||
|
||||
const hasChannel = (key = '') => {
|
||||
if (typeof key !== 'string' || key.trim().length === 0) key = 'chid'
|
||||
key = key.trim()
|
||||
return async (c, n) => {
|
||||
if (!('channelList' in c.state) || !Array.isArray(c.state.channelList)) throw genError('InternalError')
|
||||
let chid = c.params[key] || ''
|
||||
c.state.chid = chid
|
||||
let chk = chkObject.bind({body: {chid}})
|
||||
if (!chk('chid', 'string')) throw genError('DataFormat')
|
||||
|
||||
if (c.state.channelList.length === 0) throw genError('NotFound', 'channel not found')
|
||||
let channel = c.state.channelList.filter(t => t.id === chid)
|
||||
if (channel.length === 0) throw genError('NotFound', 'channel not found')
|
||||
|
||||
c.state.channel = channel[0]
|
||||
return n()
|
||||
}
|
||||
}
|
||||
|
||||
r.get('/channels', checkSession, getChannelList, async (c, n) => {
|
||||
if (!('channelList' in c.state) || !Array.isArray(c.state.channelList)) throw genError('InternalError')
|
||||
|
||||
c.obj = resObject('Success', {
|
||||
@@ -38,4 +62,52 @@ r.get('/channels', checkSession, async (c, n) => {
|
||||
})
|
||||
})
|
||||
|
||||
r.get('/channel/:chid', checkSession, getChannelList, hasChannel('chid'), async (c, n) => {
|
||||
c.obj = resObject('Success', {channel: c.state.channel})
|
||||
})
|
||||
|
||||
r.put('/channel/:chid/botjoin', checkSession, getChannelList, hasChannel('chid'), async (c, n) => {
|
||||
if (!c.chkBody('join', 'number')) throw genError('DataFormat')
|
||||
let join = toInt(c.request.body.join, 0, 0, 1)
|
||||
let text = `update "public"."twitch_channel" set "join" = $1 where "id" = $2`
|
||||
let values = [!!join, c.state.channel.id]
|
||||
await c.db.query({
|
||||
text,
|
||||
values
|
||||
})
|
||||
|
||||
evt.emit(join ? 'twitchJoin' : 'twitchLeave', c.state.channel.name)
|
||||
|
||||
c.obj = resObject('Success')
|
||||
})
|
||||
|
||||
r.put('/channel/:chid/opay', checkSession, getChannelList, hasChannel('chid'), async (c, n) => {
|
||||
if (!c.chkBody('opay', 'string', true)) throw genError('DataFormat')
|
||||
|
||||
let text = `update "public"."twitch_channel" set "opayid" = $1 where "id" = $2`
|
||||
let values = [c.request.body.opay, c.state.channel.id]
|
||||
await c.db.query({
|
||||
text,
|
||||
values
|
||||
})
|
||||
|
||||
c.obj = resObject('Success')
|
||||
})
|
||||
|
||||
r.get('/channel/:chid/donation', checkSession, getChannelList, hasChannel('chid'), async (c, n) => {
|
||||
let text = `select ds.* from "public"."donate_setting" ds
|
||||
left join "public"."twitch_channel" tw
|
||||
on tw.id = ds.twitch
|
||||
where
|
||||
tw.id = $1`
|
||||
let values = [c.state.channel.id]
|
||||
let result = await c.db.query({
|
||||
text,
|
||||
values
|
||||
})
|
||||
c.obj = resObject('Success', {
|
||||
list: result.rows
|
||||
})
|
||||
})
|
||||
|
||||
module.exports = r
|
||||
|
||||
Reference in New Issue
Block a user