증상: 마스터 품목 관리 화면에 품목이 하나도 안 보임.
원인: 마이그레이션 016 (vendor_objid) 이 운영 DB 에 적용 안 된 상태에서
SELECT I.vendor_objid 가 'column does not exist' 로 실패 → 빈 배열 응답.
해결: API 첫 호출 시 ALTER TABLE ... ADD COLUMN IF NOT EXISTS 로
vendor_objid + max_order_qty + is_hidden + requires_delivery 모두 자동 보장.
idempotent 하므로 이미 적용된 환경에서도 NOOP.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,32 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { queryRows, queryOne } from "@/lib/db";
|
||||
import { queryRows, queryOne, pool } from "@/lib/db";
|
||||
import { requireMomoUser } from "@/lib/momo-guard";
|
||||
|
||||
// 마이그레이션 016/011 등이 운영 DB에 아직 안 들어간 환경에서도 안전하게 동작하도록
|
||||
// 첫 호출 시 필요한 컬럼이 없으면 ADD COLUMN IF NOT EXISTS 로 보장한다.
|
||||
let columnsEnsured = false;
|
||||
async function ensureColumns() {
|
||||
if (columnsEnsured) return;
|
||||
try {
|
||||
await pool.query(`
|
||||
ALTER TABLE momo_items
|
||||
ADD COLUMN IF NOT EXISTS vendor_objid TEXT,
|
||||
ADD COLUMN IF NOT EXISTS max_order_qty INTEGER,
|
||||
ADD COLUMN IF NOT EXISTS is_hidden CHAR(1) DEFAULT 'N',
|
||||
ADD COLUMN IF NOT EXISTS requires_delivery CHAR(1) DEFAULT 'N';
|
||||
`);
|
||||
columnsEnsured = true;
|
||||
} catch (err) {
|
||||
console.error("[items/list ensureColumns]", err);
|
||||
}
|
||||
}
|
||||
|
||||
// 품목 목록 — USER 는 재고 있는 ACTIVE 만, ADMIN 은 전체 표시
|
||||
// 숨김(is_hidden='Y') 품목: view_hidden='Y' 권한 회원과 관리자에게만 노출
|
||||
export async function POST(req: NextRequest) {
|
||||
const r = await requireMomoUser();
|
||||
if (r instanceof NextResponse) return r;
|
||||
await ensureColumns();
|
||||
|
||||
const body = await req.json().catch(() => ({}));
|
||||
const { keyword, isTaxFree, makerObjid, status, onlyAvailable } = body as {
|
||||
|
||||
Reference in New Issue
Block a user