feature/prisma-to-raw-query-phase1-complete #82

Merged
kjs merged 29 commits from feature/prisma-to-raw-query-phase1-complete into main 2025-10-01 15:07:17 +09:00
3 changed files with 24 additions and 15 deletions
Showing only changes of commit ec5fae1a4d - Show all commits

View File

@ -133,10 +133,10 @@ export class CommonCodeController {
} catch (error) {
logger.error("카테고리 생성 실패:", error);
// Prisma 에러 처리
// PostgreSQL 에러 처리
if (
error instanceof Error &&
error.message.includes("Unique constraint")
((error as any)?.code === "23505") || // PostgreSQL unique_violation
(error instanceof Error && error.message.includes("Unique constraint"))
) {
return res.status(409).json({
success: false,

View File

@ -154,7 +154,7 @@ export const createDataflowDiagram = async (req: Request, res: Response) => {
// 중복 이름 에러인지 먼저 확인 (로그 출력 전에)
const isDuplicateError =
(error && typeof error === "object" && (error as any).code === "P2002") || // Prisma unique constraint error code
(error && typeof error === "object" && (error as any).code === "23505") || // PostgreSQL unique_violation
(error instanceof Error &&
(error.message.includes("unique constraint") ||
error.message.includes("Unique constraint") ||
@ -236,7 +236,7 @@ export const updateDataflowDiagram = async (req: Request, res: Response) => {
} catch (error) {
// 중복 이름 에러인지 먼저 확인 (로그 출력 전에)
const isDuplicateError =
(error && typeof error === "object" && (error as any).code === "P2002") || // Prisma unique constraint error code
(error && typeof error === "object" && (error as any).code === "23505") || // PostgreSQL unique_violation
(error instanceof Error &&
(error.message.includes("unique constraint") ||
error.message.includes("Unique constraint") ||

View File

@ -25,16 +25,25 @@ export const errorHandler = (
let error = { ...err };
error.message = err.message;
// Prisma 에러 처리
if (err.name === "PrismaClientKnownRequestError") {
const message = "데이터베이스 요청 오류가 발생했습니다.";
error = new AppError(message, 400);
}
// Prisma 유효성 검증 에러
if (err.name === "PrismaClientValidationError") {
const message = "입력 데이터가 유효하지 않습니다.";
error = new AppError(message, 400);
// PostgreSQL 에러 처리 (pg 라이브러리)
if ((err as any).code) {
const pgError = err as any;
// PostgreSQL 에러 코드 참조: https://www.postgresql.org/docs/current/errcodes-appendix.html
if (pgError.code === "23505") {
// unique_violation
error = new AppError("중복된 데이터가 존재합니다.", 400);
} else if (pgError.code === "23503") {
// foreign_key_violation
error = new AppError("참조 무결성 제약 조건 위반입니다.", 400);
} else if (pgError.code === "23502") {
// not_null_violation
error = new AppError("필수 입력값이 누락되었습니다.", 400);
} else if (pgError.code.startsWith("23")) {
// 기타 무결성 제약 조건 위반
error = new AppError("데이터 무결성 제약 조건 위반입니다.", 400);
} else {
error = new AppError("데이터베이스 오류가 발생했습니다.", 500);
}
}
// JWT 에러 처리