/**
* GET /error-lists — エラー内容の選択肢(`error_lists`。エラー一覧のセレクトリスト用。指示書BD §3-1。D-184。読み取り専用)
*
* 形は `app/api/groups/route.ts` と同じ。仕様の正は `d-watch-api.yaml` の /error-lists。
*
* ★GET だけ★ — `error_lists` は先方が管理する表(管理側UIなし。ユーザー回答① 2026-10-27)。
* アプリが書くのは `robot_error_reports.error_list_id`(`PATCH /errors/{error_id}/status`)だけ。
*
* ★有効な行だけ・id の昇順★ — データ層(`db.errorLists()`。規則の正は `activeErrorListItems()`)が済ませて返す。
* ★`GET /groups` と違い `inactive` でも絞る★(無効化した選択肢を新たに選ばせない)。
* ★文字列は DB の値のまま★(`t()` に通さない・変換しない。D-077 と同じ)。
*
* ★認証はここに書かない★ — `proxy.ts` が全ルートを横断して判定する。
* ★ページングしない★(`GET /groups` と同じ。`meta` は `masterListResponse()`)。
*/
import { NextResponse } from "next/server";
import { db } from "@/lib/db";
import { masterListResponse } from "@/lib/masters/query";
import { withRequestId } from "@/lib/logger";
import { logApiError } from "@/lib/logger/api";
import type { ApiError, ErrorListItem, ErrorListsResponse } from "@/lib/types";
const ROUTE = "/api/error-lists";
export async function GET(request: Request) {
return withRequestId(request, async () => {
// ★クエリパラメータを持たないので 422 の分岐が無い★(`app/api/groups/route.ts` と同じ)
let items: ErrorListItem[];
try {
items = await db.errorLists();
} catch (e) {
const body: ApiError = {
error: {
code: "internal_error",
message: "データの取得に失敗しました",
details: null,
},
};
logApiError({ route: ROUTE, method: "GET", body, status: 500, err: e });
return NextResponse.json(body, { status: 500 });
}
const body: ErrorListsResponse = masterListResponse(items);
return NextResponse.json(body);
});
}