/**
* ★削除済み(論理削除)の施設・清掃エリアの行は、全画面で出さない★(ユーザー決定 2026-10-19。指示書BB U1・D-182。D-180 U8 を全画面に広げた)。
* ★`deleted_at` が NULL でなければ削除済み(日時の値によらない)★。
*
* - ★正★: `isVisibleFacilitySection()`(列を運ぶ読み取り — `robot_error_reports` — が使う。D-180 と同じ)
* - ★写し★: `FACILITY_SECTION_VISIBLE_WHERE`(Prisma のリレーション条件。`clean_timetables` / `clean_timetable_histories` /
* `clean_schedules` / `clean_task_reports` / `robot_error_reports` の `where` に混ぜる)。
* ★列を運ばない読み取りは、この写しだけで外す★(`IS NULL` は SQL と JS で意味が同じ。fixtures に削除の概念が無い。指示書BB D2)
* ★施設名・分類 → 施設ID の解決は `deleted_at` で絞らない(罠7)★ — 解決は行の可視性と別の責務。
* 削除済みの施設名で検索すると施設ID に解決され、その行はこの条件で外れて0件になる(指示書BB D3)
*/
import type { Prisma } from "@/lib/generated/prisma/client";
/** 可視性の判定に要る列(`facility` / `section` の `deleted_at`) */
export interface FacilitySectionVisibilitySource {
facility: { deleted_at: Date | null };
section: { deleted_at: Date | null };
}
/** ★行の施設・清掃エリアがどちらも削除済みでなければ見える(正)★ */
export function isVisibleFacilitySection(row: FacilitySectionVisibilitySource): boolean {
return row.facility.deleted_at === null && row.section.deleted_at === null;
}
/**
* ★SQL 側の写し★(`isVisibleFacilitySection()` と同じ規則)。
* ★各モデルの `where` に混ぜても型が通ることを `satisfies` で確かめる★(中身は同じ1つのオブジェクト。指示書BB 2-1)
*/
export const FACILITY_SECTION_VISIBLE_WHERE = {
facility: { deleted_at: null },
section: { deleted_at: null },
} as const satisfies Prisma.CleanTimetableWhereInput &
Prisma.CleanTimetableHistoryWhereInput &
Prisma.CleanScheduleWhereInput &
Prisma.CleanTaskReportWhereInput &
Prisma.RobotErrorReportWhereInput;