MySQL.js
1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const mysql2 = require("mysql2/promise");
require("dotenv").config();
const poolOptions = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
};
const pool = mysql2.createPool(poolOptions);
async function jcalToSQL(jcal, userID) {
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 ?";
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();
}
}
// iCal의 소유주를 DB에 등록 후 userID get
// subjectID가 subjects, userID가 users에 있어야함
module.exports = { jcalToSQL, pool };