🔧 웹훅 URL을 HTTPS로 수정
Some checks failed
🚀 Deploy - Demo / deployment (push) Has been cancelled

- 웹훅 URL을 https://admin.youtooplay.com/webhook로 변경
- Nginx 리버스 프록시 설정 파일 추가
- 배포 가이드 업데이트
This commit is contained in:
2025-10-01 01:47:51 +09:00
parent f331b52e64
commit 83b162d2bd
713 changed files with 98449 additions and 38378 deletions

View File

@@ -0,0 +1,72 @@
import { d as defineEventHandler, r as readBody, c as createError } from '../../../nitro/nitro.mjs';
import { PrismaClient } from '@prisma/client';
import jwt from 'jsonwebtoken';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
const prisma = new PrismaClient();
const login_post = defineEventHandler(async (event) => {
const body = await readBody(event);
const { user_id, password } = body;
console.log("\uB85C\uADF8\uC778 \uC694\uCCAD:", { user_id, password: password ? "***" : "undefined" });
if (!user_id || !password) {
throw createError({
statusCode: 400,
statusMessage: "\uC544\uC774\uB514\uC640 \uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694."
});
}
try {
const user = await prisma.members.findUnique({
where: { user_id }
});
console.log("\uC0AC\uC6A9\uC790 \uC870\uD68C \uACB0\uACFC:", user);
if (!user) {
throw createError({
statusCode: 401,
statusMessage: "\uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uC544\uC774\uB514\uC785\uB2C8\uB2E4."
});
}
if (user.password !== password) {
console.log("\uBE44\uBC00\uBC88\uD638 \uBD88\uC77C\uCE58:", {
\uC785\uB825\uB41C\uBE44\uBC00\uBC88\uD638: password,
\uC800\uC7A5\uB41C\uBE44\uBC00\uBC88\uD638: user.password
});
throw createError({
statusCode: 401,
statusMessage: "\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."
});
}
console.log("\uB85C\uADF8\uC778 \uC131\uACF5:", { user_id: user.user_id, name: user.name });
const token = jwt.sign(
{ id: user.id, user_id: user.user_id, name: user.name, role_level: user.role_level },
"your-secret-key",
// 실제 서비스에서는 환경 변수로 관리
{ expiresIn: "24h" }
);
return {
success: true,
message: "\uB85C\uADF8\uC778 \uC131\uACF5",
token,
user: {
id: user.id,
user_id: user.user_id,
name: user.name,
role_level: user.role_level
}
};
} catch (error) {
console.error("\uB85C\uADF8\uC778 \uC624\uB958:", error);
throw createError({
statusCode: error.statusCode || 500,
statusMessage: error.statusMessage || "\uB85C\uADF8\uC778 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4."
});
}
});
export { login_post as default };

View File

@@ -0,0 +1,66 @@
import { d as defineEventHandler, r as readBody, c as createError } from '../../../nitro/nitro.mjs';
import { Pool } from 'pg';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
const pool = new Pool({
user: "musicuser",
host: "localhost",
database: "musicdb",
password: "Tjqjqhdks$321",
port: 5432
});
const register_post = defineEventHandler(async (event) => {
try {
const body = await readBody(event);
const { user_id, password, name, role_level } = body;
if (!user_id || !password || !name || !role_level) {
throw createError({
statusCode: 400,
statusMessage: "\uBAA8\uB4E0 \uD544\uB4DC\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694."
});
}
if (role_level < 1 || role_level > 3) {
throw createError({
statusCode: 400,
statusMessage: "\uAD8C\uD55C \uB4F1\uAE09\uC740 1~3 \uC0AC\uC774\uC5EC\uC57C \uD569\uB2C8\uB2E4."
});
}
const existingUser = await pool.query(
"SELECT user_id FROM members WHERE user_id = $1",
[user_id]
);
if (existingUser.rows.length > 0) {
throw createError({
statusCode: 409,
statusMessage: "\uC774\uBBF8 \uC874\uC7AC\uD558\uB294 \uC544\uC774\uB514\uC785\uB2C8\uB2E4."
});
}
const result = await pool.query(
"INSERT INTO members (user_id, password, name, role_level) VALUES ($1, $2, $3, $4) RETURNING *",
[user_id, password, name, role_level]
);
const newUser = result.rows[0];
return {
success: true,
message: "\uD68C\uC6D0\uAC00\uC785\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
user: {
id: newUser.id,
user_id: newUser.user_id,
name: newUser.name,
role_level: newUser.role_level
}
};
} catch (error) {
console.error("Register error:", error);
throw error;
}
});
export { register_post as default };

View File

@@ -0,0 +1,41 @@
import { d as defineEventHandler, g as getCookie, a as getHeader, c as createError } from '../../../nitro/nitro.mjs';
import jwt from 'jsonwebtoken';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
const verify_get = defineEventHandler(async (event) => {
var _a;
try {
const token = getCookie(event, "auth-token") || ((_a = getHeader(event, "authorization")) == null ? void 0 : _a.replace("Bearer ", ""));
if (!token) {
throw createError({
statusCode: 401,
statusMessage: "\uC778\uC99D \uD1A0\uD070\uC774 \uC5C6\uC2B5\uB2C8\uB2E4."
});
}
const decoded = jwt.verify(token, "your-secret-key");
return {
success: true,
user: {
id: decoded.id,
user_id: decoded.user_id,
name: decoded.name,
role_level: decoded.role_level
}
};
} catch (error) {
console.error("Token verification error:", error);
throw createError({
statusCode: 401,
statusMessage: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uD1A0\uD070\uC785\uB2C8\uB2E4."
});
}
});
export { verify_get as default };