Toggle navigation
Toggle navigation
This project
Loading...
Sign in
HyeonJun Jeon
/
Extended-Calendar
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
HyeonJun Jeon
2022-06-10 04:02:36 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
a8361dbdac0b1d90bc3fea7625782d6bb9c29b1a
a8361dbd
1 parent
2e970d0f
[Modify] Use sql transition
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
144 additions
and
90 deletions
server/libs/MySQL.js
server/routers/DB.js
server/routers/Schedules_date.js
server/routers/Schedules_repeat.js
server/routers/Schedules_time.js
server/routers/Subjects.js
server/routers/User-subject.js
server/routers/Users.js
server/libs/MySQL.js
View file @
a8361db
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
};
...
...
server/routers/DB.js
View file @
a8361db
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
);
...
...
server/routers/Schedules_date.js
View file @
a8361db
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
();
}
});
}
...
...
server/routers/Schedules_repeat.js
View file @
a8361db
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
();
}
});
}
...
...
server/routers/Schedules_time.js
View file @
a8361db
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
();
}
});
}
...
...
server/routers/Subjects.js
View file @
a8361db
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
();
}
});
}
...
...
server/routers/User-subject.js
View file @
a8361db
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
;
...
...
server/routers/Users.js
View file @
a8361db
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
();
...
...
Please
register
or
login
to post a comment