HyeonJun Jeon

[Modify] Use sql transition

const mysql = require("mysql");
const mysql2 = require("mysql2/promise");
const fs = require("fs");
const parseICal = require("./ICal");
const [id, pw] = fs
.readFileSync("server/libs/sql.pvdata", "utf8")
......@@ -12,60 +10,59 @@ const connectOption = {
password: pw,
database: "db",
};
const pool = mysql2.createPool(connectOption);
async function jcalToSQL(jcal, userID) {
// const fsql = fs.readFileSync("server/libs/sql.pvdata", "utf8");
// const [id, pw] = fsql.split("\r\n");
const connection = await mysql2.createConnection(connectOption);
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const commonCols = [
"userID",
"uid",
"label",
"subjectID",
"type",
"description",
"url",
"detail",
];
const dateScheCols = [...commonCols, "date"];
const timeScheCols = [...commonCols, "date", "startTime", "endTime"];
const dateQueryString =
"INSERT IGNORE INTO schedules_date (" +
dateScheCols.join(",") +
") VALUES ?";
const timeQueryString =
"INSERT IGNORE INTO schedules_time (" +
timeScheCols.join(",") +
") VALUES ?";
await connection.connect();
const dateSchedules = [];
const timeSchedules = [];
for (const sche of jcal) {
sche.userID = userID;
sche.type = "assignment";
if (sche.scheType === "date")
dateSchedules.push(dateScheCols.map((col) => sche[col]));
else if (sche.scheType === "time")
timeSchedules.push(timeScheCols.map((col) => sche[col]));
else console.log("unexpected scheType", sche);
}
const commonCols = [
"userID",
"uid",
"label",
"subjectID",
"type",
"description",
"url",
"detail",
];
const dateScheCols = [...commonCols, "date"];
const timeScheCols = [...commonCols, "date", "startTime", "endTime"];
const dateQueryString =
"INSERT IGNORE INTO schedules_date (" +
dateScheCols.join(",") +
") VALUES ?";
const timeQueryString =
"INSERT IGNORE INTO schedules_time (" +
timeScheCols.join(",") +
") VALUES ?";
const dateSchedules = [];
const timeSchedules = [];
for (const sche of jcal) {
sche.userID = userID;
sche.type = "assignment";
if (sche.scheType === "date")
dateSchedules.push(dateScheCols.map((col) => sche[col]));
else if (sche.scheType === "time")
timeSchedules.push(timeScheCols.map((col) => sche[col]));
else console.log("unexpected scheType", sche);
let [result] = await connection.query(dateQueryString, [dateSchedules]);
console.log("ICAL schedules_date | " + result.affectedRows);
[result] = await connection.query(timeQueryString, [timeSchedules]);
console.log("ICAL schedules_time | " + result.affectedRows);
await connection.commit();
} catch (e) {
console.log(e);
await connection.rollback();
} finally {
connection.release();
}
let [result] = await connection.query(dateQueryString, [dateSchedules]);
console.log("ICAL schedules_date | " + result.affectedRows);
[result] = await connection.query(timeQueryString, [timeSchedules]);
console.log("ICAL schedules_time | " + result.affectedRows);
connection.end();
}
// iCal의 소유주를 DB에 등록 후 userID get
// subjectID가 subjects, userID가 users에 있어야함
// const fdata = fs.readFileSync("C:/Users/teddy/Downloads/data.ics", "utf8");
// const jcal = parseICal(fdata);
// jcalToSQL(jcal, 1);
module.exports = { jcalToSQL, connectOption };
module.exports = { jcalToSQL, connectOption, pool };
......
const { default: axios } = require("axios");
const express = require("express");
const mysql2 = require("mysql2/promise");
const parseICal = require("../libs/ICal");
const { connectOption, jcalToSQL } = require("../libs/MySQL");
const { pool, jcalToSQL } = require("../libs/MySQL");
const dbRouter = express.Router();
const schedules_dateRouter = require("./Schedules_date");
......@@ -13,21 +12,25 @@ const userSubjectRouter = require("./User-subject");
const usersRouter = require("./Users");
async function route() {
const connection = await mysql2.createConnection(connectOption);
// (userID, uid)
dbRouter.delete("/schedule", async (req, res) => {
console.log("delete /db/schedule");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const queryString = `
DELETE FROM \`${req.body.table}\` sc
WHERE sc.userID = ${req.body.userID}
AND sc.uid = ${req.body.uid}`;
await connection.query(queryString);
await connection.commit();
res.end();
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
......@@ -41,7 +44,6 @@ async function route() {
responseType: "blob",
});
await jcalToSQL(parseICal(ical), req.body.userID);
res.end();
} catch (e) {
console.log(e);
......
const express = require("express");
const mysql2 = require("mysql2/promise");
const { connectOption } = require("../libs/MySQL");
const { pool } = require("../libs/MySQL");
const schedules_dateRouter = express.Router();
async function route() {
const connection = await mysql2.createConnection(connectOption);
// (userID, date) => schedules
schedules_dateRouter.get("/", async (req, res) => {
// console.log("/db/schedules_date");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT sc.label, sc.type, sc.description, sc.url, sc.detail,
......@@ -28,13 +26,17 @@ async function route() {
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
// (userID, label, subjectID, type, description, url, date)
schedules_dateRouter.post("/", async (req, res) => {
console.log("post /db/schedules_date");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
let queryString = `
INSERT INTO \`schedules_date\`
(userID, label, subjectID, type, description, url, date, status)
......@@ -59,10 +61,14 @@ async function route() {
ON sc.subjectID = sbj.ID
WHERE sc.ID = LAST_INSERT_ID()`;
[results] = await connection.query(queryString);
await connection.commit();
res.send(results[0]);
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
}
......
const express = require("express");
const mysql2 = require("mysql2/promise");
const { connectOption } = require("../libs/MySQL");
const { pool } = require("../libs/MySQL");
const schedules_repeatRouter = express.Router();
async function route() {
const connection = await mysql2.createConnection(connectOption);
// (userID, day) => schedules
schedules_repeatRouter.get("/", async (req, res) => {
// console.log("/db/schedules_repeat");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT sc.label, sc.type, sc.description, sc.uid, sc.url, sc.detail, sbj.name,
......@@ -29,13 +27,17 @@ async function route() {
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
// (userID, label, subjectID, type, desciption, url, status, day, startTime, endTime)
schedules_repeatRouter.post("/", async (req, res) => {
console.log("/db/schedules_repeat");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const queryString = `
INSERT INTO schedules_repeat (userID, label, subjectID, type, status, day, startTime, endTime)
VALUE (${req.body.userID}, "${req.body.label}", ${req.body.subjectID}, "${req.body.type}",
......@@ -60,10 +62,14 @@ async function route() {
WHERE sc.ID = LAST_INSERT_ID()
ORDER BY sc.startTime`;
[results] = await connection.query(queryString);
await connection.commit();
res.send(results[0]);
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
}
......
const express = require("express");
const mysql2 = require("mysql2/promise");
const { connectOption } = require("../libs/MySQL");
const { pool } = require("../libs/MySQL");
const schedules_timeRouter = express.Router();
async function route() {
const connection = await mysql2.createConnection(connectOption);
// (userID, date) => schedules
schedules_timeRouter.get("/", async (req, res) => {
// console.log("/db/schedules_time");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT sc.label, sc.type, sc.description, sc.url, sc.detail, sbj.name, us.nickname,
......@@ -29,13 +27,17 @@ async function route() {
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
// (userID, label, subjectID, type, description, url, date, startTime, endTime)
schedules_timeRouter.post("/", async (req, res) => {
console.log("post /db/schedules_time");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const startTime = req.body.startTime ? `"${req.body.startTime}"` : "null";
const endTime = req.body.endTime ? `"${req.body.endTime}"` : "null";
let queryString = `
......@@ -63,10 +65,14 @@ async function route() {
WHERE sc.ID = LAST_INSERT_ID()
ORDER BY sc.endTime`;
[results] = await connection.query(queryString);
await connection.commit();
res.send(results[0]);
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
}
......
const express = require("express");
const mysql2 = require("mysql2/promise");
const { connectOption } = require("../libs/MySQL");
const { pool } = require("../libs/MySQL");
const subjectsRouter = express.Router();
async function route() {
const connection = await mysql2.createConnection(connectOption);
// (ID) => null | name //unused
subjectsRouter.get("/", async (req, res) => {
console.log("/db/subjects");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT name FROM subjects sbj
......@@ -18,13 +16,17 @@ async function route() {
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
// [{name, link}, ...]
subjectsRouter.post("/s", async (req, res) => {
console.log("post /db/subjects/s");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const subList = [];
for (const s of req.body.list) {
const subjectID = s.link.split("courses/")[1];
......@@ -35,10 +37,14 @@ async function route() {
await connection.query(queryString);
subList.push({ name: s.name, subjectID });
}
await connection.commit();
res.send(subList);
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
}
......
const express = require("express");
const mysql2 = require("mysql2/promise");
const { connectOption } = require("../libs/MySQL");
const { pool } = require("../libs/MySQL");
const userSubjectRouter = express.Router();
async function route() {
const connection = await mysql2.createConnection(connectOption);
// (userID) => [{userID, subjectID, nickname, status, color, name}, ...]
userSubjectRouter.get("/", async (req, res) => {
console.log("/db/user-subject");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT us.userID, us.subjectID, us.nickname, us.status, us.color, sub.name
......@@ -21,30 +19,40 @@ async function route() {
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
// (userID, subjectID, status)
userSubjectRouter.put("/check", async (req, res) => {
console.log("/db/user-subject/check");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const queryString = `
UPDATE \`user-subject\`
SET status = ${req.body.status}
WHERE userID = ${req.body.userID}
AND subjectID = ${req.body.subjectID}`;
await connection.query(queryString);
await connection.commit();
res.end();
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
// (userID, subjectID, nickname, color)
userSubjectRouter.put("/modify", async (req, res) => {
console.log("/db/user-subject/modify");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const queryString = `
UPDATE \`user-subject\`
SET color = '${req.body.color}',
......@@ -52,16 +60,21 @@ async function route() {
WHERE userID = ${req.body.userID}
AND subjectID = ${req.body.subjectID}`;
await connection.query(queryString);
await connection.commit();
res.end();
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
// (userID, [subjectID, ...])
userSubjectRouter.post("/s", async (req, res) => {
console.log("post /db/user-subject/s");
const connection = await pool.getConnection(async (con) => con);
const colors = [
"3ADF00",
"0040FF",
......@@ -75,6 +88,7 @@ async function route() {
"2EFEF7",
];
try {
await connection.beginTransaction();
for (const i in req.body.subList) {
const queryString = `
INSERT INTO \`user-subject\`
......@@ -82,13 +96,18 @@ async function route() {
VALUES (${req.body.userID}, ${req.body.subList[i].subjectID}, 1, '${colors[i]}')`;
await connection.query(queryString);
}
await connection.commit();
res.end();
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
}
route();
module.exports = userSubjectRouter;
......
const cryptoJs = require("crypto-js");
const express = require("express");
const mysql2 = require("mysql2/promise");
const { connectOption } = require("../libs/MySQL");
const { pool } = require("../libs/MySQL");
const usersRouter = express.Router();
async function route() {
const connection = await mysql2.createConnection(connectOption);
// (loginID) => null | ID(str)
usersRouter.get("/", async (req, res) => {
console.log("/db/users");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT ID FROM users us
......@@ -19,12 +17,15 @@ async function route() {
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
// (loginID, loginPW) => null | "correct"
usersRouter.get("/check", async (req, res) => {
console.log("/db/users/check");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT loginPW FROM users us
......@@ -34,13 +35,17 @@ async function route() {
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
// (loginID, loginPW, name, ical) => ID
usersRouter.post("/", async (req, res) => {
console.log("post /db/users/");
const connection = await pool.getConnection(async (con) => con);
try {
await connection.beginTransaction();
const hashpw = cryptoJs.SHA256(req.body.loginPW).toString();
let queryString = `
INSERT INTO users
......@@ -50,27 +55,34 @@ async function route() {
queryString = `SELECT LAST_INSERT_ID() ID`;
const [results] = await connection.query(queryString);
await connection.commit();
res.send(results[0]);
} catch (e) {
console.log(e);
await connection.rollback();
res.end();
} finally {
connection.release();
}
});
// (ID) => ical
usersRouter.get("/ical", async (req, res) => {
console.log("/db/users/ical");
try {
const queryString = `
// (ID) => ical
usersRouter.get("/ical", async (req, res) => {
console.log("/db/users/ical");
const connection = await pool.getConnection(async (con) => con);
try {
const queryString = `
SELECT ical FROM users us
WHERE us.ID = '${req.query.ID}'`;
const [results] = await connection.query(queryString);
res.send(results[0]);
} catch (e) {
console.log(e);
res.end();
}
});
const [results] = await connection.query(queryString);
res.send(results[0]);
} catch (e) {
console.log(e);
res.end();
} finally {
connection.release();
}
});
}
route();
......