111 lines
2.9 KiB
JavaScript
111 lines
2.9 KiB
JavaScript
|
/**
|
||
|
* add group to database
|
||
|
* @param {string} txt command body format => groupName notifyEnable(0,1)
|
||
|
* @param {object} source
|
||
|
* @param {object} db
|
||
|
*/
|
||
|
const addGroup = async (txt, source = {}, db) => {
|
||
|
if (!db) return null
|
||
|
if (!('type' in source) || !('groupId' in source) || !('userId' in source)) return null
|
||
|
let {groupId, userId} = source
|
||
|
let arr = txt.split(' ')
|
||
|
if (arr.length < 2 || !isFinite(arr[1])) return null
|
||
|
let name = arr[0]
|
||
|
let notify = arr[1]
|
||
|
if (typeof notify === 'string') notify = parseInt(notify)
|
||
|
if (notify !== 0 && notify !== 1) return null
|
||
|
let text = `select "id" from "public"."line_group" where "id" = $1`
|
||
|
let values = [groupId]
|
||
|
let result = await db.query({
|
||
|
text,
|
||
|
values
|
||
|
})
|
||
|
if (result.rowCount > 0) {
|
||
|
let reply = 'group exists'
|
||
|
return { reply }
|
||
|
}
|
||
|
text = `insert into "public"."line_group" ("id", "name", "notify", "owner", "ctime", "mtime") values ($1, $2, $3, $4, now(), now())`
|
||
|
values = [groupId, name, (notify === 1), userId]
|
||
|
await db.query({
|
||
|
text,
|
||
|
values
|
||
|
})
|
||
|
let reply = 'add success'
|
||
|
return { reply }
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* add facebook page notify to group
|
||
|
* @param {string} txt command body format => pageid name tmpl
|
||
|
* @param {object} source
|
||
|
* @param {object} db
|
||
|
*/
|
||
|
const addPage = async (txt, source = {}, db) => {
|
||
|
if (!db) return null
|
||
|
if (!('type' in source) || !('groupId' in source) || !('userId' in source)) return null
|
||
|
let {groupId, userId} = source
|
||
|
let arr = txt.split(' ')
|
||
|
if (arr.length < 3) return null
|
||
|
let page = arr[0]
|
||
|
let name = arr[1]
|
||
|
let tmpl = arr.slice(2).join(' ')
|
||
|
let text = `select "id","owner" from "public"."line_group" where "id" = $1`
|
||
|
let values = [groupId]
|
||
|
let result = await db.query({
|
||
|
text,
|
||
|
values
|
||
|
})
|
||
|
if (result.rowCount === 0) {
|
||
|
let reply = 'group not register'
|
||
|
return { reply }
|
||
|
}
|
||
|
if (result.rows[0].owner !== userId) {
|
||
|
let reply = 'not owner'
|
||
|
return { reply }
|
||
|
}
|
||
|
// check pageid in group
|
||
|
text = `select fb."id" from "public"."facebook_page" fb
|
||
|
left join "public"."line_group" line
|
||
|
on fb."groupid" = line."id"
|
||
|
where
|
||
|
fb."pageid" = $1`
|
||
|
values = [page]
|
||
|
result = await db.query({
|
||
|
text,
|
||
|
values
|
||
|
})
|
||
|
if (result.rowCount > 0) {
|
||
|
let reply = 'page exists'
|
||
|
return { reply }
|
||
|
}
|
||
|
// check page name in group
|
||
|
text = `select fb."id" from "public"."facebook_page" fb
|
||
|
left join "public"."line_group" line
|
||
|
on fb."groupid" = line."id"
|
||
|
where
|
||
|
fb."name" = $1`
|
||
|
values = [name]
|
||
|
result = await db.query({
|
||
|
text,
|
||
|
values
|
||
|
})
|
||
|
if (result.rowCount > 0) {
|
||
|
let reply = 'page name exists'
|
||
|
return { reply }
|
||
|
}
|
||
|
text = `insert into "public"."facebook_page" ("groupid", "pageid", "name", "tmpl", "ctime", "mtime") values
|
||
|
($1, $2, $3, $4, now(), now())`
|
||
|
values = [groupId, page, name, tmpl]
|
||
|
await db.query({
|
||
|
text,
|
||
|
values
|
||
|
})
|
||
|
let reply = 'add page success'
|
||
|
return { reply }
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
addgroup: addGroup,
|
||
|
addpage: addPage
|
||
|
}
|