개인정보-컴플라이언스-웹애플리케이션(5) - (시스템) 백엔드 코드
2025. 1. 24. 19:07ㆍ프로젝트
728x90
반응형
다음은 시스템 백엔드 코드를 먼저 보여드리겠습니다.
import pool from "../db/connection.js";
// 시스템 등록
const postsystem = async (req, res) => {
const {
name,
min_subjects,
max_subjects,
purpose,
is_private,
is_unique,
is_resident,
reason,
} = req.body;
const user_id = req.session.user?.id;
if (!user_id) {
console.error("❌ [AUTH] 사용자 세션이 없습니다.");
return res.status(401).json({ message: "로그인이 필요합니다." });
}
try {
console.log("📩 [POST 요청] 데이터:", req.body);
console.log("🧑💻 [POST 요청] 사용자 ID:", user_id);
// 시스템 개수 제한 확인
const [systemCount] = await pool.query(
"SELECT COUNT(*) AS count FROM systems WHERE user_id = ?",
[user_id]
);
console.log("📊 [DB] 현재 시스템 개수:", systemCount[0].count);
if (systemCount[0].count >= 10) {
console.warn("⚠️ [LIMIT] 최대 시스템 개수 초과");
return res
.status(400)
.json({ message: "시스템은 최대 10개까지 등록 가능합니다." });
}
// 시스템 등록
const [result] = await pool.query(
`INSERT INTO systems (user_id, name, min_subjects, max_subjects, purpose, is_private, is_unique, is_resident, reason, assessment_status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, '시작전')`,
[
user_id,
name,
min_subjects,
max_subjects,
purpose,
is_private === "포함",
is_unique === "포함",
is_resident === "포함",
reason,
]
);
console.log("✅ [DB] 시스템 등록 성공:", result);
res.status(201).json({
message: "시스템 등록이 완료되었습니다.",
systemId: result.insertId,
});
} catch (err) {
console.error("❌ [DB] 시스템 등록 실패:", err);
res
.status(500)
.json({ message: "시스템 등록 중 오류가 발생했습니다.", error: err });
}
};
// 등록된 시스템 목록 조회
const getsystems = async (req, res) => {
if (!req.session.user) {
console.error("❌ [AUTH] 사용자 세션이 없습니다.");
return res.status(401).json({ message: "로그인이 필요합니다." });
}
const user_id = req.session.user.id;
try {
console.log("📩 [GET 요청] 사용자 ID:", user_id);
const [systems] = await pool.query(
`SELECT
systems.id AS system_id,
systems.name AS system_name,
systems.purpose,
systems.assessment_status,
User.institution_name,
User.representative_name
FROM systems
INNER JOIN User ON systems.user_id = User.id
WHERE systems.user_id = ?
ORDER BY systems.created_at DESC`,
[user_id]
);
console.log("✅ [DB] 시스템 목록 조회 성공:", systems);
res.status(200).json(systems);
} catch (err) {
console.error("❌ [DB] 시스템 목록 조회 실패:", err);
res.status(500).json({
message: "시스템 목록 조회 중 오류가 발생했습니다.",
error: err,
});
}
};
// 특정 시스템 상세 정보 조회
const getSystemById = async (req, res) => {
const { id } = req.params;
try {
const [system] = await pool.query(
`SELECT
systems.id AS system_id,
systems.name AS system_name,
systems.purpose,
systems.min_subjects,
systems.max_subjects,
systems.assessment_status,
User.institution_name,
User.representative_name
FROM systems
INNER JOIN User ON systems.user_id = User.id
WHERE systems.id = ?`,
[id]
);
if (system.length === 0) {
return res.status(404).json({ message: "시스템을 찾을 수 없습니다." });
}
res.status(200).json(system[0]);
} catch (err) {
console.error("❌ [DB] 시스템 상세 조회 실패:", err);
res.status(500).json({ message: "시스템 조회 중 오류가 발생했습니다." });
}
};
// 시스템 업데이트
const updateSystem = async (req, res) => {
const { id } = req.params;
const { name, purpose, min_subjects, max_subjects } = req.body;
try {
const [result] = await pool.query(
`UPDATE systems
SET name = ?, purpose = ?, min_subjects = ?, max_subjects = ?
WHERE id = ?`,
[name, purpose, min_subjects, max_subjects, id]
);
if (result.affectedRows === 0) {
return res.status(404).json({ message: "시스템을 찾을 수 없습니다." });
}
res
.status(200)
.json({ message: "시스템 정보가 성공적으로 업데이트되었습니다." });
} catch (err) {
console.error("❌ [DB] 시스템 업데이트 실패:", err);
res
.status(500)
.json({ message: "시스템 업데이트 중 오류가 발생했습니다." });
}
};
// 시스템 삭제
const deleteSystem = async (req, res) => {
const { id } = req.params;
try {
const [result] = await pool.query(
`DELETE FROM systems
WHERE id = ?`,
[id]
);
if (result.affectedRows === 0) {
return res.status(404).json({ message: "시스템을 찾을 수 없습니다." });
}
res.status(200).json({ message: "시스템이 성공적으로 삭제되었습니다." });
} catch (err) {
console.error("❌ [DB] 시스템 삭제 실패:", err);
res.status(500).json({ message: "시스템 삭제 중 오류가 발생했습니다." });
}
};
const getAllSystems = async (req, res) => {
try {
const [systems] = await pool.query(
`SELECT
systems.id AS system_id,
systems.name AS system_name,
systems.purpose,
systems.min_subjects,
systems.max_subjects,
systems.assessment_status,
User.institution_name AS user_institution_name,
User.representative_name AS user_representative_name,
User.email AS user_email
FROM systems
INNER JOIN User ON systems.user_id = User.id
ORDER BY systems.created_at DESC`
);
console.log("✅ [DB] 모든 시스템 목록 조회 성공:", systems);
res.status(200).json({
resultCode: "S-1",
msg: "모든 시스템 데이터를 성공적으로 가져왔습니다.",
data: systems,
});
} catch (err) {
console.error("❌ [DB] 모든 시스템 목록 조회 실패:", err);
res.status(500).json({
resultCode: "F-1",
msg: "시스템 목록 조회 중 오류가 발생했습니다.",
error: err,
});
}
};
export {
deleteSystem,
updateSystem,
getSystemById,
postsystem,
getsystems,
getAllSystems,
};
우선 유저가 시스템을 등록할 수 있게 post 백엔드 코드를 보여드리겠습니다.
// 시스템 등록
const postsystem = async (req, res) => {
const {
name,
min_subjects,
max_subjects,
purpose,
is_private,
is_unique,
is_resident,
reason,
} = req.body;
const user_id = req.session.user?.id;
if (!user_id) {
console.error("❌ [AUTH] 사용자 세션이 없습니다.");
return res.status(401).json({ message: "로그인이 필요합니다." });
}
try {
console.log("📩 [POST 요청] 데이터:", req.body);
console.log("🧑💻 [POST 요청] 사용자 ID:", user_id);
// 시스템 개수 제한 확인
const [systemCount] = await pool.query(
"SELECT COUNT(*) AS count FROM systems WHERE user_id = ?",
[user_id]
);
console.log("📊 [DB] 현재 시스템 개수:", systemCount[0].count);
if (systemCount[0].count >= 10) {
console.warn("⚠️ [LIMIT] 최대 시스템 개수 초과");
return res
.status(400)
.json({ message: "시스템은 최대 10개까지 등록 가능합니다." });
}
// 시스템 등록
const [result] = await pool.query(
`INSERT INTO systems (user_id, name, min_subjects, max_subjects, purpose, is_private, is_unique, is_resident, reason, assessment_status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, '시작전')`,
[
user_id,
name,
min_subjects,
max_subjects,
purpose,
is_private === "포함",
is_unique === "포함",
is_resident === "포함",
reason,
]
);
console.log("✅ [DB] 시스템 등록 성공:", result);
res.status(201).json({
message: "시스템 등록이 완료되었습니다.",
systemId: result.insertId,
});
} catch (err) {
console.error("❌ [DB] 시스템 등록 실패:", err);
res
.status(500)
.json({ message: "시스템 등록 중 오류가 발생했습니다.", error: err });
}
};
const {
name,
min_subjects,
max_subjects,
purpose,
is_private,
is_unique,
is_resident,
reason,
} = req.body;
req를 통해서 프론트쪽에서 사용자가 입력한 값이 저장되게 합니다.
const user_id = req.session.user?.id;
if (!user_id) {
console.error("❌ [AUTH] 사용자 세션이 없습니다.");
return res.status(401).json({ message: "로그인이 필요합니다." });
}
세션에서 사용자 ID를 가져옵니다. 로그인 상태가 아니라면 요청을 거부합니다.
const [systemCount] = await pool.query(
"SELECT COUNT(*) AS count FROM systems WHERE user_id = ?",
[user_id]
);
if (systemCount[0].count >= 10) {
return res
.status(400)
.json({ message: "시스템은 최대 10개까지 등록 가능합니다." });
}
사용자가 등록한 시스템 개수를 죄회를 해서 사용자가 10개이상의 시스템을 등록했다면 에러를 반환한다.
const [result] = await pool.query(
`INSERT INTO systems (user_id, name, min_subjects, max_subjects, purpose, is_private, is_unique, is_resident, reason, assessment_status)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, '시작전')`,
[
user_id,
name,
min_subjects,
max_subjects,
purpose,
is_private === "포함",
is_unique === "포함",
is_resident === "포함",
reason,
]
);
사용자 요청 데이터를 INSERT INTO 쿼리를 사용해 systems 테이블에 삽입합니다.
이번에는 등록된 시스템을 조회하는 코드입니다.
const getSystemById = async (req, res) => {
const { id } = req.params;
try {
const [system] = await pool.query(
`SELECT
systems.id AS system_id,
systems.name AS system_name,
systems.purpose,
systems.min_subjects,
systems.max_subjects,
systems.assessment_status,
User.institution_name,
User.representative_name
FROM systems
INNER JOIN User ON systems.user_id = User.id
WHERE systems.id = ?`,
[id]
);
if (system.length === 0) {
return res.status(404).json({ message: "시스템을 찾을 수 없습니다." });
}
res.status(200).json(system[0]);
} catch (err) {
res.status(500).json({ message: "시스템 조회 중 오류가 발생했습니다." });
}
};
특정 ID로 조회: req.params.id로 시스템 ID를 받아 SQL에서 조회합니다.
INNER JOIN: 시스템과 사용자 정보를 함께 반환합니다.
결과 반환: 없으면 404, 있으면 시스템 상세 데이터를 반환 합니다.
다음은 시스템 업데이트 코드입니다.
const updateSystem = async (req, res) => {
const { id } = req.params;
const { name, purpose, min_subjects, max_subjects } = req.body;
try {
const [result] = await pool.query(
`UPDATE systems
SET name = ?, purpose = ?, min_subjects = ?, max_subjects = ?
WHERE id = ?`,
[name, purpose, min_subjects, max_subjects, id]
);
if (result.affectedRows === 0) {
return res.status(404).json({ message: "시스템을 찾을 수 없습니다." });
}
res
.status(200)
.json({ message: "시스템 정보가 성공적으로 업데이트되었습니다." });
} catch (err) {
res.status(500).json({ message: "시스템 업데이트 중 오류가 발생했습니다." });
}
};
시스템 삭제하는 코드입니다.
const deleteSystem = async (req, res) => {
const { id } = req.params;
try {
const [result] = await pool.query(
`DELETE FROM systems
WHERE id = ?`,
[id]
);
if (result.affectedRows === 0) {
return res.status(404).json({ message: "시스템을 찾을 수 없습니다." });
}
res.status(200).json({ message: "시스템이 성공적으로 삭제되었습니다." });
} catch (err) {
res.status(500).json({ message: "시스템 삭제 중 오류가 발생했습니다." });
}
};
'프로젝트' 카테고리의 다른 글
개인정보-컴플라이언스-웹애플리케이션(7) - (자가진단 설문 결과) 백엔드 코드 (0) | 2025.01.26 |
---|---|
개인정보-컴플라이언스-웹애플리케이션(6) - (자가진단 설문) 백엔드 코드 (0) | 2025.01.26 |
개인정보-컴플라이언스-웹애플리케이션(4) - 테이블(db), (유저,관리자) 백엔드 코드 (0) | 2025.01.24 |
개인정보-컴플라이언스-웹애플리케이션(3) - 프론트 구조 및 백엔드 구조 (1) | 2025.01.23 |
개인정보-컴플라이언스-웹애플리케이션(2) - ERD, DB테이블 설정 (0) | 2025.01.23 |