diff --git a/api.js b/api.js index 1dd2153..243c5bc 100644 --- a/api.js +++ b/api.js @@ -15,6 +15,7 @@ const bodyParser = require("body-parser"); const inquiriesRouter = require("./routes/inquiries"); // 문의 사항 const conceptRouter = require("./routes/concept"); // 개념 포스트잇 const quizRouter = require("./routes/quiz"); // 퀴즈 포스트잇 +const worngRouter = require("./routes/wrong"); // 퀴즈 포스트잇 // 기본 설정 app.use(cors()); @@ -27,6 +28,7 @@ app.use("/style", express.static(__dirname + "/style")); app.use("/inquiries", inquiriesRouter); // 문의사항 라우터 app.use("/concept", conceptRouter); // 개념 포스트잇 라우터 app.use("/quiz", quizRouter); // 개념 포스트잇 라우터 +app.use("/wrong", worngRouter); // 개념 포스트잇 라우터 app.use( express.static("public", { @@ -164,151 +166,6 @@ app.get("/kakao/logout", async (req, res) => { res.redirect(kakaoAuthURL); }); -// 오답 포스트잇 POST API 생성 -app.post("/wrong", (req, res) => { - const { token, importance, description } = req.body; - - // 데이터베이스 풀에서 연결 얻기 - pool - .getConnection() - .then((conn) => { - // 데이터베이스에 데이터 삽입 - conn - .query( - "INSERT INTO Wrong (token, importance, description) VALUES (?, ?, ?)", - [token, importance, description] - ) - .then((result) => { - console.log("데이터가 성공적으로 삽입되었습니다."); - res.json({ message: "데이터가 성공적으로 삽입되었습니다." }); - conn.release(); // 연결 반환 - }) - .catch((err) => { - console.error("데이터 삽입 오류:", err); - res.status(500).json({ error: "데이터 삽입 오류" }); - conn.release(); // 연결 반환 - }); - }) - .catch((err) => { - console.error("데이터베이스 연결 오류:", err); - res.status(500).json({ error: "데이터베이스 연결 오류" }); - }); -}); - -// 퀴즈 리스트 GET API 생성 -app.get("/wrong-list", (req, res) => { - const { token } = req.query; - - // 데이터베이스 풀에서 연결 얻기 - pool - .getConnection() - .then((conn) => { - // 데이터베이스에서 데이터 조회 - conn - .query("SELECT * FROM Wrong WHERE token = ?", [token]) - .then((results) => { - if (results.length === 0) { - // 해당 토큰에 대한 데이터가 없을 경우 - res.status(404).json({ error: "데이터를 찾을 수 없습니다." }); - } else { - // 조회된 데이터를 배열로 묶어서 JSON 응답으로 반환 - const data = results.map((result) => ({ - description: result.description, - })); - res.json(data); - } - conn.release(); // 연결 반환 - }) - .catch((err) => { - console.error("데이터 조회 오류:", err); - res.status(500).json({ error: "데이터 조회 오류" }); - conn.release(); // 연결 반환 - }); - }) - .catch((err) => { - console.error("데이터베이스 연결 오류:", err); - res.status(500).json({ error: "데이터베이스 연결 오류" }); - }); -}); - -// 퀴즈 포스트잇 중요도 태그 별 GET API -app.get("/wrong-importance", (req, res) => { - const { token, importance } = req.query; - - // 데이터베이스 풀에서 연결 얻기 - pool - .getConnection() - .then((conn) => { - // 데이터베이스에서 데이터 조회 - conn - .query("SELECT * FROM Wrong WHERE token = ? AND importance = ?", [ - token, - importance, - ]) - .then((results) => { - if (results.length === 0) { - // 해당 조건에 맞는 데이터가 없을 경우 - res.status(404).json({ error: "데이터를 찾을 수 없습니다." }); - } else { - // 조회된 데이터를 배열로 묶어서 JSON 응답으로 반환 - const data = results.map((result) => ({ - description: result.description, - })); - res.json(data); - } - conn.release(); // 연결 반환 - }) - .catch((err) => { - console.error("데이터 조회 오류:", err); - res.status(500).json({ error: "데이터 조회 오류" }); - conn.release(); // 연결 반환 - }); - }) - .catch((err) => { - console.error("데이터베이스 연결 오류:", err); - res.status(500).json({ error: "데이터베이스 연결 오류" }); - }); -}); - -// 오답 중요도 별로 내림차순, 오름차순 -app.get("/wrong-sort", (req, res) => { - const { token, order } = req.query; - - // 데이터베이스 풀에서 연결 얻기 - pool - .getConnection() - .then((conn) => { - // 데이터베이스에서 데이터 조회 - const sqlQuery = `SELECT * FROM Wrong WHERE token = ? ORDER BY importance ${ - order === "asc" ? "ASC" : "DESC" - }`; - conn - .query(sqlQuery, [token]) - .then((results) => { - if (results.length === 0) { - // 해당 조건에 맞는 데이터가 없을 경우 - res.status(404).json({ error: "데이터를 찾을 수 없습니다." }); - } else { - // 조회된 데이터를 배열로 묶어서 JSON 응답으로 반환 - const data = results.map((result) => ({ - description: result.description, - })); - res.json(data); - } - conn.release(); // 연결 반환 - }) - .catch((err) => { - console.error("데이터 조회 오류:", err); - res.status(500).json({ error: "데이터 조회 오류" }); - conn.release(); // 연결 반환 - }); - }) - .catch((err) => { - console.error("데이터베이스 연결 오류:", err); - res.status(500).json({ error: "데이터베이스 연결 오류" }); - }); -}); - app.listen(port, () => { console.log(`서버가 포트 ${port}에서 실행 중입니다.`); }); diff --git a/public/category(wronganswer).html b/public/category(wronganswer).html index 8b1195d..444082c 100644 --- a/public/category(wronganswer).html +++ b/public/category(wronganswer).html @@ -139,19 +139,19 @@ // 서버에서 오답 목록을 가져와 초기 데이터 로딩 async function fetchWrongList() { await getToken(); - fetchData("/wrong-list"); + fetchData("/wrong/list"); } // 중요도에 따라 오답을 가져오는 함수 async function fetchWrongImportance(importance) { await getToken(); - fetchData("/wrong-importance", "", importance); + fetchData("/wrong/importance", "", importance); } // 중요도 정렬에 따라 오답을 가져오는 함수 async function fetchWrongSort(order) { await getToken(); - fetchData("/wrong-sort", order); + fetchData("/wrong/sort", order); } // 페이지 로드 시 초기 데이터 로딩 diff --git a/routes/concept.js b/routes/concept.js index 8efc790..23f4326 100644 --- a/routes/concept.js +++ b/routes/concept.js @@ -33,7 +33,7 @@ router.post("/", (req, res) => { }); }); -// 퀴즈 리스트 GET API 생성 +// 개념 리스트 GET API 생성 router.get("/list", (req, res) => { const { token } = req.query; @@ -69,7 +69,7 @@ router.get("/list", (req, res) => { }); }); -// 퀴즈 포스트잇 중요도 태그 별 GET API +// 개념 포스트잇 중요도 태그 별 GET API router.get("/importance", (req, res) => { const { token, importance } = req.query; diff --git a/routes/wrong.js b/routes/wrong.js new file mode 100644 index 0000000..9889ebd --- /dev/null +++ b/routes/wrong.js @@ -0,0 +1,150 @@ +const express = require("express"); +const router = express.Router(); +const pool = require("../db/conn"); // 데이터베이스 연결 모듈 가져오기 + +// 오답 포스트잇 POST API 생성 +router.post("/", (req, res) => { + const { token, importance, description } = req.body; + + // 데이터베이스 풀에서 연결 얻기 + pool + .getConnection() + .then((conn) => { + // 데이터베이스에 데이터 삽입 + conn + .query( + "INSERT INTO Wrong (token, importance, description) VALUES (?, ?, ?)", + [token, importance, description] + ) + .then((result) => { + console.log("데이터가 성공적으로 삽입되었습니다."); + res.json({ message: "데이터가 성공적으로 삽입되었습니다." }); + conn.release(); // 연결 반환 + }) + .catch((err) => { + console.error("데이터 삽입 오류:", err); + res.status(500).json({ error: "데이터 삽입 오류" }); + conn.release(); // 연결 반환 + }); + }) + .catch((err) => { + console.error("데이터베이스 연결 오류:", err); + res.status(500).json({ error: "데이터베이스 연결 오류" }); + }); +}); + +// 퀴즈 리스트 GET API 생성 +router.get("/list", (req, res) => { + const { token } = req.query; + + // 데이터베이스 풀에서 연결 얻기 + pool + .getConnection() + .then((conn) => { + // 데이터베이스에서 데이터 조회 + conn + .query("SELECT * FROM Wrong WHERE token = ?", [token]) + .then((results) => { + if (results.length === 0) { + // 해당 토큰에 대한 데이터가 없을 경우 + res.status(404).json({ error: "데이터를 찾을 수 없습니다." }); + } else { + // 조회된 데이터를 배열로 묶어서 JSON 응답으로 반환 + const data = results.map((result) => ({ + description: result.description, + })); + res.json(data); + } + conn.release(); // 연결 반환 + }) + .catch((err) => { + console.error("데이터 조회 오류:", err); + res.status(500).json({ error: "데이터 조회 오류" }); + conn.release(); // 연결 반환 + }); + }) + .catch((err) => { + console.error("데이터베이스 연결 오류:", err); + res.status(500).json({ error: "데이터베이스 연결 오류" }); + }); +}); + +// 퀴즈 포스트잇 중요도 태그 별 GET API +router.get("/importance", (req, res) => { + const { token, importance } = req.query; + + // 데이터베이스 풀에서 연결 얻기 + pool + .getConnection() + .then((conn) => { + // 데이터베이스에서 데이터 조회 + conn + .query("SELECT * FROM Wrong WHERE token = ? AND importance = ?", [ + token, + importance, + ]) + .then((results) => { + if (results.length === 0) { + // 해당 조건에 맞는 데이터가 없을 경우 + res.status(404).json({ error: "데이터를 찾을 수 없습니다." }); + } else { + // 조회된 데이터를 배열로 묶어서 JSON 응답으로 반환 + const data = results.map((result) => ({ + description: result.description, + })); + res.json(data); + } + conn.release(); // 연결 반환 + }) + .catch((err) => { + console.error("데이터 조회 오류:", err); + res.status(500).json({ error: "데이터 조회 오류" }); + conn.release(); // 연결 반환 + }); + }) + .catch((err) => { + console.error("데이터베이스 연결 오류:", err); + res.status(500).json({ error: "데이터베이스 연결 오류" }); + }); +}); + +// 오답 중요도 별로 내림차순, 오름차순 +router.get("/sort", (req, res) => { + const { token, order } = req.query; + + // 데이터베이스 풀에서 연결 얻기 + pool + .getConnection() + .then((conn) => { + // 데이터베이스에서 데이터 조회 + const sqlQuery = `SELECT * FROM Wrong WHERE token = ? ORDER BY importance ${ + order === "asc" ? "ASC" : "DESC" + }`; + conn + .query(sqlQuery, [token]) + .then((results) => { + if (results.length === 0) { + // 해당 조건에 맞는 데이터가 없을 경우 + res.status(404).json({ error: "데이터를 찾을 수 없습니다." }); + } else { + // 조회된 데이터를 배열로 묶어서 JSON 응답으로 반환 + const data = results.map((result) => ({ + description: result.description, + })); + res.json(data); + } + conn.release(); // 연결 반환 + }) + .catch((err) => { + console.error("데이터 조회 오류:", err); + res.status(500).json({ error: "데이터 조회 오류" }); + conn.release(); // 연결 반환 + }); + }) + .catch((err) => { + console.error("데이터베이스 연결 오류:", err); + res.status(500).json({ error: "데이터베이스 연결 오류" }); + }); +}); + +module.exports = router;