/**
* 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;
});
}