From 26c3036b92e9d7072c34578ba2179b78cfc5821c Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 03:32:00 +0900 Subject: [PATCH 01/32] =?UTF-8?q?fix=20:=20db.config.js=20gitignore=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- config/db.config.js | 17 ----------------- 2 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 config/db.config.js diff --git a/.gitignore b/.gitignore index cb0b009..4a8089a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .env -db.config.js \ No newline at end of file +/config/db.config.js \ No newline at end of file diff --git a/config/db.config.js b/config/db.config.js deleted file mode 100644 index db19374..0000000 --- a/config/db.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import mysql from "mysql2/promise"; -import dotenv from "dotenv"; - -dotenv.config(); - -export const pool = mysql.createPool({ - host: process.env.DB_HOST || "localhost", // mysql의 hostname - user: process.env.DB_USER || "root", // user 이름 - port: process.env.DB_PORT || 3306, // 포트 번호 - database: process.env.DB_TABLE || "readmeTEST", // 데이터베이스 이름 - password: process.env.DB_PASSWORD || "5942", // 비밀번호 - waitForConnections: true, - // Pool에 획득할 수 있는 connection이 없을 때, - // true면 요청을 queue에 넣고 connection을 사용할 수 있게 되면 요청을 실행하며, false이면 즉시 오류를 내보내고 다시 요청 - connectionLimit: 10, // 몇 개의 커넥션을 가지게끔 할 것인지 - queueLimit: 0, // getConnection에서 오류가 발생하기 전에 Pool에 대기할 요청의 개수 한도 -}); From 523fbb3d280a9bac561e04da8bad3cd7bf04ceef Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 03:32:00 +0900 Subject: [PATCH 02/32] =?UTF-8?q?fix=20:=20db.config.js=20gitignore=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cb0b009..4a8089a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .env -db.config.js \ No newline at end of file +/config/db.config.js \ No newline at end of file From 910f1a63c496de3f43272bb1b0bb244e0e45ef71 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 03:32:00 +0900 Subject: [PATCH 03/32] =?UTF-8?q?fix=20:=20db.config.js=20gitignore=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cb0b009..4a8089a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .env -db.config.js \ No newline at end of file +/config/db.config.js \ No newline at end of file From c651bb2b0fd41b0d40e6647cb12f34f2ab9b74df Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 03:32:00 +0900 Subject: [PATCH 04/32] =?UTF-8?q?fix=20:=20db.config.js=20gitignore=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/db.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/db.config.js b/config/db.config.js index f9f5b45..3ed3ee5 100644 --- a/config/db.config.js +++ b/config/db.config.js @@ -7,8 +7,8 @@ export const pool = mysql.createPool({ host: process.env.DB_HOST || "localhost", // mysql의 hostname user: process.env.DB_USER || "root", // user 이름 port: process.env.DB_PORT || 3306, // 포트 번호 - database: process.env.DB_TABLE || "readmeTEST", // 데이터베이스 이름 - password: process.env.DB_PASSWORD || "pgmaster028", // 비밀번호 + database: process.env.DB_TABLE || "readmetest=", // 데이터베이스 이름 + password: process.env.DB_PASSWORD || "9368", // 비밀번호 waitForConnections: true, // Pool에 획득할 수 있는 connection이 없을 때, // true면 요청을 queue에 넣고 connection을 사용할 수 있게 되면 요청을 실행하며, false이면 즉시 오류를 내보내고 다시 요청 From b048ab8142f7174fad31851399e0a98eb4c851c2 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 16:40:34 +0900 Subject: [PATCH 05/32] =?UTF-8?q?feat=20:=20=EA=B3=B5=EC=A7=80=EB=B0=A9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20route,sql,dao=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/admin/admin.dao.js | 19 ++++++++++++++++++- domains/admin/admin.sql.js | 13 +++++++------ index.js | 2 ++ routes/admin.route.js | 1 + 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 1253e65..4cc0e09 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -1,7 +1,7 @@ import { pool } from "../../config/db.config.js"; import { BaseError } from "../../config/error.js"; import { status } from "../../config/response.status.js"; -import { getProfileByUserId } from "./admin.sql.js"; +import { createRoomsByUser, getProfileByUserId } from "./admin.sql.js"; export const getUserProfile = async (userId) => { try { @@ -20,3 +20,20 @@ export const getUserProfile = async (userId) => { throw new BaseError(status.INTERNAL_SERVER_ERROR); } }; + +export const createRoomsDao = async (userId) => { + try { + const conn = await pool.getConnection(); + const [rows] = await conn.query(createRoomsByUser, [userId]); + + if (rows.length === 0) { + throw new BaseError(404, "User not found"); + } + + conn.release(); + return rows[0]; + } catch (error) { + console.error("공지방 생성하기 에러"); + throw new BaseError(status.INTERNAL_SERVER_ERROR); + } +}; diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index bdca75f..47b61f0 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,4 +1,4 @@ -// 개설한 공지방 찾기 +// 유저 프로필 조회 export const getProfileByUserId = ` SELECT ur.nickname, ur.profile_image, ur.penalty_count FROM \`user-room\` ur @@ -6,9 +6,10 @@ export const getProfileByUserId = ` WHERE u.id = ? `; -export const createRooms = ` - SELECT r.* - FROM user u - JOIN room r ON u.id = r.admin_id - WHERE u.id = ? +// 공지방 생성 +export const createRoomsByUser = ` + SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty + FROM room r + JOIN user u ON u.id = r.user_id + WHERE u.id = ? AND r.status = 'EXIST' <- 이거 넣어주는게 맞겠지? status `; diff --git a/index.js b/index.js index cd557f9..32e3840 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ import { status } from "./config/response.status.js"; import { response } from "./config/response.js"; import { userRouter } from "./routes/user.route.js"; import { roomRouter } from "./routes/room.route.js"; +import { adminRouter } from "./routes/adomin.route.js"; dotenv.config(); @@ -38,3 +39,4 @@ app.get("/", (req, res) => { app.use("/user", userRouter); app.use("/room", roomRouter); +app.use("/admin", adminRouter); diff --git a/routes/admin.route.js b/routes/admin.route.js index 61a8799..789cdaf 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -6,3 +6,4 @@ import { userProfile } from "../domains/admin/admin.controller.js"; export const adminRouter = express.Router(); adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); +adminRouter.get("/rooms", expressAsyncHandler(createRooms)); From c3b41638226291327b0428c8e79080cf2187e7ba Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 16:41:43 +0900 Subject: [PATCH 06/32] =?UTF-8?q?feat=20:=20sql=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EB=B3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/admin/admin.sql.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index 47b61f0..b44bc94 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -11,5 +11,5 @@ export const createRoomsByUser = ` SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty FROM room r JOIN user u ON u.id = r.user_id - WHERE u.id = ? AND r.status = 'EXIST' <- 이거 넣어주는게 맞겠지? status + WHERE u.id = ? AND r.status = 'EXIST' `; From 84a6be27ae127a2e05f16ae7ca465746193c36c9 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 16:55:33 +0900 Subject: [PATCH 07/32] Wls --- domains/admin/admin.dao.js | 14 +++++++------- domains/admin/admin.sql.js | 16 ++++++++-------- routes/admin.route.js | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 4cc0e09..9e25de4 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -3,37 +3,37 @@ import { BaseError } from "../../config/error.js"; import { status } from "../../config/response.status.js"; import { createRoomsByUser, getProfileByUserId } from "./admin.sql.js"; -export const getUserProfile = async (userId) => { +export const createRoomsDao = async (userId) => { try { const conn = await pool.getConnection(); + const [rows] = await conn.query(createRoomsByUser, [userId]); - const [rows] = await conn.query(getProfileByUserId, userId); if (rows.length === 0) { - conn.release(); throw new BaseError(404, "User not found"); } conn.release(); return rows[0]; } catch (error) { - console.log("User 프로필 조회 에러"); + console.error("공지방 생성하기 에러"); throw new BaseError(status.INTERNAL_SERVER_ERROR); } }; -export const createRoomsDao = async (userId) => { +export const getUserProfile = async (userId) => { try { const conn = await pool.getConnection(); - const [rows] = await conn.query(createRoomsByUser, [userId]); + const [rows] = await conn.query(getProfileByUserId, userId); if (rows.length === 0) { + conn.release(); throw new BaseError(404, "User not found"); } conn.release(); return rows[0]; } catch (error) { - console.error("공지방 생성하기 에러"); + console.log("User 프로필 조회 에러"); throw new BaseError(status.INTERNAL_SERVER_ERROR); } }; diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index b44bc94..76c6f76 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,11 +1,3 @@ -// 유저 프로필 조회 -export const getProfileByUserId = ` - SELECT ur.nickname, ur.profile_image, ur.penalty_count - FROM \`user-room\` ur - JOIN user u ON u.id = ur.user_id - WHERE u.id = ? -`; - // 공지방 생성 export const createRoomsByUser = ` SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty @@ -13,3 +5,11 @@ export const createRoomsByUser = ` JOIN user u ON u.id = r.user_id WHERE u.id = ? AND r.status = 'EXIST' `; + +// 유저 프로필 조회 +export const getProfileByUserId = ` + SELECT ur.nickname, ur.profile_image, ur.penalty_count + FROM \`user-room\` ur + JOIN user u ON u.id = ur.user_id + WHERE u.id = ? +`; diff --git a/routes/admin.route.js b/routes/admin.route.js index 789cdaf..a93e9f8 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -5,5 +5,5 @@ import { userProfile } from "../domains/admin/admin.controller.js"; export const adminRouter = express.Router(); -adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); adminRouter.get("/rooms", expressAsyncHandler(createRooms)); +adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); From 8d256b4bb0321b92849cd440f263cc83138caf2e Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 21:51:21 +0900 Subject: [PATCH 08/32] Wls --- config/db.config.js | 2 +- domains/admin/admin.controller.js | 15 +++++++++++++-- domains/admin/admin.dao.js | 4 ++-- domains/admin/admin.service.js | 11 ++++++++++- domains/admin/admin.sql.js | 2 +- index.js | 2 +- routes/admin.route.js | 4 ++-- 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/config/db.config.js b/config/db.config.js index 3ed3ee5..36a81bb 100644 --- a/config/db.config.js +++ b/config/db.config.js @@ -7,7 +7,7 @@ export const pool = mysql.createPool({ host: process.env.DB_HOST || "localhost", // mysql의 hostname user: process.env.DB_USER || "root", // user 이름 port: process.env.DB_PORT || 3306, // 포트 번호 - database: process.env.DB_TABLE || "readmetest=", // 데이터베이스 이름 + database: process.env.DB_TABLE || "readmetest", // 데이터베이스 이름 password: process.env.DB_PASSWORD || "9368", // 비밀번호 waitForConnections: true, // Pool에 획득할 수 있는 connection이 없을 때, diff --git a/domains/admin/admin.controller.js b/domains/admin/admin.controller.js index 505fe4f..8d88435 100644 --- a/domains/admin/admin.controller.js +++ b/domains/admin/admin.controller.js @@ -2,12 +2,23 @@ import { status } from "../../config/response.status.js"; import { response } from "../../config/response.js"; -import { getProfileUser } from "./admin.service.js"; +import { createRoomsService, getProfileUser } from "./admin.service.js"; + +export const createRoomsController = async (req, res, next) => { + try { + console.log("공지방 생성하기"); + const userId = req.user.user_id; + const result = await createRoomsService(userId); + res.status(200).json(response(status.SUCCESS, result)); + } catch (error) { + next(error); + } +}; export const userProfile = async (req, res, next) => { try { console.log("특정 멤버 프로필 조회"); - const userId = req.params.user_id; + const userId = req.user.user_id; const result = await getProfileUser(userId); res.status(200).json(response(status.SUCCESS, result)); } catch (error) { diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 9e25de4..242478c 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -1,12 +1,12 @@ import { pool } from "../../config/db.config.js"; import { BaseError } from "../../config/error.js"; import { status } from "../../config/response.status.js"; -import { createRoomsByUser, getProfileByUserId } from "./admin.sql.js"; +import { createRoomsByUserId, getProfileByUserId } from "./admin.sql.js"; export const createRoomsDao = async (userId) => { try { const conn = await pool.getConnection(); - const [rows] = await conn.query(createRoomsByUser, [userId]); + const [rows] = await conn.query(createRoomsByUserId, [userId]); if (rows.length === 0) { throw new BaseError(404, "User not found"); diff --git a/domains/admin/admin.service.js b/domains/admin/admin.service.js index 0b6eb4a..c4f680d 100644 --- a/domains/admin/admin.service.js +++ b/domains/admin/admin.service.js @@ -1,4 +1,13 @@ -import { getUserProfile } from "./admin.dao.js"; +import { createRoomsDao, getUserProfile } from "./admin.dao.js"; + +export const createRoomsService = async (userId) => { + try { + console.log("유저 ID를 가져옵니다."); + return await createRoomsDao(userId); + } catch (error) { + throw error; + } +}; export const getProfileUser = async (userId) => { try { diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index 76c6f76..495db8b 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,5 +1,5 @@ // 공지방 생성 -export const createRoomsByUser = ` +export const createRoomsByUserId = ` SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty FROM room r JOIN user u ON u.id = r.user_id diff --git a/index.js b/index.js index 32e3840..20eed9b 100644 --- a/index.js +++ b/index.js @@ -8,7 +8,7 @@ import { status } from "./config/response.status.js"; import { response } from "./config/response.js"; import { userRouter } from "./routes/user.route.js"; import { roomRouter } from "./routes/room.route.js"; -import { adminRouter } from "./routes/adomin.route.js"; +import { adminRouter } from "./routes/admin.route.js"; dotenv.config(); diff --git a/routes/admin.route.js b/routes/admin.route.js index a93e9f8..e8d354d 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -1,9 +1,9 @@ import express from "express"; import expressAsyncHandler from "express-async-handler"; import { tokenAuth } from "../middleware/token.auth.js"; -import { userProfile } from "../domains/admin/admin.controller.js"; +import { createRoomsController, userProfile } from "../domains/admin/admin.controller.js"; export const adminRouter = express.Router(); -adminRouter.get("/rooms", expressAsyncHandler(createRooms)); +adminRouter.post("/rooms", expressAsyncHandler(createRoomsController)); adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); From e4023eaff2fdd6b6ca4d68bc199725ea253089b7 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 03:32:00 +0900 Subject: [PATCH 09/32] =?UTF-8?q?fix=20:=20db.config.js=20gitignore=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cb0b009..4a8089a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .env -db.config.js \ No newline at end of file +/config/db.config.js \ No newline at end of file From d10c5513809b751615fe4de3244a3d4ecc6c0d99 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 03:32:00 +0900 Subject: [PATCH 10/32] =?UTF-8?q?fix=20:=20db.config.js=20gitignore=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/db.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/db.config.js b/config/db.config.js index f9f5b45..3ed3ee5 100644 --- a/config/db.config.js +++ b/config/db.config.js @@ -7,8 +7,8 @@ export const pool = mysql.createPool({ host: process.env.DB_HOST || "localhost", // mysql의 hostname user: process.env.DB_USER || "root", // user 이름 port: process.env.DB_PORT || 3306, // 포트 번호 - database: process.env.DB_TABLE || "readmeTEST", // 데이터베이스 이름 - password: process.env.DB_PASSWORD || "pgmaster028", // 비밀번호 + database: process.env.DB_TABLE || "readmetest=", // 데이터베이스 이름 + password: process.env.DB_PASSWORD || "9368", // 비밀번호 waitForConnections: true, // Pool에 획득할 수 있는 connection이 없을 때, // true면 요청을 queue에 넣고 connection을 사용할 수 있게 되면 요청을 실행하며, false이면 즉시 오류를 내보내고 다시 요청 From a577437f46eee39a1e0a819e7c9b08c099fff922 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 16:40:34 +0900 Subject: [PATCH 11/32] =?UTF-8?q?feat=20:=20=EA=B3=B5=EC=A7=80=EB=B0=A9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20route,sql,dao=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/admin/admin.dao.js | 19 ++++++++++++++++++- domains/admin/admin.sql.js | 13 +++++++------ index.js | 2 ++ routes/admin.route.js | 1 + 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 1253e65..4cc0e09 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -1,7 +1,7 @@ import { pool } from "../../config/db.config.js"; import { BaseError } from "../../config/error.js"; import { status } from "../../config/response.status.js"; -import { getProfileByUserId } from "./admin.sql.js"; +import { createRoomsByUser, getProfileByUserId } from "./admin.sql.js"; export const getUserProfile = async (userId) => { try { @@ -20,3 +20,20 @@ export const getUserProfile = async (userId) => { throw new BaseError(status.INTERNAL_SERVER_ERROR); } }; + +export const createRoomsDao = async (userId) => { + try { + const conn = await pool.getConnection(); + const [rows] = await conn.query(createRoomsByUser, [userId]); + + if (rows.length === 0) { + throw new BaseError(404, "User not found"); + } + + conn.release(); + return rows[0]; + } catch (error) { + console.error("공지방 생성하기 에러"); + throw new BaseError(status.INTERNAL_SERVER_ERROR); + } +}; diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index bdca75f..47b61f0 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,4 +1,4 @@ -// 개설한 공지방 찾기 +// 유저 프로필 조회 export const getProfileByUserId = ` SELECT ur.nickname, ur.profile_image, ur.penalty_count FROM \`user-room\` ur @@ -6,9 +6,10 @@ export const getProfileByUserId = ` WHERE u.id = ? `; -export const createRooms = ` - SELECT r.* - FROM user u - JOIN room r ON u.id = r.admin_id - WHERE u.id = ? +// 공지방 생성 +export const createRoomsByUser = ` + SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty + FROM room r + JOIN user u ON u.id = r.user_id + WHERE u.id = ? AND r.status = 'EXIST' <- 이거 넣어주는게 맞겠지? status `; diff --git a/index.js b/index.js index cd557f9..32e3840 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ import { status } from "./config/response.status.js"; import { response } from "./config/response.js"; import { userRouter } from "./routes/user.route.js"; import { roomRouter } from "./routes/room.route.js"; +import { adminRouter } from "./routes/adomin.route.js"; dotenv.config(); @@ -38,3 +39,4 @@ app.get("/", (req, res) => { app.use("/user", userRouter); app.use("/room", roomRouter); +app.use("/admin", adminRouter); diff --git a/routes/admin.route.js b/routes/admin.route.js index 61a8799..789cdaf 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -6,3 +6,4 @@ import { userProfile } from "../domains/admin/admin.controller.js"; export const adminRouter = express.Router(); adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); +adminRouter.get("/rooms", expressAsyncHandler(createRooms)); From 8e6e61a6858574b3b8666382465893d1e7d4fc25 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 16:41:43 +0900 Subject: [PATCH 12/32] =?UTF-8?q?feat=20:=20sql=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EB=B3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/admin/admin.sql.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index 47b61f0..b44bc94 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -11,5 +11,5 @@ export const createRoomsByUser = ` SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty FROM room r JOIN user u ON u.id = r.user_id - WHERE u.id = ? AND r.status = 'EXIST' <- 이거 넣어주는게 맞겠지? status + WHERE u.id = ? AND r.status = 'EXIST' `; From bb5e37b94af972d1505a159a187c2b918296a335 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 16:55:33 +0900 Subject: [PATCH 13/32] Wls --- domains/admin/admin.dao.js | 14 +++++++------- domains/admin/admin.sql.js | 16 ++++++++-------- routes/admin.route.js | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 4cc0e09..9e25de4 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -3,37 +3,37 @@ import { BaseError } from "../../config/error.js"; import { status } from "../../config/response.status.js"; import { createRoomsByUser, getProfileByUserId } from "./admin.sql.js"; -export const getUserProfile = async (userId) => { +export const createRoomsDao = async (userId) => { try { const conn = await pool.getConnection(); + const [rows] = await conn.query(createRoomsByUser, [userId]); - const [rows] = await conn.query(getProfileByUserId, userId); if (rows.length === 0) { - conn.release(); throw new BaseError(404, "User not found"); } conn.release(); return rows[0]; } catch (error) { - console.log("User 프로필 조회 에러"); + console.error("공지방 생성하기 에러"); throw new BaseError(status.INTERNAL_SERVER_ERROR); } }; -export const createRoomsDao = async (userId) => { +export const getUserProfile = async (userId) => { try { const conn = await pool.getConnection(); - const [rows] = await conn.query(createRoomsByUser, [userId]); + const [rows] = await conn.query(getProfileByUserId, userId); if (rows.length === 0) { + conn.release(); throw new BaseError(404, "User not found"); } conn.release(); return rows[0]; } catch (error) { - console.error("공지방 생성하기 에러"); + console.log("User 프로필 조회 에러"); throw new BaseError(status.INTERNAL_SERVER_ERROR); } }; diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index b44bc94..76c6f76 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,11 +1,3 @@ -// 유저 프로필 조회 -export const getProfileByUserId = ` - SELECT ur.nickname, ur.profile_image, ur.penalty_count - FROM \`user-room\` ur - JOIN user u ON u.id = ur.user_id - WHERE u.id = ? -`; - // 공지방 생성 export const createRoomsByUser = ` SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty @@ -13,3 +5,11 @@ export const createRoomsByUser = ` JOIN user u ON u.id = r.user_id WHERE u.id = ? AND r.status = 'EXIST' `; + +// 유저 프로필 조회 +export const getProfileByUserId = ` + SELECT ur.nickname, ur.profile_image, ur.penalty_count + FROM \`user-room\` ur + JOIN user u ON u.id = ur.user_id + WHERE u.id = ? +`; diff --git a/routes/admin.route.js b/routes/admin.route.js index 789cdaf..a93e9f8 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -5,5 +5,5 @@ import { userProfile } from "../domains/admin/admin.controller.js"; export const adminRouter = express.Router(); -adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); adminRouter.get("/rooms", expressAsyncHandler(createRooms)); +adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); From dd42c421511a228c58f01d2ad778779ef0446af9 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Fri, 26 Jul 2024 21:51:21 +0900 Subject: [PATCH 14/32] Wls --- config/db.config.js | 2 +- domains/admin/admin.controller.js | 15 +++++++++++++-- domains/admin/admin.dao.js | 4 ++-- domains/admin/admin.service.js | 11 ++++++++++- domains/admin/admin.sql.js | 2 +- index.js | 2 +- routes/admin.route.js | 4 ++-- 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/config/db.config.js b/config/db.config.js index 3ed3ee5..36a81bb 100644 --- a/config/db.config.js +++ b/config/db.config.js @@ -7,7 +7,7 @@ export const pool = mysql.createPool({ host: process.env.DB_HOST || "localhost", // mysql의 hostname user: process.env.DB_USER || "root", // user 이름 port: process.env.DB_PORT || 3306, // 포트 번호 - database: process.env.DB_TABLE || "readmetest=", // 데이터베이스 이름 + database: process.env.DB_TABLE || "readmetest", // 데이터베이스 이름 password: process.env.DB_PASSWORD || "9368", // 비밀번호 waitForConnections: true, // Pool에 획득할 수 있는 connection이 없을 때, diff --git a/domains/admin/admin.controller.js b/domains/admin/admin.controller.js index 505fe4f..8d88435 100644 --- a/domains/admin/admin.controller.js +++ b/domains/admin/admin.controller.js @@ -2,12 +2,23 @@ import { status } from "../../config/response.status.js"; import { response } from "../../config/response.js"; -import { getProfileUser } from "./admin.service.js"; +import { createRoomsService, getProfileUser } from "./admin.service.js"; + +export const createRoomsController = async (req, res, next) => { + try { + console.log("공지방 생성하기"); + const userId = req.user.user_id; + const result = await createRoomsService(userId); + res.status(200).json(response(status.SUCCESS, result)); + } catch (error) { + next(error); + } +}; export const userProfile = async (req, res, next) => { try { console.log("특정 멤버 프로필 조회"); - const userId = req.params.user_id; + const userId = req.user.user_id; const result = await getProfileUser(userId); res.status(200).json(response(status.SUCCESS, result)); } catch (error) { diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 9e25de4..242478c 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -1,12 +1,12 @@ import { pool } from "../../config/db.config.js"; import { BaseError } from "../../config/error.js"; import { status } from "../../config/response.status.js"; -import { createRoomsByUser, getProfileByUserId } from "./admin.sql.js"; +import { createRoomsByUserId, getProfileByUserId } from "./admin.sql.js"; export const createRoomsDao = async (userId) => { try { const conn = await pool.getConnection(); - const [rows] = await conn.query(createRoomsByUser, [userId]); + const [rows] = await conn.query(createRoomsByUserId, [userId]); if (rows.length === 0) { throw new BaseError(404, "User not found"); diff --git a/domains/admin/admin.service.js b/domains/admin/admin.service.js index 0b6eb4a..c4f680d 100644 --- a/domains/admin/admin.service.js +++ b/domains/admin/admin.service.js @@ -1,4 +1,13 @@ -import { getUserProfile } from "./admin.dao.js"; +import { createRoomsDao, getUserProfile } from "./admin.dao.js"; + +export const createRoomsService = async (userId) => { + try { + console.log("유저 ID를 가져옵니다."); + return await createRoomsDao(userId); + } catch (error) { + throw error; + } +}; export const getProfileUser = async (userId) => { try { diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index 76c6f76..495db8b 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,5 +1,5 @@ // 공지방 생성 -export const createRoomsByUser = ` +export const createRoomsByUserId = ` SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty FROM room r JOIN user u ON u.id = r.user_id diff --git a/index.js b/index.js index 32e3840..20eed9b 100644 --- a/index.js +++ b/index.js @@ -8,7 +8,7 @@ import { status } from "./config/response.status.js"; import { response } from "./config/response.js"; import { userRouter } from "./routes/user.route.js"; import { roomRouter } from "./routes/room.route.js"; -import { adminRouter } from "./routes/adomin.route.js"; +import { adminRouter } from "./routes/admin.route.js"; dotenv.config(); diff --git a/routes/admin.route.js b/routes/admin.route.js index a93e9f8..e8d354d 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -1,9 +1,9 @@ import express from "express"; import expressAsyncHandler from "express-async-handler"; import { tokenAuth } from "../middleware/token.auth.js"; -import { userProfile } from "../domains/admin/admin.controller.js"; +import { createRoomsController, userProfile } from "../domains/admin/admin.controller.js"; export const adminRouter = express.Router(); -adminRouter.get("/rooms", expressAsyncHandler(createRooms)); +adminRouter.post("/rooms", expressAsyncHandler(createRoomsController)); adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); From 96ac1afa0d459e181c16d76f37714ee9e750e2e5 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Sat, 27 Jul 2024 01:51:08 +0900 Subject: [PATCH 15/32] =?UTF-8?q?feat=20:=20API=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/admin/admin.controller.js | 50 +++++++++++++++++++++++++++++-- domains/admin/admin.dao.js | 24 ++++++++------- domains/admin/admin.service.js | 7 +++-- domains/admin/admin.sql.js | 10 +++---- 4 files changed, 69 insertions(+), 22 deletions(-) diff --git a/domains/admin/admin.controller.js b/domains/admin/admin.controller.js index 8d88435..3e2dbd1 100644 --- a/domains/admin/admin.controller.js +++ b/domains/admin/admin.controller.js @@ -6,9 +6,53 @@ import { createRoomsService, getProfileUser } from "./admin.service.js"; export const createRoomsController = async (req, res, next) => { try { - console.log("공지방 생성하기"); - const userId = req.user.user_id; - const result = await createRoomsService(userId); + // 요청 바디에서 데이터 추출 + const { + admin_id, + admin_nickname, + room_name, + room_password, + room_image, + room_invite_url, + max_penalty, + } = req.body; + + // 필수 필드 확인 + if ( + !admin_id || + !admin_nickname || + !room_name || + !room_password || + !room_image || + !room_invite_url || + !max_penalty + ) { + return res.status(400).json({ error: "모든 필수 필드를 입력하세요." }); + } + + // 데이터베이스 쿼리 실행 + const result = await createRoomsService({ + admin_id, + admin_nickname, + room_name, + room_password, + room_image, + room_invite_url, + max_penalty, + }); + + // 응답 객체 구성 + const response = { + // id: result.insertId, + admin_id, + admin_nickname, + room_name, + room_password, + room_image, + room_invite_url, + max_penalty, + }; + res.status(200).json(response(status.SUCCESS, result)); } catch (error) { next(error); diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 242478c..4d6d49c 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -1,19 +1,23 @@ import { pool } from "../../config/db.config.js"; import { BaseError } from "../../config/error.js"; import { status } from "../../config/response.status.js"; -import { createRoomsByUserId, getProfileByUserId } from "./admin.sql.js"; +import { createRoomsSQL, getProfileByUserId } from "./admin.sql.js"; -export const createRoomsDao = async (userId) => { +export const createRoomsDao = async (data) => { try { const conn = await pool.getConnection(); - const [rows] = await conn.query(createRoomsByUserId, [userId]); - - if (rows.length === 0) { - throw new BaseError(404, "User not found"); - } - - conn.release(); - return rows[0]; + console.log(data); + const result = await conn.query(createRoomsSQL, [ + data.admin_id, + data.admin_nickname, + data.room_name, + data.room_password, + data.room_image, + data.room_invite_url, + data.max_penalty, + ]); + console.log("2"); + return result; } catch (error) { console.error("공지방 생성하기 에러"); throw new BaseError(status.INTERNAL_SERVER_ERROR); diff --git a/domains/admin/admin.service.js b/domains/admin/admin.service.js index c4f680d..bc91acf 100644 --- a/domains/admin/admin.service.js +++ b/domains/admin/admin.service.js @@ -1,10 +1,11 @@ import { createRoomsDao, getUserProfile } from "./admin.dao.js"; -export const createRoomsService = async (userId) => { +export const createRoomsService = async (data) => { try { - console.log("유저 ID를 가져옵니다."); - return await createRoomsDao(userId); + console.log("방 생성 데이터를 가져옵니다."); + return await createRoomsDao(data); } catch (error) { + console.error("방 생성하기 에러:", error); throw error; } }; diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index 495db8b..15ce487 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,14 +1,12 @@ // 공지방 생성 -export const createRoomsByUserId = ` - SELECT r.admin_nickname, r.room_name, r.room_password, r.max_penalty - FROM room r - JOIN user u ON u.id = r.user_id - WHERE u.id = ? AND r.status = 'EXIST' +export const createRoomsSQL = ` + INSERT INTO room (admin_id, admin_nickname, room_name, room_password, room_image, max_penalty, room_invite_url) + VALUES (?, ?, ?, ?, ?, ?, ?) `; // 유저 프로필 조회 export const getProfileByUserId = ` - SELECT ur.nickname, ur.profile_image, ur.penalty_count + SELECT ur.nickname , ur.profile_image, ur.penalty_count FROM \`user-room\` ur JOIN user u ON u.id = ur.user_id WHERE u.id = ? From 92faa11ff536c80a7ce59970031425a7c09bd4e9 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Sat, 27 Jul 2024 02:51:19 +0900 Subject: [PATCH 16/32] =?UTF-8?q?feat=20:=20=EA=B3=B5=EC=A7=80=EB=B0=A9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/admin/admin.controller.js | 13 ------------- domains/admin/admin.dao.js | 2 -- domains/admin/admin.service.js | 2 +- domains/admin/admin.sql.js | 2 +- routes/admin.route.js | 2 +- 5 files changed, 3 insertions(+), 18 deletions(-) diff --git a/domains/admin/admin.controller.js b/domains/admin/admin.controller.js index 3e2dbd1..d1a3c68 100644 --- a/domains/admin/admin.controller.js +++ b/domains/admin/admin.controller.js @@ -1,5 +1,4 @@ // admin.controller.js - import { status } from "../../config/response.status.js"; import { response } from "../../config/response.js"; import { createRoomsService, getProfileUser } from "./admin.service.js"; @@ -41,18 +40,6 @@ export const createRoomsController = async (req, res, next) => { max_penalty, }); - // 응답 객체 구성 - const response = { - // id: result.insertId, - admin_id, - admin_nickname, - room_name, - room_password, - room_image, - room_invite_url, - max_penalty, - }; - res.status(200).json(response(status.SUCCESS, result)); } catch (error) { next(error); diff --git a/domains/admin/admin.dao.js b/domains/admin/admin.dao.js index 4d6d49c..c30adcd 100644 --- a/domains/admin/admin.dao.js +++ b/domains/admin/admin.dao.js @@ -6,7 +6,6 @@ import { createRoomsSQL, getProfileByUserId } from "./admin.sql.js"; export const createRoomsDao = async (data) => { try { const conn = await pool.getConnection(); - console.log(data); const result = await conn.query(createRoomsSQL, [ data.admin_id, data.admin_nickname, @@ -16,7 +15,6 @@ export const createRoomsDao = async (data) => { data.room_invite_url, data.max_penalty, ]); - console.log("2"); return result; } catch (error) { console.error("공지방 생성하기 에러"); diff --git a/domains/admin/admin.service.js b/domains/admin/admin.service.js index bc91acf..3cfc8ea 100644 --- a/domains/admin/admin.service.js +++ b/domains/admin/admin.service.js @@ -2,7 +2,7 @@ import { createRoomsDao, getUserProfile } from "./admin.dao.js"; export const createRoomsService = async (data) => { try { - console.log("방 생성 데이터를 가져옵니다."); + console.log("방 생성에 관한 데이터를 가져옵니다."); return await createRoomsDao(data); } catch (error) { console.error("방 생성하기 에러:", error); diff --git a/domains/admin/admin.sql.js b/domains/admin/admin.sql.js index 15ce487..53dec60 100644 --- a/domains/admin/admin.sql.js +++ b/domains/admin/admin.sql.js @@ -1,6 +1,6 @@ // 공지방 생성 export const createRoomsSQL = ` - INSERT INTO room (admin_id, admin_nickname, room_name, room_password, room_image, max_penalty, room_invite_url) + INSERT INTO room (admin_id, admin_nickname, room_name, room_password, room_image, room_invite_url, max_penalty) VALUES (?, ?, ?, ?, ?, ?, ?) `; diff --git a/routes/admin.route.js b/routes/admin.route.js index e8d354d..b7c3152 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -5,5 +5,5 @@ import { createRoomsController, userProfile } from "../domains/admin/admin.contr export const adminRouter = express.Router(); -adminRouter.post("/rooms", expressAsyncHandler(createRoomsController)); +adminRouter.post("/rooms", tokenAuth, expressAsyncHandler(createRoomsController)); adminRouter.get("/profile/:user_id", tokenAuth, expressAsyncHandler(userProfile)); From edf6783e83651cff73a8a6ebbbf055029aaa179b Mon Sep 17 00:00:00 2001 From: parkmineum Date: Sat, 27 Jul 2024 03:18:14 +0900 Subject: [PATCH 17/32] =?UTF-8?q?fix=20:=20=EC=BD=94=EB=A9=98=ED=8A=B8=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=EB=B0=8F=20gitignore=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EB=B3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- domains/admin/admin.controller.js | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 4a8089a..396f6c6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .env -/config/db.config.js \ No newline at end of file +db.config.js \ No newline at end of file diff --git a/domains/admin/admin.controller.js b/domains/admin/admin.controller.js index d1a3c68..60848a7 100644 --- a/domains/admin/admin.controller.js +++ b/domains/admin/admin.controller.js @@ -29,18 +29,7 @@ export const createRoomsController = async (req, res, next) => { return res.status(400).json({ error: "모든 필수 필드를 입력하세요." }); } - // 데이터베이스 쿼리 실행 - const result = await createRoomsService({ - admin_id, - admin_nickname, - room_name, - room_password, - room_image, - room_invite_url, - max_penalty, - }); - - res.status(200).json(response(status.SUCCESS, result)); + res.status(200).json(response(status.SUCCESS, req.body)); } catch (error) { next(error); } From 64838f72e070c7bdd8d51bb1847300e638ad3c08 Mon Sep 17 00:00:00 2001 From: parkmineum Date: Sat, 27 Jul 2024 03:26:21 +0900 Subject: [PATCH 18/32] =?UTF-8?q?fix:=20db.config.js=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- config/db.config.js | 17 ----------------- 2 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 config/db.config.js diff --git a/.gitignore b/.gitignore index 396f6c6..cb0b009 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules .env -db.config.js \ No newline at end of file +db.config.js \ No newline at end of file diff --git a/config/db.config.js b/config/db.config.js deleted file mode 100644 index 36a81bb..0000000 --- a/config/db.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import mysql from "mysql2/promise"; -import dotenv from "dotenv"; - -dotenv.config(); - -export const pool = mysql.createPool({ - host: process.env.DB_HOST || "localhost", // mysql의 hostname - user: process.env.DB_USER || "root", // user 이름 - port: process.env.DB_PORT || 3306, // 포트 번호 - database: process.env.DB_TABLE || "readmetest", // 데이터베이스 이름 - password: process.env.DB_PASSWORD || "9368", // 비밀번호 - waitForConnections: true, - // Pool에 획득할 수 있는 connection이 없을 때, - // true면 요청을 queue에 넣고 connection을 사용할 수 있게 되면 요청을 실행하며, false이면 즉시 오류를 내보내고 다시 요청 - connectionLimit: 10, // 몇 개의 커넥션을 가지게끔 할 것인지 - queueLimit: 0, // getConnection에서 오류가 발생하기 전에 Pool에 대기할 요청의 개수 한도 -}); From f9405644c7cf33f277bc62ce23b2fb62457ef8ad Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Thu, 25 Jul 2024 21:36:51 +0900 Subject: [PATCH 19/32] =?UTF-8?q?chore:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85,=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20swagger=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- swagger/user.swagger.yaml | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/swagger/user.swagger.yaml b/swagger/user.swagger.yaml index bcf14d5..5c8638f 100644 --- a/swagger/user.swagger.yaml +++ b/swagger/user.swagger.yaml @@ -83,3 +83,113 @@ paths: message: type: string example: 서버 에러, 관리자에게 문의 바랍니다. + + /user/signup: + post: + tags: + - user + summary: 회원가입 + description: 회원가입 + operationId: signup + consumes: + - application/json + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: 이름 + nickname: + type: string + description: 닉네임 + email: + type: string + description: 이메일 + password: + type: string + description: 비밀번호 + responses: + "200": + description: 회원가입 성공! + content: + application/json: + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 200 + message: + type: string + example: "회원가입 성공" + result: + type: object + properties: + userId: + type: number + description: 유저 ID + accessToken: + type: string + description: JWT 토큰 + + /user/login: + post: + tags: + - user + summary: 로그인 + description: 로그인 + operationId: login + consumes: + - application/json + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + email: + type: string + description: 이메일 + password: + type: string + description: 비밀번호 + responses: + "200": + description: 회원가입 성공! + content: + application/json: + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 200 + message: + type: string + example: "회원가입 성공" + result: + type: object + properties: + userId: + type: number + description: 유저 ID + accessToken: + type: string + description: JWT 토큰 From 536e26ac67b990124c3cf570e0ec3df36d300456 Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 14:32:55 +0900 Subject: [PATCH 20/32] =?UTF-8?q?feat:=20SQL=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/user/user.sql.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/domains/user/user.sql.js b/domains/user/user.sql.js index c1c228e..e6a1f16 100644 --- a/domains/user/user.sql.js +++ b/domains/user/user.sql.js @@ -28,3 +28,11 @@ export const getCreateRoom = ` JOIN room r ON u.id = r.admin_id WHERE u.id = ? `; + +// 입장한 공지방 찾기 +export const getJoinRoom = ` + SELECT ur.* + FROM \`user-room\` ur + JOIN user u ON u.id = ur.user_id + WHERE u.id = ? +`; From a7c4eb279183cb921314172fef8952ad58d060d0 Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 14:34:15 +0900 Subject: [PATCH 21/32] =?UTF-8?q?feat:=20DAO=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/user/user.dao.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/domains/user/user.dao.js b/domains/user/user.dao.js index 1aa66bf..bbf0bd5 100644 --- a/domains/user/user.dao.js +++ b/domains/user/user.dao.js @@ -8,6 +8,7 @@ import { getUserByEmail, getFixedPost, getCreateRoom, + getJoinRoom, } from "./user.sql.js"; export const insertUser = async (data) => { @@ -100,3 +101,21 @@ export const findCreateRoomByUserId = async (userId) => { throw new BaseError(status.INTERNAL_SERVER_ERROR); } }; + +export const findJoinRoomByUserId = async (userId) => { + try { + const conn = await pool.getConnection(); + const [rooms] = await conn.query(getJoinRoom, [userId]); + + if (rooms.length == 0) { + conn.release(); + return null; + } + + conn.release(); + return rooms; + } catch (error) { + console.log("내가 입장한 공지방 찾기 에러", error); + throw new BaseError(status.INTERNAL_SERVER_ERROR); + } +}; From fbf1a048506812b6cef33cbc481c9024b56876be Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 14:35:06 +0900 Subject: [PATCH 22/32] =?UTF-8?q?feat:=20Service=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/user/user.service.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/domains/user/user.service.js b/domains/user/user.service.js index a36d8c4..8585e36 100644 --- a/domains/user/user.service.js +++ b/domains/user/user.service.js @@ -4,6 +4,7 @@ import { findUserByEmail, findFixedPostByUserId, findCreateRoomByUserId, + findJoinRoomByUserId, } from "./user.dao.js"; import { passwordHashing } from "../../utils/passwordHash.js"; import { generateJWTToken } from "../../utils/generateToken.js"; @@ -86,3 +87,19 @@ export const getMyCreateRoom = async (userId) => { return createRoomsData; }; + +export const getMyJoinRoom = async (userId) => { + const userData = await findUserById(userId); + + if (!userData) { + throw new Error("사용자를 찾을 수 없습니다."); + } + + const joinRoomsData = await findJoinRoomByUserId(userData.userId); + + if (!joinRoomsData) { + return null; + } + + return joinRoomsData; +}; From 34b18b7afff833ea09d9e94379521598b6333195 Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 14:36:34 +0900 Subject: [PATCH 23/32] =?UTF-8?q?feat:=20Controller=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/user/user.controller.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/domains/user/user.controller.js b/domains/user/user.controller.js index c5398d5..8e3272e 100644 --- a/domains/user/user.controller.js +++ b/domains/user/user.controller.js @@ -8,6 +8,7 @@ import { signupUser, getMyFixedPost, getMyCreateRoom, + getMyJoinRoom, } from "./user.service.js"; export const userSignUp = async (req, res, next) => { @@ -119,3 +120,16 @@ export const getUserCreateRoom = async (req, res, next) => { next(error); } }; + +export const getUserJoinRoom = async (req, res, next) => { + try { + console.log("내가 입장한 공지방 조회"); + + const userId = req.user.userId; + + const result = await getMyJoinRoom(userId); + res.status(200).json(response(status.SUCCESS, result)); + } catch (error) { + next(error); + } +}; From 71b1eddb660bf1b009f22732f24bef0ea431e61c Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 14:37:06 +0900 Subject: [PATCH 24/32] =?UTF-8?q?feat:=20Route=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/user.route.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/routes/user.route.js b/routes/user.route.js index e7ecd66..aac2b9d 100644 --- a/routes/user.route.js +++ b/routes/user.route.js @@ -10,6 +10,7 @@ import { userSignUp, uploadImage, getUserCreateRoom, + getUserJoinRoom, } from "../domains/user/user.controller.js"; import { tokenAuth } from "../middleware/token.auth.js"; import { imageUploader } from "../middleware/image.uploader.js"; @@ -36,3 +37,5 @@ userRouter.post( ); userRouter.get("/create-room", tokenAuth, expressAsyncHandler(getUserCreateRoom)); + +userRouter.get("/join-room", tokenAuth, expressAsyncHandler(getUserJoinRoom)); From 0da994174d2b260d1a7463edef2e4ad3b0d4d5c6 Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 14:50:29 +0900 Subject: [PATCH 25/32] =?UTF-8?q?feat:=20Swagger=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- swagger/user.swagger.yaml | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/swagger/user.swagger.yaml b/swagger/user.swagger.yaml index bcf14d5..c4fe041 100644 --- a/swagger/user.swagger.yaml +++ b/swagger/user.swagger.yaml @@ -83,3 +83,50 @@ paths: message: type: string example: 서버 에러, 관리자에게 문의 바랍니다. + + /user/join-room: + get: + tags: + - user + summary: 내가 입장한 공지방 조회 + description: 내가 입장한 공지방 조회 + operationId: join-room + consumes: + - application/json + security: + - bearerAuth: [] + responses: + "200": + description: 내가 입장한 공지방 조회 성공! + content: + application/json: + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 200 + message: + type: string + example: "회원가입 성공" + result: + type: object + properties: + roomId: + type: number + description: 공지방 ID + roomImage: + type: string + description: 공지방 사진 + roomName: + type: string + description: 공지방 이름 + nickname: + type: string + description: 본인 닉네임 From 42dca4da0a03ccdb4d9ce2a5f01bbf1c7ee95116 Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 14:53:30 +0900 Subject: [PATCH 26/32] =?UTF-8?q?feat:=20return=20=EA=B0=92=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/user/user.service.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/domains/user/user.service.js b/domains/user/user.service.js index 8585e36..bca09c8 100644 --- a/domains/user/user.service.js +++ b/domains/user/user.service.js @@ -40,7 +40,11 @@ export const loginUser = async (email, password) => { if (hashedPassword === userData.password) { const tokenInfo = generateJWTToken(userData.id); - return { userId: userData.id, accessToken: tokenInfo }; + + return { + userId: userData.id, + accessToken: tokenInfo, + }; } else { throw new Error("비밀번호가 일치하지 않습니다."); } @@ -69,7 +73,12 @@ export const getMyFixedPost = async (userId) => { return null; } - return fixedPostData; + return { + post_id: fixedPostData.id, + title: fixedPostData.title, + start_date: fixedPostData.start_date, + end_date: fixedPostData.end_date, + }; }; export const getMyCreateRoom = async (userId) => { @@ -101,5 +110,5 @@ export const getMyJoinRoom = async (userId) => { return null; } - return joinRoomsData; + return {}; }; From 9a9c8eb968c8fa297cf4e7aef5e97f987b34b7a1 Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 15:01:18 +0900 Subject: [PATCH 27/32] =?UTF-8?q?feat:=20=EA=B3=B5=EC=A7=80=EB=B0=A9?= =?UTF-8?q?=EC=9D=98=20=ED=94=84=EB=A1=9C=ED=95=84=EC=82=AC=EC=A7=84?= =?UTF-8?q?=EA=B3=BC=20=EC=9D=B4=EB=A6=84=EC=9D=84=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EA=B8=B0=20=EC=9C=84=ED=95=9C=20SQL=EB=AC=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/user/user.service.js | 6 +++--- domains/user/user.sql.js | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/domains/user/user.service.js b/domains/user/user.service.js index bca09c8..2b517e6 100644 --- a/domains/user/user.service.js +++ b/domains/user/user.service.js @@ -74,10 +74,10 @@ export const getMyFixedPost = async (userId) => { } return { - post_id: fixedPostData.id, + postId: fixedPostData.id, title: fixedPostData.title, - start_date: fixedPostData.start_date, - end_date: fixedPostData.end_date, + startDate: fixedPostData.start_date, + endDate: fixedPostData.end_date, }; }; diff --git a/domains/user/user.sql.js b/domains/user/user.sql.js index e6a1f16..e7fd44c 100644 --- a/domains/user/user.sql.js +++ b/domains/user/user.sql.js @@ -31,8 +31,9 @@ export const getCreateRoom = ` // 입장한 공지방 찾기 export const getJoinRoom = ` - SELECT ur.* + SELECT ur.nickname, r.room_name, r.room_image FROM \`user-room\` ur JOIN user u ON u.id = ur.user_id + JOIN room r ON r.id = ur.room_id WHERE u.id = ? `; From cd98fc511ac4588a3a7bd5d053619b153a8dd9fb Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 15:02:58 +0900 Subject: [PATCH 28/32] =?UTF-8?q?feat:=20return=20=EA=B0=92=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- domains/user/user.service.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/domains/user/user.service.js b/domains/user/user.service.js index 2b517e6..43f3dab 100644 --- a/domains/user/user.service.js +++ b/domains/user/user.service.js @@ -110,5 +110,10 @@ export const getMyJoinRoom = async (userId) => { return null; } - return {}; + return { + roomId: joinRoomsData.room_id, + roomName: joinRoomsData.room_name, + roomImage: joinRoomsData.room_image, + nickname: joinRoomsData.nickname, + }; }; From 855d3eade2a41c12ac0c3d60552bb8b2076611af Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Thu, 25 Jul 2024 21:36:51 +0900 Subject: [PATCH 29/32] =?UTF-8?q?chore:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85,=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20swagger=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- swagger/user.swagger.yaml | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/swagger/user.swagger.yaml b/swagger/user.swagger.yaml index c4fe041..35ef638 100644 --- a/swagger/user.swagger.yaml +++ b/swagger/user.swagger.yaml @@ -84,6 +84,116 @@ paths: type: string example: 서버 에러, 관리자에게 문의 바랍니다. + /user/signup: + post: + tags: + - user + summary: 회원가입 + description: 회원가입 + operationId: signup + consumes: + - application/json + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: 이름 + nickname: + type: string + description: 닉네임 + email: + type: string + description: 이메일 + password: + type: string + description: 비밀번호 + responses: + "200": + description: 회원가입 성공! + content: + application/json: + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 200 + message: + type: string + example: "회원가입 성공" + result: + type: object + properties: + userId: + type: number + description: 유저 ID + accessToken: + type: string + description: JWT 토큰 + + /user/login: + post: + tags: + - user + summary: 로그인 + description: 로그인 + operationId: login + consumes: + - application/json + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + email: + type: string + description: 이메일 + password: + type: string + description: 비밀번호 + responses: + "200": + description: 회원가입 성공! + content: + application/json: + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 200 + message: + type: string + example: "회원가입 성공" + result: + type: object + properties: + userId: + type: number + description: 유저 ID + accessToken: + type: string + description: JWT 토큰 + /user/join-room: get: tags: From d8ffc17876209fef05c6edb70497b3e14500341c Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 21:14:43 +0900 Subject: [PATCH 30/32] =?UTF-8?q?feat:=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- swagger/user.swagger.yaml | 61 +++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/swagger/user.swagger.yaml b/swagger/user.swagger.yaml index 35ef638..c74e41e 100644 --- a/swagger/user.swagger.yaml +++ b/swagger/user.swagger.yaml @@ -141,7 +141,6 @@ paths: accessToken: type: string description: JWT 토큰 - /user/login: post: tags: @@ -164,35 +163,35 @@ paths: password: type: string description: 비밀번호 - responses: - "200": - description: 회원가입 성공! - content: - application/json: - schema: - type: object - properties: - status: - type: integer - example: 200 - isSuccess: - type: boolean - example: true - code: - type: integer - example: 200 - message: - type: string - example: "회원가입 성공" - result: - type: object - properties: - userId: - type: number - description: 유저 ID - accessToken: - type: string - description: JWT 토큰 + responses: + "200": + description: 회원가입 성공! + content: + application/json: + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 200 + message: + type: string + example: "회원가입 성공" + result: + type: object + properties: + userId: + type: number + description: 유저 ID + accessToken: + type: string + description: JWT 토큰 /user/join-room: get: @@ -230,7 +229,7 @@ paths: properties: roomId: type: number - description: 공지방 ID + description: 공지방 ID roomImage: type: string description: 공지방 사진 From c194c27acc9aff49e15e6fefa6d21dff8daeffb8 Mon Sep 17 00:00:00 2001 From: JJHyeok13 Date: Sat, 27 Jul 2024 21:15:52 +0900 Subject: [PATCH 31/32] =?UTF-8?q?feat:=20swagger=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- swagger/swagger.config.js | 12 ++++---- swagger/user.swagger.yaml | 61 ++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/swagger/swagger.config.js b/swagger/swagger.config.js index 66a3419..8fc236c 100644 --- a/swagger/swagger.config.js +++ b/swagger/swagger.config.js @@ -4,11 +4,6 @@ import { cwd } from "process"; import dotenv from "dotenv"; dotenv.config(); -process.env.NODE_ENV = - process.env.NODE_ENV && process.env.NODE_ENV.trim().toLowerCase() === "production" - ? "production" - : "development"; -const isDevMode = process.env.NODE_ENV === "development"; const userSwagger = YAML.load(path.join(cwd(), "/swagger/user.swagger.yaml")); const roomSwagger = YAML.load(path.join(cwd(), "/swagger/room.swagger.yaml")); @@ -22,7 +17,12 @@ export const swaggerSpec = { }, servers: [ { - url: isDevMode ? process.env.DEVELOPMENT_SERVER_URL : process.env.PRODUCTION_SERVER_URL, + url: process.env.PRODUCTION_SERVER_URL, + description: "prod", + }, + { + url: process.env.DEVELOPMENT_SERVER_URL, + description: "dev", }, ], paths: { diff --git a/swagger/user.swagger.yaml b/swagger/user.swagger.yaml index c74e41e..8175bc4 100644 --- a/swagger/user.swagger.yaml +++ b/swagger/user.swagger.yaml @@ -141,6 +141,7 @@ paths: accessToken: type: string description: JWT 토큰 + /user/login: post: tags: @@ -163,35 +164,35 @@ paths: password: type: string description: 비밀번호 - responses: - "200": - description: 회원가입 성공! - content: - application/json: - schema: - type: object - properties: - status: - type: integer - example: 200 - isSuccess: - type: boolean - example: true - code: - type: integer - example: 200 - message: - type: string - example: "회원가입 성공" - result: - type: object - properties: - userId: - type: number - description: 유저 ID - accessToken: - type: string - description: JWT 토큰 + responses: + "200": + description: 로그인 성공! + content: + application/json: + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 200 + message: + type: string + example: "로그인 성공" + result: + type: object + properties: + userId: + type: number + description: 유저 ID + accessToken: + type: string + description: JWT 토큰 /user/join-room: get: @@ -223,7 +224,7 @@ paths: example: 200 message: type: string - example: "회원가입 성공" + example: "내가 입장한 공지방 조회 성공" result: type: object properties: From ff38e99c824d2738c51c1c63fb1fcc05e9d043e0 Mon Sep 17 00:00:00 2001 From: gs0428 Date: Sat, 27 Jul 2024 21:42:48 +0900 Subject: [PATCH 32/32] =?UTF-8?q?fix:=20gitignore=EC=97=90=EC=84=9C=20db.c?= =?UTF-8?q?onfig.js=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +-- config/db.config.js | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 config/db.config.js diff --git a/.gitignore b/.gitignore index cb0b009..1dcef2d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ node_modules -.env -db.config.js \ No newline at end of file +.env \ No newline at end of file diff --git a/config/db.config.js b/config/db.config.js new file mode 100644 index 0000000..3cb1992 --- /dev/null +++ b/config/db.config.js @@ -0,0 +1,17 @@ +import mysql from "mysql2/promise"; +import dotenv from "dotenv"; + +dotenv.config(); + +export const pool = mysql.createPool({ + host: process.env.DB_HOST || "localhost", // mysql의 hostname + user: process.env.DB_USER || "root", // user 이름 + port: process.env.DB_PORT || 3306, // 포트 번호 + database: process.env.DB_TABLE || process.env.LOCAL_DB_TABLE, // 데이터베이스 이름 + password: process.env.DB_PASSWORD || process.env.LOCAL_DB_PASSWORD, // 비밀번호 + waitForConnections: true, + // Pool에 획득할 수 있는 connection이 없을 때, + // true면 요청을 queue에 넣고 connection을 사용할 수 있게 되면 요청을 실행하며, false이면 즉시 오류를 내보내고 다시 요청 + connectionLimit: 10, // 몇 개의 커넥션을 가지게끔 할 것인지 + queueLimit: 0, // getConnection에서 오류가 발생하기 전에 Pool에 대기할 요청의 개수 한도 +});