2722 lines
84 KiB
JavaScript
2722 lines
84 KiB
JavaScript
var express = require("express");
|
|
var router = express.Router();
|
|
var util = require("util");
|
|
|
|
var utils = require("../../../../src/utils");
|
|
var crossCtl = require("../../../../src/crossCtl");
|
|
|
|
var path = require("path");
|
|
|
|
var passport = require("passport");
|
|
|
|
var localHandler = require("../../");
|
|
|
|
var mysql = require("mysql");
|
|
|
|
var moment = require("moment");
|
|
|
|
const fs = require("fs");
|
|
const e = require("express");
|
|
|
|
const xlsx = require("xlsx");
|
|
|
|
// operation
|
|
/*
|
|
router.use(function (req, res, next) {
|
|
|
|
|
|
next()
|
|
})
|
|
*/
|
|
|
|
router.get("/local/download/:filename", function (req, res) {
|
|
if (req.isAuthenticated() && req.infos.userInfo.adminFlag) {
|
|
console.log("req.params = ", req.params);
|
|
console.log("req.query = ", req.query);
|
|
|
|
var hero = req.query;
|
|
|
|
var qry = "";
|
|
|
|
var subWhereClause = "";
|
|
var subUnitLength = 8;
|
|
|
|
if (hero.unit != undefined) {
|
|
switch (hero.unit) {
|
|
case "year":
|
|
subUnitLength = 4;
|
|
break;
|
|
case "month":
|
|
subUnitLength = 6;
|
|
break;
|
|
case "day":
|
|
subUnitLength = 8;
|
|
break;
|
|
case "hour":
|
|
subUnitLength = 10;
|
|
break;
|
|
}
|
|
}
|
|
if (hero.uid != undefined) {
|
|
if (hero.uid != "all") {
|
|
subWhereClause += " AND uid = " + mysql.escape(hero.uid);
|
|
}
|
|
}
|
|
if (hero.key != undefined) {
|
|
if (hero.key != "all") {
|
|
subWhereClause += " AND api_key = " + mysql.escape(hero.key);
|
|
}
|
|
}
|
|
|
|
var filename = req.params.filename;
|
|
|
|
const book = xlsx.utils.book_new();
|
|
|
|
// const summary = xlsx.utils.aoa_to_sheet(JSON.parse(req.query.jsonData));
|
|
|
|
// xlsx.utils.book_append_sheet(book, summary, "Summary");
|
|
|
|
if (hero.tag === "word") {
|
|
qry =
|
|
"SELECT " +
|
|
" word, sum(count) as count_sum " +
|
|
"FROM " +
|
|
localHandler.db.options.database +
|
|
".tbl_word_statistics WHERE " +
|
|
"date_tag >= " +
|
|
mysql.escape(hero.startDateTag.substring(0, subUnitLength)) +
|
|
" AND date_tag <= " +
|
|
mysql.escape(hero.endDateTag.substring(0, subUnitLength)) +
|
|
" " +
|
|
subWhereClause +
|
|
" AND CHAR_LENGTH(date_tag) = " +
|
|
subUnitLength +
|
|
" GROUP BY word ORDER BY count_sum DESC, word ASC";
|
|
|
|
// console.log('qry = ', qry);
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
// console.log('results = ', results);
|
|
if (results.length > 0) {
|
|
var fullData = xlsx.utils.json_to_sheet(results, {});
|
|
|
|
fullData["A" + (results.length + 2)] = { v: "합계" };
|
|
|
|
fullData["!ref"] = xlsx.utils.encode_range({
|
|
s: { c: 0, r: 0 },
|
|
e: { c: 1, r: 1 + results.length + 1 },
|
|
});
|
|
fullData["B" + (results.length + 2)] = { f: "SUM(B2:B" + (results.length + 1) + ")" };
|
|
|
|
xlsx.utils.book_append_sheet(book, fullData, "검출 단어 통계");
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
var tmpId = utils.shortid();
|
|
var targetPath = path.join(__dirname, "../../../../", crossCtl.sConfig.cache, "/", tmpId + ".xlsx");
|
|
|
|
// @files 엑셀파일을 생성하고 저장한다.
|
|
|
|
console.log("targetPath=", targetPath);
|
|
|
|
crossCtl.cache.useFile(targetPath);
|
|
|
|
xlsx.writeFile(book, targetPath);
|
|
|
|
let mimeType = utils.getMimeFromPath(targetPath);
|
|
// console.log("in ck, mimeType=", mimeType);
|
|
|
|
fs.access(targetPath, fs.constants.F_OK, function (error) {
|
|
if (error) {
|
|
req.workTag.res().status(404).send("not found");
|
|
} else {
|
|
req.workTag.res().status(200).type(mimeType).sendFile(targetPath);
|
|
}
|
|
});
|
|
} else {
|
|
req.workTag.res().status(404).send("not found");
|
|
}
|
|
}
|
|
});
|
|
} else if (hero.tag === "usage") {
|
|
qry =
|
|
"SELECT " +
|
|
"date_tag, sum(total) as total, sum(hit) as hit, sum(size) as size " +
|
|
"FROM " +
|
|
localHandler.db.options.database +
|
|
".tbl_key_statistics WHERE " +
|
|
"date_tag >= " +
|
|
mysql.escape(hero.startDateTag.substring(0, subUnitLength)) +
|
|
" AND date_tag <= " +
|
|
mysql.escape(hero.endDateTag.substring(0, subUnitLength)) +
|
|
" " +
|
|
subWhereClause +
|
|
" AND CHAR_LENGTH(date_tag) = " +
|
|
subUnitLength +
|
|
" GROUP BY date_tag ORDER BY date_tag ASC";
|
|
|
|
// console.log('qry = ', qry);
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
// console.log('results = ', results);
|
|
if (results.length > 0) {
|
|
var fullData = xlsx.utils.json_to_sheet(results, {});
|
|
|
|
fullData["A" + (results.length + 2)] = { v: "합계" };
|
|
|
|
fullData["!ref"] = xlsx.utils.encode_range({
|
|
s: { c: 0, r: 0 },
|
|
e: { c: 3, r: 1 + results.length + 1 },
|
|
//
|
|
});
|
|
fullData["B" + (results.length + 2)] = { f: "SUM(B2:B" + (results.length + 1) + ")" };
|
|
fullData["C" + (results.length + 2)] = { f: "SUM(C2:C" + (results.length + 1) + ")" };
|
|
fullData["D" + (results.length + 2)] = { f: "SUM(D2:D" + (results.length + 1) + ")" };
|
|
|
|
xlsx.utils.book_append_sheet(book, fullData, "사용량 통계");
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
var tmpId = utils.shortid();
|
|
var targetPath = path.join(__dirname, "../../../../", crossCtl.sConfig.cache, "/", tmpId + ".xlsx");
|
|
|
|
// @files 엑셀파일을 생성하고 저장한다.
|
|
|
|
console.log("targetPath=", targetPath);
|
|
|
|
crossCtl.cache.useFile(targetPath);
|
|
|
|
xlsx.writeFile(book, targetPath);
|
|
|
|
let mimeType = utils.getMimeFromPath(targetPath);
|
|
// console.log("in ck, mimeType=", mimeType);
|
|
|
|
fs.access(targetPath, fs.constants.F_OK, function (error) {
|
|
if (error) {
|
|
req.workTag.res().status(404).send("not found");
|
|
} else {
|
|
req.workTag.res().status(200).type(mimeType).sendFile(targetPath);
|
|
}
|
|
});
|
|
} else {
|
|
req.workTag.res().status(404).send("not found");
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "not found",
|
|
});
|
|
}
|
|
|
|
// @breif CELL 넓이 지정
|
|
/*
|
|
sheet_data["!cols"] = [
|
|
|
|
{ wpx : 130 } // A열
|
|
|
|
, { wpx : 100 } // B열
|
|
|
|
, { wpx : 80 } // C열
|
|
|
|
, { wch : 60 } // D열
|
|
|
|
]
|
|
*/
|
|
|
|
// @breif 첫번째 시트에 작성한 데이터를 넣는다.
|
|
|
|
// @breif 2번 시트
|
|
|
|
// @details json_to_sheet 방식으로 데이터를 생성한다.
|
|
|
|
/*
|
|
const fullData = xlsx.utils.json_to_sheet( [
|
|
|
|
{ A : "학과", B : "직급", C : "이름", D : "나이" }
|
|
|
|
, { A : "흉부외과", B : "PA간호사", C : "소이현", D : "33" }
|
|
|
|
, { A : "소아외과", B : "PA간호사", C : "한현희", D : "29" }
|
|
|
|
, { A : "산부인과", B : "분만실간호사", C : "한한승주현희", D : "41" }
|
|
|
|
, { A : "산부인과", B : "PA간호사", C : "은선진", D : "36" }
|
|
|
|
, { A : "간담췌외과", B : "수간호사", C : "송수빈", D : "45" }
|
|
|
|
, { A : "간담췌외과", B : "병동간호사", C : "이영하", D : "35" }
|
|
|
|
, { A : "간담췌외과", B : "병동간호사", C : "김재환", D : "28" }
|
|
|
|
, { A : "간담췌외과", B : "PA간호사", C : "국해성", D : "32" }
|
|
|
|
, { A : "간담췌외과", B : "이식코디네이터", C : "함덕주", D : "37" }
|
|
|
|
, { A : "신경외과", B : "PA간호사", C : "황재신", D : "39" }
|
|
|
|
, { A : "응급의학과", B : "응급실간호사", C : "선우희수", D : "26" }
|
|
|
|
], { header : ["A", "B", "C", "D"], skipHeader : true } );
|
|
|
|
*/
|
|
|
|
// @breif CELL 넓이 지정
|
|
|
|
/*
|
|
fullData["!cols"] = [
|
|
|
|
{ wpx : 130 } // A열
|
|
|
|
, { wpx : 100 } // B열
|
|
|
|
, { wpx : 80 } // C열
|
|
|
|
, { wch : 60 } // D열
|
|
|
|
]
|
|
*/
|
|
|
|
// @details 두번째 시트에 작성한 데이터를 넣는다.
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 401,
|
|
responseMessage: "Unauthorized",
|
|
});
|
|
}
|
|
});
|
|
|
|
router.post("/local/lab", function (req, res) {
|
|
if (req.isAuthenticated() && req.infos.userInfo.adminFlag) {
|
|
let hero = req.body;
|
|
|
|
switch (hero.target) {
|
|
case "hello":
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "hello, world.",
|
|
hero: hero,
|
|
});
|
|
|
|
break;
|
|
|
|
case "makestat":
|
|
localHandler.makeStatisticsFromScrach(hero.termTag, hero.dateTag, function (error, data) {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
hero: hero,
|
|
data: data,
|
|
});
|
|
});
|
|
break;
|
|
|
|
default:
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "unhandled lab cmd",
|
|
hero: hero,
|
|
});
|
|
}
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(403)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 403,
|
|
responseMessage: "Forbidden",
|
|
});
|
|
}
|
|
});
|
|
|
|
router.post("/local/upload", function (req, res) {
|
|
if (req.isAuthenticated()) {
|
|
crossCtl.handleUpload(req, function (err, fields, files) {
|
|
if (err) {
|
|
console.log("err=", err);
|
|
responseCode = 500;
|
|
responseMessage = err.toString();
|
|
req.workTag
|
|
.res()
|
|
.status(responseCode)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: responseCode,
|
|
responseMessage: responseMessage,
|
|
});
|
|
} else {
|
|
console.log("fields=", fields);
|
|
console.log("files=", files);
|
|
|
|
var uploadedUrls = [];
|
|
for (var i = 0; i < files.length; i++) {
|
|
uploadedUrls.push(files[i]);
|
|
}
|
|
|
|
var newHero = {
|
|
...fields,
|
|
files: uploadedUrls,
|
|
airList: JSON.parse(fields.airList),
|
|
};
|
|
|
|
req.body = newHero;
|
|
|
|
console.log("newHero=", newHero);
|
|
|
|
switch (newHero.target) {
|
|
case "note:new":
|
|
handleLocalInsert(req, res);
|
|
break;
|
|
case "note:edit":
|
|
handleLocalUpdate(req, res);
|
|
break;
|
|
|
|
default:
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "unknown target : " + newHero.target,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(401)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 401,
|
|
responseMessage: "Unauthorized",
|
|
});
|
|
}
|
|
});
|
|
|
|
router.post("/local/insert", function (req, res) {
|
|
handleLocalInsert(req, res);
|
|
});
|
|
|
|
function handleLocalInsert(req, res) {
|
|
// router.post('/local/insert', function (req, res) {
|
|
|
|
var hero = req.body;
|
|
console.log("hero=", hero);
|
|
|
|
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
|
|
var uid = req.isAuthenticated() ? req.user.uid : utils.uuid("uid_" + req.sessionID);
|
|
|
|
var qry = "";
|
|
var post = {};
|
|
|
|
var tmpIdGenerated = utils.shortid.generate();
|
|
|
|
switch (hero.target) {
|
|
case "key":
|
|
authorized = req.isAuthenticated();
|
|
qry = hero.target;
|
|
|
|
/*
|
|
qry =
|
|
'INSERT INTO ' +
|
|
localHandler.db.options.database +
|
|
'.tbl_key_list SET ? ';
|
|
|
|
post = {
|
|
uid: uid,
|
|
by: req.isAuthenticated() ? req.infos.userInfo['userName'] : '',
|
|
api_key: tmpIdGenerated,
|
|
secret: tmpIdGenerated,
|
|
name: hero.name,
|
|
level: hero.level,
|
|
};
|
|
*/
|
|
break;
|
|
case "word":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
qry = "INSERT INTO " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + " SET ? ";
|
|
|
|
post = {
|
|
word: hero.raw,
|
|
raw: hero.raw,
|
|
level: hero.level,
|
|
memo: hero.memo,
|
|
by: req.infos.userInfo["userName"],
|
|
};
|
|
break;
|
|
|
|
case "note:new":
|
|
authorized = req.isAuthenticated();
|
|
qry = "INSERT INTO " + crossCtl.db.options.database + ".tbl_note_list SET ? ";
|
|
|
|
var attachments = [];
|
|
attachments = hero.airList ? hero.airList.concat(hero.files) : hero.files ? hero.files : [];
|
|
|
|
// profile_url: hero.profile_url ? hero.profile_url : req.infos.userInfo.profile.photo_url,
|
|
// nick: req.infos.userInfo.profile.display_name,
|
|
|
|
post = {
|
|
nid: tmpIdGenerated,
|
|
uid: uid,
|
|
from_id: uid,
|
|
sender: req.infos.userInfo.profile.display_name,
|
|
to_id: crossCtl.sConfig.type + "_all",
|
|
receivers: crossCtl.sConfig.type + " 사용자",
|
|
title: hero.title,
|
|
content: hero.content,
|
|
attachments: JSON.stringify(attachments),
|
|
};
|
|
break;
|
|
|
|
case "comment":
|
|
authorized = req.isAuthenticated();
|
|
qry = "INSERT INTO " + crossCtl.db.options.database + ".tbl_comment_list SET ? ";
|
|
post = {
|
|
cid: hero.cid,
|
|
uid: uid,
|
|
nick: req.isAuthenticated() ? req.infos.userInfo.userNick : "anoymous",
|
|
comment: hero.comment,
|
|
step: 0.001,
|
|
};
|
|
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
if (qry === "") {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: "unknown target : " + hero.target,
|
|
});
|
|
} else if (authorized === false) {
|
|
req.workTag
|
|
.res()
|
|
.status(401)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 401,
|
|
responseMessage: "Unauthorized",
|
|
});
|
|
} else {
|
|
if (qry === hero.target) {
|
|
switch (hero.target) {
|
|
case "key":
|
|
qry = "SELECT * FROM " + crossCtl.db.options.database + ".tbl_account_users WHERE uid = " + mysql.escape(uid);
|
|
|
|
// console.log('qry = ', qry)
|
|
|
|
crossCtl.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error["code"],
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
// console.log('results = ', results)
|
|
if (results.length != 1) {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: "missing target",
|
|
});
|
|
} else {
|
|
var limitCount = results[0]["limit_count"];
|
|
// console.log('limitCount = ', limitCount);
|
|
|
|
qry =
|
|
"SELECT count(*) as current_count FROM " +
|
|
localHandler.db.options.database +
|
|
".tbl_key_list WHERE uid = " +
|
|
mysql.escape(uid) +
|
|
" AND status = 0";
|
|
|
|
crossCtl.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error["code"],
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
var currentCount = results[0]["current_count"];
|
|
|
|
// console.log('currentCount = ', currentCount);
|
|
if (currentCount >= limitCount) {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: "exceed limit",
|
|
});
|
|
} else {
|
|
qry = "INSERT INTO " + localHandler.db.options.database + ".tbl_key_list SET ? ";
|
|
|
|
post = {
|
|
uid: uid,
|
|
by: req.isAuthenticated() ? req.infos.userInfo["userName"] : "",
|
|
api_key: tmpIdGenerated,
|
|
secret: tmpIdGenerated,
|
|
name: hero.name,
|
|
level: hero.level,
|
|
};
|
|
|
|
localHandler.db.doEasyQueryPost(qry, post, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error["code"],
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
var apiKey = utils.uuid(tmpIdGenerated + "_" + results.insertId);
|
|
|
|
qry =
|
|
"UPDATE " +
|
|
localHandler.db.options.database +
|
|
".tbl_key_list SET api_key = " +
|
|
mysql.escape(apiKey) +
|
|
" WHERE serial = " +
|
|
results.insertId;
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
});
|
|
|
|
/*
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
*/
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
break;
|
|
case "comment":
|
|
req.workTag.responsePacket.cart = req.session.cart;
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
|
|
break;
|
|
default:
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
} else {
|
|
localHandler.db.doEasyQueryPost(qry, post, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error["code"],
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
if (hero.target === "note:new") {
|
|
var msgBase = {
|
|
collapse_key: "note:new",
|
|
notification: {
|
|
title: "새로운 노트 등록됨",
|
|
body: hero.title,
|
|
},
|
|
data: {
|
|
eventTag: "note:new",
|
|
location: "/admin/approve/note",
|
|
title: "새로운 노트 등록됨",
|
|
body: hero.title,
|
|
},
|
|
};
|
|
crossCtl.sendFCMToLeveledUser(5, msgBase, function (error, response) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
});
|
|
} else if (hero.target === "key") {
|
|
var apiKey = utils.uuid(post.secret + "_" + results.insertId);
|
|
|
|
var currentSerialId = results.insertId;
|
|
|
|
qry = "UPDATE " + localHandler.db.options.database + ".tbl_key_list SET api_key = " + mysql.escape(apiKey) + " WHERE serial = " + currentSerialId;
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"key:create",
|
|
currentSerialId,
|
|
"self",
|
|
"API Key serial " + currentSerialId + " 생성.",
|
|
req,
|
|
hero
|
|
);
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
});
|
|
} else if (hero.target === "word") {
|
|
crossCtl.redis.publishMessage({
|
|
cmd: "safekiso:filter:sync",
|
|
});
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"word:insert",
|
|
results.insertId,
|
|
"self",
|
|
"필터 단어 [" + hero.raw + "]를 추가",
|
|
req,
|
|
hero
|
|
);
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
|
|
/*
|
|
localHandler.syncFilterWithDbAll(function (error) {
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"word:insert",
|
|
"self",
|
|
"필터 단어 [" + hero.raw + "]를 추가",
|
|
req,
|
|
hero
|
|
);
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: error != null ? error : "ok",
|
|
});
|
|
});
|
|
*/
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
router.get("/local/select", function (req, res) {
|
|
// console.log('req.isAuthenticated()=', req.isAuthenticated())
|
|
// console.log('req.cookies=', req.cookies)
|
|
|
|
if (req.session.loopCount) {
|
|
req.session.loopCount++;
|
|
} else {
|
|
req.session.loopCount = 1;
|
|
}
|
|
|
|
// console.log('req.session.loopCount=', req.session.loopCount)
|
|
// console.log('req.sessionID=', req.sessionID)
|
|
|
|
var hero = req.query;
|
|
console.log("hero=", hero);
|
|
|
|
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
|
|
var uid = req.isAuthenticated() ? req.user.uid : utils.uuid("uid_" + req.sessionID);
|
|
|
|
var qry = "";
|
|
|
|
var subWhereClause = "";
|
|
var subUnitLength = 8;
|
|
|
|
switch (hero.target) {
|
|
case "profile":
|
|
authorized = hero.hero ? true : req.isAuthenticated();
|
|
qry = hero.target;
|
|
break;
|
|
|
|
case "word":
|
|
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
qry = "SELECT * FROM " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + " WHERE serial = " + mysql.escape(hero.hero);
|
|
break;
|
|
|
|
case "key":
|
|
authorized = req.isAuthenticated(); // req.isAuthenticated()
|
|
qry = "SELECT * FROM " + localHandler.db.options.database + ".tbl_key_list WHERE uid = " + mysql.escape(uid) + " AND serial = " + mysql.escape(hero.hero);
|
|
break;
|
|
|
|
case "admin:statistics:word":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
if (hero.unit != undefined) {
|
|
switch (hero.unit) {
|
|
case "year":
|
|
subUnitLength = 4;
|
|
break;
|
|
case "month":
|
|
subUnitLength = 6;
|
|
break;
|
|
case "day":
|
|
subUnitLength = 8;
|
|
break;
|
|
case "hour":
|
|
subUnitLength = 10;
|
|
break;
|
|
}
|
|
}
|
|
if (hero.uid != undefined) {
|
|
if (hero.uid != "all") {
|
|
subWhereClause += " AND uid = " + mysql.escape(hero.uid);
|
|
}
|
|
}
|
|
if (hero.key != undefined) {
|
|
if (hero.key != "all") {
|
|
subWhereClause += " AND api_key = " + mysql.escape(hero.key);
|
|
}
|
|
}
|
|
|
|
qry =
|
|
"SELECT " +
|
|
" word, sum(count) as count_sum " +
|
|
"FROM " +
|
|
localHandler.db.options.database +
|
|
".tbl_word_statistics WHERE " +
|
|
"date_tag >= " +
|
|
mysql.escape(hero.startDateTag.substring(0, subUnitLength)) +
|
|
" AND date_tag <= " +
|
|
mysql.escape(hero.endDateTag.substring(0, subUnitLength)) +
|
|
" " +
|
|
subWhereClause +
|
|
" AND CHAR_LENGTH(date_tag) = " +
|
|
subUnitLength +
|
|
" GROUP BY word ORDER BY count_sum DESC, word ASC";
|
|
|
|
// console.log('huk qry = ', qry)
|
|
break;
|
|
|
|
case "admin:statistics:usage":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
if (hero.unit != undefined) {
|
|
switch (hero.unit) {
|
|
case "year":
|
|
subUnitLength = 4;
|
|
break;
|
|
case "month":
|
|
subUnitLength = 6;
|
|
break;
|
|
case "day":
|
|
subUnitLength = 8;
|
|
break;
|
|
case "hour":
|
|
subUnitLength = 10;
|
|
break;
|
|
}
|
|
}
|
|
if (hero.uid != undefined) {
|
|
if (hero.uid != "all") {
|
|
subWhereClause += " AND uid = " + mysql.escape(hero.uid);
|
|
}
|
|
}
|
|
if (hero.key != undefined) {
|
|
if (hero.key != "all") {
|
|
subWhereClause += " AND api_key = " + mysql.escape(hero.key);
|
|
}
|
|
}
|
|
qry =
|
|
"SELECT " +
|
|
"date_tag, sum(total) as total, sum(hit) as hit, sum(size) as size " +
|
|
"FROM " +
|
|
localHandler.db.options.database +
|
|
".tbl_key_statistics WHERE " +
|
|
"date_tag >= " +
|
|
mysql.escape(hero.startDateTag.substring(0, subUnitLength)) +
|
|
" AND date_tag <= " +
|
|
mysql.escape(hero.endDateTag.substring(0, subUnitLength)) +
|
|
" " +
|
|
subWhereClause +
|
|
" AND CHAR_LENGTH(date_tag) = " +
|
|
subUnitLength +
|
|
" GROUP BY date_tag ORDER BY date_tag ASC";
|
|
break;
|
|
|
|
case "admin:key":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
qry = "SELECT * FROM " + localHandler.db.options.database + ".tbl_key_list WHERE serial = " + mysql.escape(hero.hero);
|
|
break;
|
|
|
|
case "my":
|
|
authorized = req.isAuthenticated(); // req.isAuthenticated()
|
|
qry = "SELECT * FROM " + localHandler.db.options.database + ".tbl_user_list WHERE uid = " + mysql.escape(uid);
|
|
break;
|
|
|
|
case "note":
|
|
authorized = true;
|
|
qry =
|
|
"SELECT * FROM " +
|
|
crossCtl.db.options.database +
|
|
".tbl_note_list WHERE nid = " +
|
|
mysql.escape(hero.hero) +
|
|
" AND (status = 1 OR (status = 0 AND uid = " +
|
|
mysql.escape(uid) +
|
|
"))";
|
|
break;
|
|
|
|
case "like":
|
|
authorized = true;
|
|
qry =
|
|
"SELECT * FROM " +
|
|
crossCtl.db.options.database +
|
|
".tbl_like_list WHERE domain = " +
|
|
mysql.escape(hero.hero) +
|
|
" AND site_id = " +
|
|
mysql.escape(crossCtl.sConfig.type) +
|
|
" AND uid = " +
|
|
mysql.escape(uid);
|
|
break;
|
|
|
|
case "dashboard":
|
|
// authorized = req.infos.userInfo.adminFlag;
|
|
authorized = true;
|
|
qry = hero.target;
|
|
break;
|
|
|
|
case "admin:dashboard":
|
|
// authorized = req.infos.userInfo.adminFlag;
|
|
authorized = true;
|
|
qry = hero.target;
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
if (qry === "") {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "unknown target : " + hero.target,
|
|
});
|
|
} else if (authorized === false) {
|
|
req.workTag
|
|
.res()
|
|
.status(401)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 401,
|
|
responseMessage: "Unauthorized",
|
|
});
|
|
} else {
|
|
if (qry === hero.target) {
|
|
if (hero.target === "profile") {
|
|
var finalProfile = {};
|
|
if (hero.hero !== undefined) {
|
|
qry =
|
|
"SELECT * FROM " +
|
|
crossCtl.db.options.database +
|
|
".tbl_profile_list WHERE site_id = " +
|
|
mysql.escape(crossCtl.sConfig.type) +
|
|
" AND pid = " +
|
|
mysql.escape(hero.hero) +
|
|
" AND status = 0";
|
|
} else {
|
|
qry =
|
|
"SELECT * FROM " +
|
|
crossCtl.db.options.database +
|
|
".tbl_profile_list WHERE site_id = " +
|
|
mysql.escape(crossCtl.sConfig.type) +
|
|
" AND uid = " +
|
|
mysql.escape(uid) +
|
|
" AND status = 0";
|
|
}
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
if (results.length == 0) {
|
|
req.workTag
|
|
.res()
|
|
.status(404)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "missing target #1",
|
|
});
|
|
} else {
|
|
var localUID = uid;
|
|
|
|
if (hero.hero !== undefined) {
|
|
localUID = results[0].uid + "";
|
|
} else {
|
|
localUID = uid;
|
|
}
|
|
|
|
// console.log('localUID=', localUID)
|
|
|
|
var filteredResult = results;
|
|
var myProfile = {};
|
|
|
|
myProfile = filteredResult[0];
|
|
delete myProfile.uid;
|
|
myProfile.infos = utils.safeJSON(myProfile.infos);
|
|
if (hero.hero == undefined) {
|
|
myProfile.addon = req.user.user_info;
|
|
} else {
|
|
delete filteredResult[0].updated;
|
|
delete filteredResult[0].infos;
|
|
}
|
|
myProfile.fromAir = false;
|
|
|
|
// console.log('filteredResult=', filteredResult)
|
|
|
|
qry = "SELECT * FROM " + localHandler.db.options.database + ".tbl_user_list WHERE uid = " + mysql.escape(localUID);
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
if (results.length == 0) {
|
|
req.workTag
|
|
.res()
|
|
.status(404)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "missing target #2",
|
|
});
|
|
} else {
|
|
filteredResult[0].score = results[0].score;
|
|
if (filteredResult[0].infos != undefined) {
|
|
filteredResult[0].infos.score = results[0].score;
|
|
}
|
|
|
|
qry = "SELECT * FROM " + localHandler.db.options.database + ".tbl_guide_list WHERE uid = " + mysql.escape(localUID);
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
if (results.length == 1) {
|
|
filteredResult[0].gid = results[0].gid;
|
|
filteredResult[0].accompanyFlag = true;
|
|
if (filteredResult[0].infos != undefined) {
|
|
filteredResult[0].infos.gid = results[0].gid;
|
|
filteredResult[0].infos.accompanyFlag = true;
|
|
}
|
|
} else {
|
|
filteredResult[0].accompanyFlag = false;
|
|
if (filteredResult[0].infos != undefined) {
|
|
filteredResult[0].infos.accompanyFlag = false;
|
|
}
|
|
}
|
|
// console.log('filteredResult=', filteredResult)
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
data: filteredResult,
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
} else if (hero.target == "dashboard") {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
data: localHandler.getDashboardData(),
|
|
});
|
|
} else if (hero.target == "admin:dashboard") {
|
|
qry =
|
|
"SELECT " +
|
|
"*, " +
|
|
crossCtl.db.options.database +
|
|
".tbl_account_users.serial as serial" +
|
|
" FROM " +
|
|
crossCtl.db.options.database +
|
|
".tbl_account_users " +
|
|
"LEFT JOIN " +
|
|
crossCtl.db.options.database +
|
|
".tbl_profile_list ON " +
|
|
crossCtl.db.options.database +
|
|
".tbl_account_users.uid = " +
|
|
crossCtl.db.options.database +
|
|
".tbl_profile_list.uid " +
|
|
"WHERE " +
|
|
crossCtl.db.options.database +
|
|
".tbl_account_users.site_id = " +
|
|
mysql.escape(crossCtl.sConfig.type);
|
|
|
|
// console.log('qry = ', qry);
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
let tmpUserProfilePool = {};
|
|
for (var i = 0; i < results.length; i++) {
|
|
tmpUserProfilePool[results[i]["uid"]] = {
|
|
display_name: results[i]["display_name"],
|
|
email: results[i]["auth_key"],
|
|
created: results[i]["created"],
|
|
};
|
|
}
|
|
|
|
// console.log('tmpUserProfilePool=', tmpUserProfilePool)
|
|
|
|
qry =
|
|
"SELECT " +
|
|
"date_tag, sum(total) as total, sum(hit) as hit, sum(miss) as miss, " +
|
|
"sum(error) as error, sum(size) as size " +
|
|
"FROM " +
|
|
localHandler.db.options.database +
|
|
".tbl_key_statistics " +
|
|
"WHERE date_tag LIKE " +
|
|
mysql.escape(utils.getDateTimeTag("m") + "%") +
|
|
" AND CHAR_LENGTH(date_tag) = 10 " +
|
|
"GROUP BY date_tag ORDER BY date_tag DESC LIMIT 24";
|
|
|
|
// console.log('qry = ', qry)
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
// var adminDashData1 = JSON.parse(JSON.stringify(results));
|
|
|
|
var adminDashData1 = []; // = JSON.parse(JSON.stringify(results));
|
|
|
|
// for (var i = 0; i < results.length; i++) {
|
|
for (var i = results.length - 1; i >= 0; i--) {
|
|
adminDashData1.push(JSON.parse(JSON.stringify(results[i])));
|
|
}
|
|
|
|
qry =
|
|
"SELECT " +
|
|
"api_key, sum(total) as total, sum(hit) as hit, sum(miss) as miss, sum(error) as error, sum(size) as size " +
|
|
"FROM " +
|
|
localHandler.db.options.database +
|
|
".tbl_key_statistics WHERE date_tag LIKE " +
|
|
mysql.escape(utils.getDateTimeTag("m") + "%") +
|
|
" AND CHAR_LENGTH(date_tag) = 10 GROUP BY api_key ORDER BY date_tag DESC LIMIT 24";
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
var adminDashData2 = JSON.parse(JSON.stringify(results));
|
|
|
|
let tmpTargetKeys = [];
|
|
|
|
for (var i = 0; i < adminDashData2.length; i++) {
|
|
tmpTargetKeys.push(adminDashData2[i]["api_key"]);
|
|
}
|
|
|
|
qry = "SELECT * FROM " + localHandler.db.options.database + ".tbl_key_list";
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
var tmpKeyInfoPool = {};
|
|
for (var i = 0; i < results.length; i++) {
|
|
tmpKeyInfoPool[results[i]["api_key"]] = {
|
|
key_name: results[i]["name"],
|
|
user_name: tmpUserProfilePool[results[i]["uid"]]["display_name"],
|
|
user_id: tmpUserProfilePool[results[i]["uid"]]["email"],
|
|
created: results[i]["created"],
|
|
};
|
|
}
|
|
|
|
for (var i = 0; i < adminDashData2.length; i++) {
|
|
adminDashData2[i]["key_name"] =
|
|
tmpKeyInfoPool[adminDashData2[i]["api_key"]] != undefined ? tmpKeyInfoPool[adminDashData2[i]["api_key"]]["key_name"] : "unknown";
|
|
adminDashData2[i]["user_id"] =
|
|
tmpKeyInfoPool[adminDashData2[i]["api_key"]] != undefined ? tmpKeyInfoPool[adminDashData2[i]["api_key"]]["user_id"] : "unknown";
|
|
}
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
result: {
|
|
adminDashData1: adminDashData1,
|
|
adminDashData2: adminDashData2,
|
|
},
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
switch (hero.target) {
|
|
case "huk":
|
|
console.log("req.user=", req.user);
|
|
req.workTag.responsePacket.data = [req.user];
|
|
break;
|
|
|
|
default:
|
|
}
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
} else {
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
switch (hero.target) {
|
|
case "note":
|
|
for (var i = 0; i < results.length; i++) {
|
|
if (results[i].uid == uid) {
|
|
results[i].myReviewFlag = true;
|
|
} else {
|
|
results[i].myReviewFlag = false;
|
|
}
|
|
delete results[i].uid;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
data: results,
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
router.post("/local/update", function (req, res) {
|
|
handleLocalUpdate(req, res);
|
|
});
|
|
|
|
function handleLocalUpdate(req, res) {
|
|
// router.post('/local/update', function (req, res) {
|
|
|
|
var hero = req.body;
|
|
console.log("hero=", hero);
|
|
|
|
console.log("huk", hero.target === "accompany" ? "ok!" : "nok!");
|
|
|
|
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
|
|
var uid = req.isAuthenticated() ? req.user.uid : utils.uuid("uid_" + req.sessionID);
|
|
|
|
var qry = "";
|
|
var post = {};
|
|
|
|
if (hero.target === "like:comment") {
|
|
crossCtl.handleLike(req, function (error, resultPack) {
|
|
if (error) {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
});
|
|
} else {
|
|
console.log("resultPack=", resultPack);
|
|
|
|
qry = "UPDATE " + crossCtl.db.options.database + ".tbl_comment_list SET " + resultPack.amountTag + " WHERE cid = " + mysql.escape(hero.hero);
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "update, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
qry = "SELECT * FROM " + crossCtl.db.options.database + ".tbl_comment_list WHERE cid = " + mysql.escape(hero.hero);
|
|
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "update, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
var finalResult = {
|
|
hero: hero.hero,
|
|
oldTag: resultPack.oldTag,
|
|
oldCount: resultPack.oldCount,
|
|
newTag: resultPack.newTag,
|
|
newCount: resultPack.newCount,
|
|
like_count: results[0].like_count,
|
|
dislike_count: results[0].dislike_count,
|
|
likeToggleFlag: crossCtl.sConfig.likeToggleFlag,
|
|
};
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
finalResult: finalResult,
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
return;
|
|
} else {
|
|
switch (hero.target) {
|
|
case "filter:sync":
|
|
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
qry = hero.target;
|
|
|
|
break;
|
|
case "filter":
|
|
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
|
|
qry = "TRUNCATE " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
// qry = "SELECT COUNT(*) FROM " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
|
|
post = {};
|
|
|
|
break;
|
|
|
|
case "word":
|
|
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
qry = "UPDATE " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + " SET ? WHERE serial = " + mysql.escape(hero.hero);
|
|
post = {
|
|
raw: hero.raw,
|
|
level: hero.level,
|
|
memo: hero.memo,
|
|
status: hero.status,
|
|
};
|
|
break;
|
|
|
|
case "approve:note":
|
|
authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
qry = "UPDATE " + crossCtl.db.options.database + ".tbl_note_list SET ? WHERE nid = " + mysql.escape(hero.hero);
|
|
var judgment = hero.judgment;
|
|
var reason = hero.reason;
|
|
|
|
post = {
|
|
status: judgment == "up" ? 1 : judgment == "suspend" ? 2 : 3,
|
|
reason: reason,
|
|
};
|
|
break;
|
|
|
|
case "admin:key":
|
|
case "key":
|
|
authorized = req.isAuthenticated();
|
|
|
|
if (req.infos.userInfo.adminFlag) {
|
|
qry = "UPDATE " + localHandler.db.options.database + ".tbl_key_list SET ? WHERE serial = " + mysql.escape(hero.hero);
|
|
} else {
|
|
qry =
|
|
"UPDATE " + localHandler.db.options.database + ".tbl_key_list SET ? WHERE serial = " + mysql.escape(hero.hero) + " AND uid = " + mysql.escape(uid);
|
|
}
|
|
|
|
post = {
|
|
name: hero.name,
|
|
level: hero.level,
|
|
status: hero.status,
|
|
};
|
|
break;
|
|
|
|
case "note:edit":
|
|
authorized = req.isAuthenticated();
|
|
|
|
if (req.infos.userInfo.adminFlag) {
|
|
qry = "UPDATE " + crossCtl.db.options.database + ".tbl_note_list SET ? WHERE nid = " + mysql.escape(hero.hero);
|
|
} else {
|
|
qry = "UPDATE " + crossCtl.db.options.database + ".tbl_note_list SET ? WHERE nid = " + mysql.escape(hero.hero) + " AND uid = " + mysql.escape(uid);
|
|
}
|
|
|
|
var attachments = [];
|
|
attachments = hero.airList ? hero.airList.concat(hero.files) : hero.files ? hero.files : [];
|
|
|
|
post = {
|
|
from_id: uid,
|
|
sender: req.infos.userInfo.profile.display_name,
|
|
to_id: crossCtl.sConfig.type + "_all",
|
|
receivers: crossCtl.sConfig.type + " 사용자",
|
|
title: hero.title,
|
|
content: hero.content,
|
|
attachments: JSON.stringify(attachments),
|
|
status: 0,
|
|
};
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
if (qry === "") {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: "unknown target : " + hero.target,
|
|
});
|
|
} else if (authorized === false) {
|
|
req.workTag
|
|
.res()
|
|
.status(401)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 401,
|
|
responseMessage: "Unauthorized",
|
|
});
|
|
} else if (qry == hero.target) {
|
|
if (hero.target == "filter:sync") {
|
|
crossCtl.redis.publishMessage({
|
|
cmd: "safekiso:filter:sync",
|
|
});
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
|
|
/*
|
|
localHandler.syncFilterWithDbAll(function (error) {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: error != null ? error : "ok",
|
|
});
|
|
});
|
|
*/
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "unknown target : " + hero.target,
|
|
});
|
|
}
|
|
} else {
|
|
localHandler.db.doEasyQueryPost(qry, post, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
if (hero.target == "filter") {
|
|
localHandler.doFilterUpdate(req, res, function (error, count) {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: error != null ? error : "ok",
|
|
wordCount: count,
|
|
});
|
|
});
|
|
} else if (hero.target == "word") {
|
|
crossCtl.redis.publishMessage({
|
|
cmd: "safekiso:filter:sync",
|
|
});
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"word:update",
|
|
hero.hero,
|
|
"self",
|
|
"필터 단어 [" + hero.raw + "]를 " + (hero.revive == true ? "복구" : "변경"),
|
|
req,
|
|
hero
|
|
);
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
/*
|
|
localHandler.syncFilterWithDbAll(function (error) {
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"word:update",
|
|
"self",
|
|
"필터 단어 [" +
|
|
hero.raw +
|
|
"]를 " +
|
|
(hero.revive == true ? "복구" : "변경"),
|
|
req,
|
|
hero
|
|
);
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: error != null ? error : "ok",
|
|
|
|
});
|
|
});
|
|
*/
|
|
} else if (hero.target == "key" || hero.target == "admin:key") {
|
|
crossCtl.redis.publishMessage({
|
|
cmd: "safekiso:key:update",
|
|
target: hero.hero,
|
|
});
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"key:update",
|
|
hero.hero,
|
|
hero.target == "admin:key" ? "admin" : "self",
|
|
"API Key serial " + hero.hero + "를(을) " + (hero.revive == true ? "복구" : "변경"),
|
|
|
|
req,
|
|
hero
|
|
);
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
} else if (hero.target === "note:edit") {
|
|
var msgBase = {
|
|
collapse_key: "note:edit",
|
|
notification: {
|
|
title: "노트 수정됨",
|
|
body: hero.title,
|
|
},
|
|
data: {
|
|
eventTag: "note:edit",
|
|
location: "/admin/approve/note",
|
|
title: "노트 수정됨",
|
|
body: hero.title,
|
|
},
|
|
};
|
|
crossCtl.sendFCMToLeveledUser(5, msgBase, function (error, response) {
|
|
if (error) {
|
|
utils.log("error", "insert, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
router.post("/local/delete", function (req, res) {
|
|
var hero = req.body;
|
|
console.log("hero=", hero);
|
|
|
|
var authorized = req.infos.userInfo.adminFlag; // req.isAuthenticated()
|
|
|
|
var uid = req.isAuthenticated() ? req.user.uid : utils.uuid("uid_" + req.sessionID);
|
|
|
|
var qry = "";
|
|
var post = {};
|
|
var recordCopy = {};
|
|
|
|
switch (hero.target) {
|
|
case "comment":
|
|
authorized = req.isAuthenticated();
|
|
qry = hero.target;
|
|
|
|
break;
|
|
|
|
case "word":
|
|
authorized = req.isAuthenticated();
|
|
qry = "UPDATE " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + " SET status = 4 WHERE serial = " + mysql.escape(hero.hero) + " AND status = 0";
|
|
|
|
break;
|
|
|
|
case "admin:key":
|
|
case "key":
|
|
if (req.infos.userInfo.adminFlag) {
|
|
authorized = true;
|
|
qry = "UPDATE " + localHandler.db.options.database + ".tbl_key_list SET status = 4 WHERE serial = " + mysql.escape(hero.hero) + " AND status = 0";
|
|
} else {
|
|
authorized = req.isAuthenticated();
|
|
qry =
|
|
"UPDATE " +
|
|
localHandler.db.options.database +
|
|
".tbl_key_list SET status = 4 WHERE uid = " +
|
|
mysql.escape(uid) +
|
|
" AND serial = " +
|
|
mysql.escape(hero.hero) +
|
|
" AND status = 0";
|
|
}
|
|
|
|
break;
|
|
|
|
case "note":
|
|
if (req.infos.userInfo.adminFlag) {
|
|
authorized = true;
|
|
qry = "UPDATE " + crossCtl.db.options.database + ".tbl_note_list SET status = 4 WHERE nid = " + mysql.escape(hero.hero);
|
|
} else {
|
|
authorized = req.isAuthenticated();
|
|
qry =
|
|
"UPDATE " + crossCtl.db.options.database + ".tbl_note_list SET status = 4 WHERE uid = " + mysql.escape(uid) + " AND nid = " + mysql.escape(hero.hero);
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
if (qry === "") {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 404,
|
|
responseMessage: "unknown target : " + hero.target,
|
|
});
|
|
} else if (authorized === false) {
|
|
req.workTag
|
|
.res()
|
|
.status(401)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 401,
|
|
responseMessage: "Unauthorized",
|
|
});
|
|
} else {
|
|
if (qry === hero.target) {
|
|
if (hero.target === "huk") {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
} else {
|
|
switch (hero.target) {
|
|
default:
|
|
}
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
} else {
|
|
localHandler.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "delete, hero =", hero, ", error=", error, utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
hero: hero,
|
|
});
|
|
} else {
|
|
switch (hero.target) {
|
|
default:
|
|
}
|
|
|
|
if (hero.target == "word") {
|
|
crossCtl.redis.publishMessage({
|
|
cmd: "safekiso:filter:sync",
|
|
});
|
|
localHandler.logUserAction(uid, req.infos.userInfo["userName"], "word:delete", hero.hero, "self", "필터 단어 [" + hero.raw + "]를 삭제", req, hero);
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
/*
|
|
localHandler.syncFilterWithDbAll(function (error) {
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"word:delete",
|
|
"self",
|
|
"필터 단어 [" + hero.raw + "]를 삭제",
|
|
req,
|
|
hero
|
|
);
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: error != null ? error : "ok",
|
|
});
|
|
});
|
|
*/
|
|
} else if (hero.target == "key" || hero.target == "admin:key") {
|
|
crossCtl.redis.publishMessage({
|
|
cmd: "safekiso:key:update",
|
|
target: hero.hero,
|
|
});
|
|
localHandler.logUserAction(
|
|
uid,
|
|
req.infos.userInfo["userName"],
|
|
"key:delete",
|
|
hero.hero,
|
|
hero.target == "admin:key" ? "admin" : "self",
|
|
"API Key serial " + hero.hero + "을 삭제",
|
|
req,
|
|
hero
|
|
);
|
|
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
} else {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: "ok",
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
function purify(val) {
|
|
return val.replace(/,/gi, "").replace(/원/gi, "").replace(/시간/gi, "");
|
|
}
|
|
|
|
function doPreListWork(req, res, cb) {
|
|
var uid = req.isAuthenticated() ? req.user.uid : utils.uuid("uid_" + req.sessionID);
|
|
|
|
var hero = req.query;
|
|
var target = req.query.target;
|
|
var qry = "";
|
|
|
|
let wordLevelClause = "";
|
|
|
|
if (req.query.targetLevel != undefined) {
|
|
switch (req.query.targetLevel) {
|
|
case "all":
|
|
break;
|
|
case "low":
|
|
wordLevelClause = " AND level = 100";
|
|
break;
|
|
case "mid":
|
|
wordLevelClause = " AND level = 50";
|
|
break;
|
|
case "high":
|
|
wordLevelClause = " AND level = 10";
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (target) {
|
|
case "admin:word:like":
|
|
qry =
|
|
"SELECT * FROM " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + " WHERE raw = " + mysql.escape(hero.hero) + " AND status = 0 " + wordLevelClause;
|
|
|
|
crossCtl.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
console.log("huk error = ", error);
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
cb(error, null);
|
|
} else {
|
|
cb(null, { exactMatchs: results });
|
|
}
|
|
});
|
|
break;
|
|
|
|
case "admin:word:like:deleted":
|
|
qry =
|
|
"SELECT * FROM " + localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + " WHERE raw = " + mysql.escape(hero.hero) + " AND status = 4 " + wordLevelClause;
|
|
|
|
crossCtl.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
cb(error, null);
|
|
} else {
|
|
cb(null, { exactMatchs: results });
|
|
}
|
|
});
|
|
break;
|
|
|
|
case "key:active":
|
|
qry = "SELECT * FROM " + crossCtl.db.options.database + ".tbl_account_users WHERE uid = " + mysql.escape(uid);
|
|
|
|
crossCtl.db.doEasyQuery(qry, function (error, results) {
|
|
if (error) {
|
|
utils.log("error", "select, hero =", hero, ", error=", error, utils.__where());
|
|
cb(error, null);
|
|
} else {
|
|
if (results.length != 1) {
|
|
cb(new Error("missing target"), null);
|
|
} else {
|
|
cb(null, { limitCount: results[0]["limit_count"] });
|
|
}
|
|
}
|
|
});
|
|
break;
|
|
default:
|
|
cb(null, null);
|
|
}
|
|
}
|
|
|
|
router.get("/local/list", function (req, res) {
|
|
console.log("/list, query=", req.query);
|
|
|
|
var user_info = req.isAuthenticated() ? req.user.user_info : {};
|
|
|
|
var response = {};
|
|
|
|
var target = req.query.target;
|
|
var hero = req.query.hero;
|
|
var draw = req.query.draw;
|
|
var start = req.query.start ? req.query.start : 0;
|
|
var length = req.query.length ? req.query.length : 10;
|
|
|
|
var selectClause = "*";
|
|
var tableName = "";
|
|
var joinClause = "";
|
|
var whereClause = "";
|
|
var groupByClause = "";
|
|
// var orderByClause = 'serial DESC'
|
|
var orderByClause = "";
|
|
|
|
var columns = req.query.columns;
|
|
var order = req.query.order ? req.query.order : [];
|
|
// orderByClause = ''
|
|
for (var i = 0; i < order.length; i++) {
|
|
if (orderByClause !== "") {
|
|
orderByClause = orderByClause + ", ";
|
|
}
|
|
orderByClause = orderByClause + columns[order[i].column].data + " " + order[i].dir.toUpperCase();
|
|
}
|
|
|
|
if (orderByClause == "") {
|
|
orderByClause = "serial DESC";
|
|
}
|
|
|
|
console.log("orderByClause=", orderByClause);
|
|
|
|
var uid = req.isAuthenticated() ? req.user.uid : utils.uuid("uid_" + req.sessionID);
|
|
|
|
var authorized = req.infos.userInfo.adminFlag;
|
|
|
|
let todayDateTag = utils.getDateTimeTag("d");
|
|
|
|
let wordLevelClause = "";
|
|
|
|
if (req.query.targetLevel != undefined) {
|
|
switch (req.query.targetLevel) {
|
|
case "all":
|
|
break;
|
|
case "low":
|
|
wordLevelClause = " AND level = 100";
|
|
break;
|
|
case "mid":
|
|
wordLevelClause = " AND level = 50";
|
|
break;
|
|
case "high":
|
|
wordLevelClause = " AND level = 10";
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (target) {
|
|
case "statistics:month":
|
|
authorized = req.isAuthenticated() ? req.user.account_info.user_level > 1 : false;
|
|
|
|
tableName = localHandler.db.options.database + ".tbl_key_statistics";
|
|
|
|
let tmpMonthPrefix = utils.getDateTimeTag("m");
|
|
whereClause = "uid = " + mysql.escape(uid) + " AND date_tag = " + mysql.escape(tmpMonthPrefix);
|
|
orderByClause = "date_tag ASC";
|
|
|
|
break;
|
|
|
|
case "statistics:all":
|
|
authorized = req.isAuthenticated() ? req.user.account_info.user_level > 1 : false;
|
|
|
|
tableName = localHandler.db.options.database + ".tbl_key_statistics";
|
|
|
|
whereClause = "uid = " + mysql.escape(uid);
|
|
orderByClause = "date_tag ASC";
|
|
|
|
break;
|
|
|
|
case "statistics":
|
|
case "admin:statistics":
|
|
if (target == "admin:statistics") {
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
orderByClause = "date_tag ASC";
|
|
} else {
|
|
authorized = req.isAuthenticated() ? req.user.account_info.user_level > 1 : false;
|
|
}
|
|
tableName = localHandler.db.options.database + ".tbl_key_statistics";
|
|
|
|
let termPrefix = req.query.termPrefix + "%";
|
|
let termLenth = 4;
|
|
let term = req.query.term;
|
|
|
|
switch (term) {
|
|
case "year":
|
|
termLenth = 4;
|
|
break;
|
|
case "month":
|
|
termLenth = 6;
|
|
break;
|
|
case "day":
|
|
termLenth = 8;
|
|
break;
|
|
|
|
case "hour":
|
|
termLenth = 10;
|
|
break;
|
|
|
|
default:
|
|
termLenth = 0;
|
|
}
|
|
|
|
let whereTagByTerm = " AND date_tag like " + mysql.escape(termPrefix) + " AND CHAR_LENGTH(date_tag) = " + termLenth;
|
|
|
|
switch (term) {
|
|
case "year":
|
|
whereTagByTerm = " AND CHAR_LENGTH(date_tag) = " + termLenth;
|
|
break;
|
|
case "month":
|
|
break;
|
|
case "day":
|
|
break;
|
|
|
|
case "hour":
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
if (termLenth == 0) {
|
|
whereTagByTerm = "";
|
|
}
|
|
|
|
if (target == "admin:statistics") {
|
|
whereClause = "api_key = " + mysql.escape(hero) + whereTagByTerm;
|
|
orderByClause = "date_tag ASC";
|
|
} else {
|
|
whereClause = "uid = " + mysql.escape(uid) + " AND api_key = " + mysql.escape(hero) + whereTagByTerm;
|
|
orderByClause = "date_tag ASC";
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
case "statistics:my":
|
|
|
|
authorized = req.isAuthenticated() ? req.user.account_info.user_level > 1 : false;
|
|
tableName = localHandler.db.options.database + ".tbl_key_statistics";
|
|
|
|
let termPrefix3 = req.query.termPrefix + "%";
|
|
let termLenth3 = 4;
|
|
let term3 = req.query.term;
|
|
|
|
switch (term3) {
|
|
case "year":
|
|
termLenth3 = 4;
|
|
break;
|
|
case "month":
|
|
termLenth3 = 6;
|
|
break;
|
|
case "day":
|
|
termLenth3 = 8;
|
|
break;
|
|
|
|
case "hour":
|
|
termLenth3 = 10;
|
|
break;
|
|
|
|
default:
|
|
termLenth3 = 0;
|
|
}
|
|
|
|
let whereTagByTerm3 = " AND date_tag like " + mysql.escape(termPrefix3) + " AND CHAR_LENGTH(date_tag) = " + termLenth3;
|
|
|
|
switch (term3) {
|
|
case "year":
|
|
whereTagByTerm3 = " AND CHAR_LENGTH(date_tag) = " + termLenth3;
|
|
break;
|
|
case "month":
|
|
break;
|
|
case "day":
|
|
break;
|
|
|
|
case "hour":
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
if (termLenth3 == 0) {
|
|
whereTagByTerm3 = "";
|
|
}
|
|
|
|
whereClause = "uid = " + mysql.escape(uid) + " " + whereTagByTerm3;
|
|
orderByClause = "date_tag ASC";
|
|
|
|
break;
|
|
|
|
|
|
case "statistics:word":
|
|
case "admin:statistics:word":
|
|
if (target == "admin:statistics:word") {
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
} else {
|
|
start = 0;
|
|
length = 10;
|
|
authorized = req.isAuthenticated() ? req.user.account_info.user_level > 1 : false;
|
|
}
|
|
orderByClause = "count DESC";
|
|
tableName = localHandler.db.options.database + ".tbl_word_statistics";
|
|
|
|
let termPrefix2 = req.query.termPrefix + "%";
|
|
let termLenth2 = 4;
|
|
let term2 = req.query.term;
|
|
|
|
switch (term2) {
|
|
case "year":
|
|
termLenth2 = 4;
|
|
break;
|
|
case "month":
|
|
termLenth2 = 6;
|
|
break;
|
|
case "day":
|
|
termLenth2 = 8;
|
|
break;
|
|
|
|
default:
|
|
termLenth2 = 0;
|
|
}
|
|
|
|
let whereTagByTerm2 = " AND date_tag like " + mysql.escape(termPrefix2) + " AND CHAR_LENGTH(date_tag) = " + termLenth2;
|
|
|
|
if (termLenth2 == 0) {
|
|
whereTagByTerm = "";
|
|
}
|
|
|
|
if (target == "admin:statistics:word") {
|
|
whereClause = "api_key = " + mysql.escape(hero) + whereTagByTerm2;
|
|
} else {
|
|
whereClause = "uid = " + mysql.escape(uid) + " AND api_key = " + mysql.escape(hero) + whereTagByTerm2;
|
|
}
|
|
|
|
break;
|
|
|
|
case "bill:month":
|
|
authorized = req.isAuthenticated() ? req.user.account_info.user_level > 1 : false;
|
|
tableName = localHandler.db.options.database + ".tbl_uid_statistics";
|
|
todayDateTag = utils.getDateTimeTag("m");
|
|
whereClause = "uid = " + mysql.escape(uid) + " AND date_tag = " + mysql.escape(todayDateTag);
|
|
orderByClause = "serial ASC";
|
|
break;
|
|
|
|
case "statistics:daily":
|
|
authorized = req.isAuthenticated() ? req.user.account_info.user_level > 1 : false;
|
|
tableName = localHandler.db.options.database + ".tbl_key_statistics";
|
|
todayDateTag = utils.getDateTimeTag("d");
|
|
whereClause = "uid = " + mysql.escape(uid) + " AND api_key = " + mysql.escape(hero) + " AND date_tag like " + mysql.escape(todayDateTag + "%");
|
|
orderByClause = "serial ASC";
|
|
break;
|
|
|
|
case "admin:word:all":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
whereClause = "" + " status = 0" + wordLevelClause;
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "admin:word:all:deleted":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
whereClause = "" + " status = 4" + wordLevelClause;
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "admin:word:like":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
whereClause = "raw like " + mysql.escape(hero + "%") + " AND status = 0" + wordLevelClause;
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "admin:word:like:deleted":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
whereClause = "raw like " + mysql.escape(hero + "%") + " AND status = 4" + wordLevelClause;
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "admin:word":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
whereClause = "raw = " + mysql.escape(hero) + " AND status = 0" + wordLevelClause;
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "admin:word:deleted":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + "." + crossCtl.MAIN_WORD_TBL_NAME + "";
|
|
whereClause = "raw = " + mysql.escape(hero) + " AND status = 4" + wordLevelClause;
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "admin:log:key":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + ".tbl_user_log";
|
|
whereClause = "tag LIKE 'key:%' AND target_key = " + mysql.escape(hero);
|
|
orderByClause = "serial ASC";
|
|
break;
|
|
|
|
case "admin:log:word":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + ".tbl_user_log";
|
|
whereClause = "tag LIKE 'word:%' AND target_key = " + mysql.escape(hero);
|
|
orderByClause = "serial ASC";
|
|
break;
|
|
|
|
case "admin:log:user:all":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + ".tbl_user_log";
|
|
whereClause = "";
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "admin:log:user:target":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + ".tbl_user_log";
|
|
whereClause = "name = " + mysql.escape(hero);
|
|
orderByClause = "serial DESC";
|
|
break;
|
|
|
|
case "notice":
|
|
authorized = true;
|
|
tableName = crossCtl.db.options.database + ".tbl_notice_list";
|
|
whereClause = "site_id = " + mysql.escape(crossCtl.sConfig.type) + " AND status = 0";
|
|
break;
|
|
|
|
case "guides:active":
|
|
authorized = true;
|
|
tableName = localHandler.db.options.database + ".tbl_guide_list";
|
|
whereClause = "status = 0";
|
|
break;
|
|
|
|
case "depot:ready":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + ".tbl_depot_list";
|
|
whereClause = "status = 0";
|
|
break;
|
|
|
|
case "review:ready":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = crossCtl.db.options.database + ".tbl_note_list";
|
|
whereClause = "status = 0 AND to_id = " + mysql.escape(crossCtl.sConfig.type + "_all");
|
|
break;
|
|
|
|
case "depot:active":
|
|
authorized = true;
|
|
tableName = localHandler.db.options.database + ".tbl_depot_list";
|
|
whereClause = "status = 1 OR uid = " + mysql.escape(uid);
|
|
break;
|
|
|
|
case "comment:active":
|
|
authorized = true;
|
|
tableName = crossCtl.db.options.database + ".tbl_comment_list";
|
|
whereClause = "tid = " + mysql.escape(hero) + " AND status < 4 AND site_id = " + mysql.escape(crossCtl.sConfig.type);
|
|
break;
|
|
|
|
case "guide:active":
|
|
authorized = true;
|
|
tableName = localHandler.db.options.database + ".tbl_guide_list";
|
|
whereClause = "status = 0";
|
|
break;
|
|
|
|
case "admin:key:active":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + ".tbl_key_list";
|
|
whereClause = "status = 0";
|
|
if (hero != undefined && hero != "all") {
|
|
whereClause = "uid = " + mysql.escape(hero) + " AND " + whereClause;
|
|
}
|
|
break;
|
|
|
|
case "admin:key:deleted":
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
tableName = localHandler.db.options.database + ".tbl_key_list";
|
|
whereClause = "status = 4";
|
|
if (hero != undefined && hero != "all") {
|
|
whereClause = "uid = " + mysql.escape(hero) + " AND " + whereClause;
|
|
}
|
|
break;
|
|
|
|
case "key":
|
|
authorized = req.isAuthenticated();
|
|
tableName = localHandler.db.options.database + ".tbl_key_list";
|
|
whereClause = " uid = " + mysql.escape(uid);
|
|
break;
|
|
|
|
case "key:active":
|
|
authorized = req.isAuthenticated();
|
|
tableName = localHandler.db.options.database + ".tbl_key_list";
|
|
whereClause = " uid = " + mysql.escape(uid) + " AND status = 0";
|
|
break;
|
|
|
|
case "key:deleted":
|
|
authorized = req.isAuthenticated();
|
|
tableName = localHandler.db.options.database + ".tbl_key_list";
|
|
whereClause = " uid = " + mysql.escape(uid) + " AND status = 4";
|
|
break;
|
|
|
|
case "score":
|
|
tableName = localHandler.db.options.database + ".tbl_score_list";
|
|
if (hero === "me") {
|
|
authorized = req.isAuthenticated();
|
|
whereClause = "uid = " + mysql.escape(uid);
|
|
} else {
|
|
authorized = req.infos.userInfo.adminFlag;
|
|
whereClause = "uid = " + mysql.escape(hero);
|
|
}
|
|
|
|
break;
|
|
|
|
case "accompany:active":
|
|
authorized = req.isAuthenticated();
|
|
tableName = localHandler.db.options.database + ".tbl_accompany_list";
|
|
whereClause = "(uid = " + mysql.escape(uid) + " OR guid = " + mysql.escape(uid) + ") AND status <> 4";
|
|
break;
|
|
|
|
case "accompany:inactive":
|
|
authorized = req.isAuthenticated();
|
|
tableName = localHandler.db.options.database + ".tbl_accompany_list";
|
|
whereClause = "(uid = " + mysql.escape(uid) + " OR guid = " + mysql.escape(uid) + ") AND status = 4";
|
|
break;
|
|
|
|
case "accompany:received":
|
|
authorized = req.isAuthenticated();
|
|
tableName = localHandler.db.options.database + ".tbl_accompany_list";
|
|
whereClause = "(guid = " + mysql.escape(uid) + ") AND (status = 0 OR status = 1)";
|
|
break;
|
|
|
|
case "accompany:sent":
|
|
authorized = req.isAuthenticated();
|
|
tableName = localHandler.db.options.database + ".tbl_accompany_list";
|
|
whereClause = "(uid = " + mysql.escape(uid) + ") AND (status = 0 OR status = 2)";
|
|
break;
|
|
|
|
case "review:active":
|
|
authorized = true;
|
|
tableName = crossCtl.db.options.database + ".tbl_note_list";
|
|
whereClause = "to_id = " + mysql.escape(crossCtl.sConfig.type + "_all") + " AND (status = 1 OR (status = 0 AND uid = " + mysql.escape(uid) + "))";
|
|
break;
|
|
|
|
default:
|
|
}
|
|
|
|
if (tableName === "") {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: "unknown target : " + target,
|
|
draw: draw,
|
|
recordsTotal: 0,
|
|
recordsFiltered: 0,
|
|
data: [],
|
|
});
|
|
} else if (authorized === false) {
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 401,
|
|
responseMessage: "Unauthorized",
|
|
draw: draw,
|
|
recordsTotal: 0,
|
|
recordsFiltered: 0,
|
|
data: [],
|
|
});
|
|
} else {
|
|
var targetPageNumber = parseInt(start / length) + 1;
|
|
var targetPageSize = length;
|
|
|
|
console.log("targetPageNumber=", targetPageNumber);
|
|
console.log("targetPageSize=", targetPageSize);
|
|
|
|
doPreListWork(req, res, function (error, metaData) {
|
|
console.log("huk error = ", error);
|
|
console.log("huk metaData = ", metaData);
|
|
if (error != null) {
|
|
utils.log("error", "error : " + JSON.stringify(error) + " " + utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
draw: draw,
|
|
recordsTotal: 0,
|
|
recordsFiltered: 0,
|
|
data: [],
|
|
});
|
|
} else {
|
|
crossCtl.getPagedList(
|
|
selectClause,
|
|
tableName,
|
|
joinClause,
|
|
whereClause,
|
|
groupByClause,
|
|
orderByClause,
|
|
targetPageSize,
|
|
targetPageNumber,
|
|
function (error, results) {
|
|
var data = [];
|
|
if (error) {
|
|
utils.log("error", "error : " + JSON.stringify(error) + " " + utils.__where());
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 500,
|
|
responseMessage: error,
|
|
draw: draw,
|
|
recordsTotal: 0,
|
|
recordsFiltered: 0,
|
|
data: [],
|
|
});
|
|
} else {
|
|
// console.log('results.fileList=', results.fileList)
|
|
var rawList = results.fileList;
|
|
var filteredData = [];
|
|
for (var i = 0; i < rawList.length; i++) {
|
|
var tmpObject = JSON.parse(JSON.stringify(rawList[i]));
|
|
if (tmpObject.created !== undefined) {
|
|
// tmpObject.created = moment(tmpObject.created).format("LLLL")
|
|
}
|
|
if (tmpObject.updated !== undefined) {
|
|
// tmpObject.updated = moment(tmpObject.updated).format("LLLL")
|
|
}
|
|
switch (target) {
|
|
case "guide:active":
|
|
delete tmpObject.uid;
|
|
delete tmpObject.status;
|
|
break;
|
|
|
|
case "comment:active":
|
|
if (uid === tmpObject.uid) {
|
|
tmpObject.myFlag = true;
|
|
} else {
|
|
tmpObject.myFlag = false;
|
|
}
|
|
delete tmpObject.uid;
|
|
|
|
break;
|
|
|
|
case "accompany:active":
|
|
case "accompany:inactive":
|
|
if (uid === tmpObject.guid) {
|
|
tmpObject.toMeFlag = true;
|
|
} else {
|
|
tmpObject.fromMeFlag = true;
|
|
}
|
|
delete tmpObject.uid;
|
|
delete tmpObject.guid;
|
|
|
|
break;
|
|
|
|
default:
|
|
}
|
|
filteredData[filteredData.length] = tmpObject;
|
|
// console.log('tmpObject=', tmpObject)
|
|
}
|
|
req.workTag
|
|
.res()
|
|
.status(200)
|
|
.send({
|
|
...req.workTag.responsePacket,
|
|
responseCode: 200,
|
|
responseMessage: error,
|
|
draw: draw,
|
|
recordsTotal: results.totalCount,
|
|
recordsFiltered: results.totalCount,
|
|
|
|
pageSize: results.pageSize,
|
|
totalPageCount: results.totalPageCount,
|
|
currentPageNumber: results.currentPageNumber,
|
|
recordsFiltered: results.totalCount,
|
|
|
|
data: filteredData,
|
|
metaData: metaData,
|
|
});
|
|
}
|
|
}
|
|
);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|