diff --git a/src/app/api/m/orders/cancel/route.ts b/src/app/api/m/orders/cancel/route.ts index 8b80e48..05c5fb9 100644 --- a/src/app/api/m/orders/cancel/route.ts +++ b/src/app/api/m/orders/cancel/route.ts @@ -1,10 +1,24 @@ import { NextRequest, NextResponse } from "next/server"; -import { execute, queryOne } from "@/lib/db"; +import { execute, pool, queryOne } from "@/lib/db"; import { requireMomoUser } from "@/lib/momo-guard"; +let lockColsEnsured = false; +async function ensureLockCols() { + if (lockColsEnsured) return; + try { + await pool.query(` + ALTER TABLE momo_orders + ADD COLUMN IF NOT EXISTS editing_by TEXT, + ADD COLUMN IF NOT EXISTS editing_at TIMESTAMP; + `); + lockColsEnsured = true; + } catch { /* ignore */ } +} + export async function POST(req: NextRequest) { const r = await requireMomoUser(); if (r instanceof NextResponse) return r; + await ensureLockCols(); const { objid } = await req.json(); const order = await queryOne<{ customer_objid: string; status: string; editing_by: string | null; lock_alive: boolean }>( diff --git a/src/app/api/m/orders/detail/route.ts b/src/app/api/m/orders/detail/route.ts index 4e897ec..21779d7 100644 --- a/src/app/api/m/orders/detail/route.ts +++ b/src/app/api/m/orders/detail/route.ts @@ -1,11 +1,28 @@ import { NextRequest, NextResponse } from "next/server"; -import { queryOne, queryRows } from "@/lib/db"; +import { pool, queryOne, queryRows } from "@/lib/db"; import { requireMomoUser } from "@/lib/momo-guard"; import { getSupplierByBranch } from "@/lib/momo-branches"; +// 편집 락 컬럼이 운영 DB 에 아직 없으면 1회 자동 증설 +let lockColsEnsured = false; +async function ensureLockCols() { + if (lockColsEnsured) return; + try { + await pool.query(` + ALTER TABLE momo_orders + ADD COLUMN IF NOT EXISTS editing_by TEXT, + ADD COLUMN IF NOT EXISTS editing_at TIMESTAMP; + `); + lockColsEnsured = true; + } catch (err) { + console.error("[orders/detail/ensureLockCols]", err); + } +} + export async function POST(req: NextRequest) { const r = await requireMomoUser(); if (r instanceof NextResponse) return r; + await ensureLockCols(); const { objid } = await req.json(); if (!objid) return NextResponse.json({ success: false, message: "objid 누락" }, { status: 400 }); diff --git a/src/app/api/m/orders/items/add/route.ts b/src/app/api/m/orders/items/add/route.ts index 892cdda..374456a 100644 --- a/src/app/api/m/orders/items/add/route.ts +++ b/src/app/api/m/orders/items/add/route.ts @@ -6,11 +6,25 @@ import { createObjectId } from "@/lib/utils"; import { requireMomoUser } from "@/lib/momo-guard"; import { calcLine } from "@/lib/momo-pricing"; +let lockColsEnsured = false; +async function ensureLockCols() { + if (lockColsEnsured) return; + try { + await pool.query(` + ALTER TABLE momo_orders + ADD COLUMN IF NOT EXISTS editing_by TEXT, + ADD COLUMN IF NOT EXISTS editing_at TIMESTAMP; + `); + lockColsEnsured = true; + } catch { /* ignore */ } +} + interface AddItem { itemObjid: string; qty: number } export async function POST(req: NextRequest) { const r = await requireMomoUser(); if (r instanceof NextResponse) return r; + await ensureLockCols(); const body = await req.json().catch(() => ({})); const { orderObjid, items } = body as { orderObjid?: string; items?: AddItem[] }; diff --git a/src/app/api/m/orders/items/update/route.ts b/src/app/api/m/orders/items/update/route.ts index 759c795..19ed11a 100644 --- a/src/app/api/m/orders/items/update/route.ts +++ b/src/app/api/m/orders/items/update/route.ts @@ -6,6 +6,19 @@ import { pool } from "@/lib/db"; import { requireMomoUser } from "@/lib/momo-guard"; import { calcLine } from "@/lib/momo-pricing"; +let lockColsEnsured = false; +async function ensureLockCols() { + if (lockColsEnsured) return; + try { + await pool.query(` + ALTER TABLE momo_orders + ADD COLUMN IF NOT EXISTS editing_by TEXT, + ADD COLUMN IF NOT EXISTS editing_at TIMESTAMP; + `); + lockColsEnsured = true; + } catch { /* ignore */ } +} + interface LineUpdate { objid: string; // 라인 OBJID qty?: number; // 새 수량 (undefined 면 변경 안 함) @@ -15,6 +28,7 @@ interface LineUpdate { export async function POST(req: NextRequest) { const r = await requireMomoUser(); if (r instanceof NextResponse) return r; + await ensureLockCols(); const body = await req.json().catch(() => ({})); const { orderObjid, lines } = body as { orderObjid?: string; lines?: LineUpdate[] }; diff --git a/src/app/api/m/orders/list/route.ts b/src/app/api/m/orders/list/route.ts index 451d81b..aa97ce9 100644 --- a/src/app/api/m/orders/list/route.ts +++ b/src/app/api/m/orders/list/route.ts @@ -1,10 +1,27 @@ import { NextRequest, NextResponse } from "next/server"; -import { queryRows } from "@/lib/db"; +import { pool, queryRows } from "@/lib/db"; + +// momo_orders 에 편집 락 컬럼이 없으면 1회 자동 증설 +let lockColsEnsured = false; +async function ensureLockCols() { + if (lockColsEnsured) return; + try { + await pool.query(` + ALTER TABLE momo_orders + ADD COLUMN IF NOT EXISTS editing_by TEXT, + ADD COLUMN IF NOT EXISTS editing_at TIMESTAMP; + `); + lockColsEnsured = true; + } catch (err) { + console.error("[orders/list/ensureLockCols]", err); + } +} import { requireMomoUser } from "@/lib/momo-guard"; export async function POST(req: NextRequest) { const r = await requireMomoUser(); if (r instanceof NextResponse) return r; + await ensureLockCols(); const body = await req.json().catch(() => ({})); const { dateFrom, dateTo, status, statuses, customerObjid, keyword, mine } = body as {