diff options
| author | yyamashita <8nmdh5w22f@privaterelay.appleid.com> | 2026-11-01 08:59:15 +0900 |
|---|---|---|
| committer | yyamashita <8nmdh5w22f@privaterelay.appleid.com> | 2026-11-01 08:59:15 +0900 |
| commit | a661eedbd30206e940ed8fb6a19f139311adbdfb (patch) | |
| tree | 6eed45d0a1d7b9be04de04c6d93f491a5071109c /providers | |
西荻窪周辺スタジオの空き枠一覧ページを追加
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'providers')
| -rw-r--r-- | providers/__init__.py | 18 | ||||
| -rw-r--r-- | providers/manual.py | 28 | ||||
| -rw-r--r-- | providers/sample.py | 13 |
3 files changed, 59 insertions, 0 deletions
diff --git a/providers/__init__.py b/providers/__init__.py new file mode 100644 index 0000000..a32ed09 --- /dev/null +++ b/providers/__init__.py @@ -0,0 +1,18 @@ +"""空き枠の取得元。 + +各 provider は fetch(studio, date) -> list[dict] を持つモジュール。 +返す dict は {"room": str, "hour": int, "status": "free" | "booked"}。 +hour は開始時刻(1時間枠)。studios.json の "provider" で使う provider を選ぶ。 +""" + +from . import manual, sample + +PROVIDERS = { + "sample": sample, + "manual": manual, +} + + +def fetch(studio, date): + provider = PROVIDERS[studio["provider"]] + return provider.fetch(studio, date) diff --git a/providers/manual.py b/providers/manual.py new file mode 100644 index 0000000..4623b26 --- /dev/null +++ b/providers/manual.py @@ -0,0 +1,28 @@ +"""manual_slots.json に手で書いた予約済み枠を読む。書いていない枠は空きとみなす。 + +形式: +{ + "uen": { + "2026-11-03": {"1st": [18, 19, 20], "2nd": [21]} + } +} +""" + +import json +from pathlib import Path + +PATH = Path(__file__).resolve().parent.parent / "manual_slots.json" + + +def fetch(studio, date): + data = json.loads(PATH.read_text(encoding="utf-8")) if PATH.exists() else {} + booked = data.get(studio["id"], {}).get(date.isoformat(), {}) + return [ + { + "room": room, + "hour": hour, + "status": "booked" if hour in booked.get(room, []) else "free", + } + for room in studio["rooms"] + for hour in range(studio["open"], studio["close"]) + ] diff --git a/providers/sample.py b/providers/sample.py new file mode 100644 index 0000000..86708da --- /dev/null +++ b/providers/sample.py @@ -0,0 +1,13 @@ +"""画面確認用のダミーデータ。日付とスタジオごとに毎回同じ結果を返す。""" + +import random + + +def fetch(studio, date): + rng = random.Random(f"{studio['id']}:{date.isoformat()}") + slots = [] + for room in studio["rooms"]: + for hour in range(studio["open"], studio["close"]): + status = "booked" if rng.random() < 0.45 else "free" + slots.append({"room": room, "hour": hour, "status": status}) + return slots |
