shadowsocks-manager
Version:
A shadowsocks manager tool for multi user and traffic control.
132 lines (123 loc) • 4.73 kB
JavaScript
const knex = appRequire('init/knex').knex;
const getRefCode = async () => {
const code = await knex('webgui_ref_code').select([
'webgui_ref_code.code as code',
'user.email as email',
'webgui_ref_code.maxUser as maxUser',
knex.raw('count(webgui_ref.codeId) as count'),
])
.leftJoin('webgui_ref', 'webgui_ref_code.id', 'webgui_ref.codeId')
.leftJoin('user', 'webgui_ref_code.sourceUserId', 'user.id')
.groupBy('webgui_ref_code.id')
.orderBy('webgui_ref_code.time', 'DESC');
return code;
};
const getRefCodeAndPaging = async (opt) => {
const page = opt.page || 1;
const pageSize = opt.pageSize || 20;
const invalidCode = await knex('webgui_ref_code').select([
'webgui_ref_code.id as id',
])
.leftJoin('user', 'webgui_ref_code.sourceUserId', 'user.id')
.whereNull('user.id');
await knex('webgui_ref_code').delete().whereIn('id', invalidCode.map(m => m.id));
let count = knex('webgui_ref_code').select();
let code = knex('webgui_ref_code').select([
'webgui_ref_code.id as id',
'webgui_ref_code.code as code',
'user.email as email',
'webgui_ref_code.visit as visit',
'webgui_ref_code.maxUser as maxUser',
knex.raw('count(webgui_ref.codeId) as count'),
])
.leftJoin('webgui_ref', 'webgui_ref_code.id', 'webgui_ref.codeId')
.leftJoin('user', 'webgui_ref_code.sourceUserId', 'user.id')
.whereNotNull('user.id')
.groupBy('webgui_ref_code.id');
count = await count.count('id as count').then(success => success[0].count);
code = await code.orderBy('webgui_ref_code.time', 'DESC').limit(pageSize).offset((page - 1) * pageSize);
const maxPage = Math.ceil(count / pageSize);
return {
total: count,
page,
maxPage,
pageSize,
code,
};
};
const getRefUser = async () => {
const user = await knex('webgui_ref').select([
'webgui_ref_code.code as code',
'u1.email as sourceUser',
'u2.email as user',
'webgui_ref.time as time',
]).leftJoin('webgui_ref_code', 'webgui_ref.codeId', 'webgui_ref_code.id')
.leftJoin('user as u1', 'webgui_ref_code.sourceUserId', 'u1.id')
.leftJoin('user as u2', 'webgui_ref.userId', 'u2.id')
.orderBy('webgui_ref.time', 'DESC');
return user;
};
const getRefUserAndPaging = async opt => {
const page = opt.page || 1;
const pageSize = opt.pageSize || 20;
const invalidId = await knex('webgui_ref').select([
'webgui_ref.id as id',
])
.leftJoin('webgui_ref_code', 'webgui_ref.codeId', 'webgui_ref_code.id')
.leftJoin('user as u1', 'webgui_ref_code.sourceUserId', 'u1.id')
.leftJoin('user as u2', 'webgui_ref.userId', 'u2.id')
.whereNull('u1.id')
.orWhereNull('u2.id');
await knex('webgui_ref').delete().whereIn('id', invalidId.map(m => m.id));
let count = knex('webgui_ref').select();
let user = knex('webgui_ref').select([
'webgui_ref.id as id',
'webgui_ref_code.code as code',
'u1.id as sourceUserId',
'u1.email as sourceUser',
'u2.id as userId',
'u2.email as user',
'webgui_ref.time as time',
])
.leftJoin('webgui_ref_code', 'webgui_ref.codeId', 'webgui_ref_code.id')
.leftJoin('user as u1', 'webgui_ref_code.sourceUserId', 'u1.id')
.leftJoin('user as u2', 'webgui_ref.userId', 'u2.id')
.whereNotNull('u1.id')
.whereNotNull('u2.id');
count = await count.count('id as count').then(success => success[0].count);
user = await user.orderBy('webgui_ref.time', 'DESC').limit(pageSize).offset((page - 1) * pageSize);
const maxPage = Math.ceil(count / pageSize);
return {
total: count,
page,
maxPage,
pageSize,
user,
};
};
const getOneRefCode = async id => {
const code = await knex('webgui_ref_code').select([
'webgui_ref_code.id as id',
'webgui_ref_code.code as code',
'user.email as email',
'webgui_ref_code.visit as visit',
'webgui_ref_code.maxUser as maxUser',
knex.raw('count(webgui_ref.codeId) as count'),
])
.leftJoin('webgui_ref', 'webgui_ref_code.id', 'webgui_ref.codeId')
.leftJoin('user', 'webgui_ref_code.sourceUserId', 'user.id')
.groupBy('webgui_ref_code.id')
.where({ 'webgui_ref_code.id': id }).then(s => s[0]);
if(!code) { return Promise.reject('refCode not found'); }
return code;
};
const editOneRefCode = async (id, maxUser) => {
await knex('webgui_ref_code').update({ maxUser }).where({ 'webgui_ref_code.id': id });
return 'success';
};
exports.getRefCode = getRefCode;
exports.getOneRefCode = getOneRefCode;
exports.editOneRefCode = editOneRefCode;
exports.getRefUser = getRefUser;
exports.getRefCodeAndPaging = getRefCodeAndPaging;
exports.getRefUserAndPaging = getRefUserAndPaging;