/**
* `customers.group_id`(DB)↔ `group_id`(API)の変換。
*
* ```
* DB : customers.group_id = 0 (NOT NULL。0 = ホールディングスなしのセンチネル。D-011)
* API: group_id = null
* ```
*
* ★★変換をここ1箇所に閉じ込めること★★(指示書AK §4-4。`lib/format/contract.ts` と同じ作法)—
* ルート・`DataSource` 実装・fixtures に `=== 0` を散らすと、
* 1箇所直し忘れたときに ★「グループ0」という存在しないホールディングスが画面に出る★
* (指示書AK 落とし穴3)。★例外もテスト失敗も出ない★。
*
* ★センチネル値そのものは `lib/config/index.ts` の `GROUP_ID_NONE` から読む★
* (`CLAUDE.md` §7「閾値のハードコード禁止」と同じ考え方)。
*
* ★逆方向(API → DB)の関数は用意しない★ — API の `group_id` は
* ★1以上しか受け付けない★(0 はセンチネルで有効なIDではない。
* `lib/api/master-id.ts` が入口で 422 にする)ので、変換の必要が無い。
*
* ★純粋関数にすること★(`CLAUDE.md` §9.4)— DBアクセスやログ出力を混ぜない。
*/
import { GROUP_ID_NONE } from "@/lib/config";
/**
* DB の `customers.group_id` を API の `group_id`(nullable)に変換する。
*
* ★`Number(row.group_id)` で `BigInt` を落としてから渡すこと★
* (`prismaSource` の他のメソッドと同じ。`BigInt` のまま `=== 0` は `0n === 0` が
* `false` なので静かに外れる)。
*/
export function groupIdFromDb(groupId: number): number | null {
return groupId === GROUP_ID_NONE ? null : groupId;
}