import type {
InspectionDetail,
InspectionItemName,
InspectionListItem,
InspectionPhoto,
} from "@/lib/types";
import { dateOnly } from "./_helpers";
/**
* 点検記録のサンプルデータ
*
* ★点検記録はメインDBではなく DFA独自ストア(SQLite + オブジェクトストレージ)に保存する(D-004)★
*
* docs/fixtures.md §9 のケース
* - 申し送りあり / なし(空 と 長文)
* - 写真全部あり(Before/After × 7項目 = 14枚)
* - 写真一部欠け(グリッドの欠けた表示確認)
* - 写真なし(記録のみ)
* - 同一施設の複数回(劣化傾向の比較表示用)
*
* 写真はダミー画像で構いません。ここではプレースホルダのURLを入れています。
*/
export const INSPECTION_ITEMS: InspectionItemName[] = [
"ブラシ",
"ダストボックス",
"フィルター",
"スクイジー",
"吸引ホース",
"汚水タンク",
"ブラシ裏面",
];
function photoUrl(id: number, item: InspectionItemName, phase: "before" | "after") {
return `/fixtures/inspections/${id}/${encodeURIComponent(item)}-${phase}.png`;
}
/** 全項目のBefore/After 14枚 */
function allPhotos(id: number): InspectionPhoto[] {
return INSPECTION_ITEMS.flatMap((item) => [
{ item, phase: "before" as const, url: photoUrl(id, item, "before") },
{ item, phase: "after" as const, url: photoUrl(id, item, "after") },
]);
}
/** 一部項目だけ撮影されたケース */
function partialPhotos(id: number): InspectionPhoto[] {
const items: InspectionItemName[] = ["ブラシ", "ダストボックス", "汚水タンク"];
return items.flatMap((item) => [
{ item, phase: "before" as const, url: photoUrl(id, item, "before") },
// 「フィルター」はAfterのみ、といった欠けも作っておく
...(item === "ブラシ"
? [{ item, phase: "after" as const, url: photoUrl(id, item, "after") }]
: []),
]);
}
const LONG_NOTE =
"副店長様より、以前水漏れが発生し何度かメンテナンスを実施したとのヒアリングあり。" +
"現状は改善されており、今回の点検時も水漏れ跡・タンク周辺の湿りは確認されず。" +
"ブラシ裏面に毛絡みが見られたため現場で除去し、週1回の清掃を店舗側にご案内した。" +
"次回訪問時に同箇所の状態を再確認すること。";
export const inspectionDetails: InspectionDetail[] = [
{
// 写真全部あり + 申し送りなし
id: 1,
visited_on: dateOnly(40),
inspector_name: "山本 太一",
inspector_company: "DFA Robotics",
customer_name: "バリューマート",
facility_name: "メガバリューマート中央本店",
serial_number: "8111R5628060011",
has_notes: false,
notes: null,
photos: allPhotos(1),
},
{
// 写真全部あり + 申し送り長文
id: 2,
visited_on: dateOnly(38),
inspector_name: "山本 太一",
inspector_company: "DFA Robotics",
customer_name: "バリューマート",
facility_name: "メガバリューマート東口店",
serial_number: "8111R5628060033",
has_notes: true,
notes: LONG_NOTE,
photos: allPhotos(2),
},
{
// 写真一部欠け
id: 3,
visited_on: dateOnly(30),
inspector_name: "河野 誠一",
inspector_company: "DFA Robotics",
customer_name: "フレッシュタウン",
facility_name: "フレッシュタウン大和店",
serial_number: "8111R5628060144",
has_notes: true,
notes: "スクイジーに摩耗あり。次回交換予定。",
photos: partialPhotos(3),
},
{
// 写真なし(記録のみ)
id: 4,
visited_on: dateOnly(25),
inspector_name: "河野 誠一",
inspector_company: "DFA Robotics",
customer_name: "バリューマート",
facility_name: "バリューマート西通り店",
serial_number: "8111R5628060044",
has_notes: false,
notes: null,
photos: [],
},
{
// 同一施設の2回目(劣化傾向の比較表示用。id:1 と同じ施設)
id: 5,
visited_on: dateOnly(12),
inspector_name: "山本 太一",
inspector_company: "DFA Robotics",
customer_name: "バリューマート",
facility_name: "メガバリューマート中央本店",
serial_number: "8111R5628060011",
has_notes: true,
notes: "前回と比較してフィルターの目詰まりが進行。次回訪問時に交換を推奨。",
photos: allPhotos(5),
},
{
id: 6,
visited_on: dateOnly(8),
inspector_name: "山本 太一",
inspector_company: "DFA Robotics",
customer_name: "バリューマート",
facility_name: "メガバリューマート緑野店",
serial_number: "8111R5628060177",
has_notes: false,
notes: null,
photos: allPhotos(6),
},
];
/** 一覧用(photos と notes を落としたもの) */
export const inspections: InspectionListItem[] = inspectionDetails.map((d) => ({
id: d.id,
visited_on: d.visited_on,
inspector_name: d.inspector_name,
inspector_company: d.inspector_company,
customer_name: d.customer_name,
facility_name: d.facility_name,
serial_number: d.serial_number,
has_notes: d.has_notes,
}));