Newer
Older
client_dwatch / lib / db / fixture-area-completions.ts
/**
 * fixtures 版 `areaCompletions()` の絞り込み(指示書AC ★段階3★)。
 *
 * ★★`USE_FIXTURES` の true/false で件数が変わってはいけない★★(指示書AC 禁止事項6)。
 *   Prisma 版が SQL に降ろした条件(施設ID・日付1日ぶん)と ★同じ意味★ をここで再現します。
 *
 * ★絞り込み規則の「正」は `selectAreaRowsForLog()`(`lib/clean-logs/areas.ts`)★ —
 *   ここも Prisma 側もその ★写し★ です(指示書AC C-5)。
 *   ★★`selectAreaRowsForLog()` を外さないこと★★ — 外すと「SQL が絞りすぎた」ときに
 *   取り戻せなくなります(C-6 / C-5)。
 *
 * ★DBアクセスを混ぜない純粋関数★(テストから直接呼べるようにするため。
 * `lib/db/fixture-clean-logs.ts` と同じ流儀)。
 */
import type { AreaCompletionDbQuery, AreaCompletionRow } from "@/lib/types";

/**
 * ★日付の比較は文字列のまま行う★ — `AreaCompletionRow.date` は既に JST の
 * `YYYY-MM-DD`(`jstIsoFromDb()` の先頭10文字)なので、実行環境のタイムゾーンに依存しません
 * (`filterFixtureCleanLogs()` / `selectAreaRowsForLog()` と同じ作法)。
 * ★`new Date()` を挟むと、Prisma 版が壁時計値で絞っているのと基準がずれます★。
 */
export function filterFixtureAreaCompletions(
  rows: readonly AreaCompletionRow[],
  query: AreaCompletionDbQuery
): AreaCompletionRow[] {
  return rows.filter((row) => {
    // ★★`!== null` で分岐すること★★(`?` や `||` で書くと「指定なし」と混ざる。罠1と同じ形)
    if (query.facility_id !== null && row.facility_id !== query.facility_id) return false;
    if (query.date !== null && row.date !== query.date) return false;
    return true;
  });
}