From 1e93fb87831bba8c8ff7f0fc1f8f8fbafa09637d Mon Sep 17 00:00:00 2001 From: Brian Bjarke Jensen Date: Wed, 12 Nov 2025 15:23:51 +0100 Subject: [PATCH] added support for manual sleep logging --- src/baby_monitor/main.py | 6 + src/baby_monitor/models/sleep.py | 1 + .../interfaces/sleep_repository_interface.py | 1 + .../repositories/sleep/sqlite_sleep.py | 3 +- src/baby_monitor/routers/sleep.py | 1 + src/baby_monitor/static/log-sleep.html | 385 ++++++++++++++++++ src/baby_monitor/static/sleep.html | 9 +- 7 files changed, 404 insertions(+), 2 deletions(-) create mode 100644 src/baby_monitor/static/log-sleep.html diff --git a/src/baby_monitor/main.py b/src/baby_monitor/main.py index c0b8df6..6fc69c2 100644 --- a/src/baby_monitor/main.py +++ b/src/baby_monitor/main.py @@ -119,6 +119,12 @@ def serve_sleep() -> FileResponse: return FileResponse(static_path / "sleep.html") +@app.get("/log-sleep.html", include_in_schema=False) +def serve_log_sleep() -> FileResponse: + """Serve the log sleep page.""" + return FileResponse(static_path / "log-sleep.html") + + @app.get("/settings.html", include_in_schema=False) def serve_settings() -> FileResponse: """Serve the settings page.""" diff --git a/src/baby_monitor/models/sleep.py b/src/baby_monitor/models/sleep.py index 87bb685..2a48251 100644 --- a/src/baby_monitor/models/sleep.py +++ b/src/baby_monitor/models/sleep.py @@ -9,6 +9,7 @@ class CreateSleepRequest(BaseModel): child_id: int = Field(..., gt=0) start_time: datetime + end_time: datetime | None = None class UpdateSleepRequest(BaseModel): diff --git a/src/baby_monitor/repositories/interfaces/sleep_repository_interface.py b/src/baby_monitor/repositories/interfaces/sleep_repository_interface.py index 371ca3e..655af76 100644 --- a/src/baby_monitor/repositories/interfaces/sleep_repository_interface.py +++ b/src/baby_monitor/repositories/interfaces/sleep_repository_interface.py @@ -12,6 +12,7 @@ class SleepRepositoryInterface(ABC): self, child_id: int, start_time: datetime, + end_time: datetime | None = None, ) -> dict: """Create a new sleep log entry.""" diff --git a/src/baby_monitor/repositories/sleep/sqlite_sleep.py b/src/baby_monitor/repositories/sleep/sqlite_sleep.py index 1eb2bff..819c47d 100644 --- a/src/baby_monitor/repositories/sleep/sqlite_sleep.py +++ b/src/baby_monitor/repositories/sleep/sqlite_sleep.py @@ -27,12 +27,13 @@ class DatabaseSleepRepository(SleepRepositoryInterface): self, child_id: int, start_time: datetime, + end_time: datetime | None = None, ) -> dict: """Create a new sleep log entry.""" sleep = Sleep( child_id=child_id, start_time=start_time, - end_time=None, + end_time=end_time, ) self.db.add(sleep) self.db.commit() diff --git a/src/baby_monitor/routers/sleep.py b/src/baby_monitor/routers/sleep.py index a04d10f..7f6f1c6 100644 --- a/src/baby_monitor/routers/sleep.py +++ b/src/baby_monitor/routers/sleep.py @@ -36,6 +36,7 @@ def create_sleep( sleep = sleep_repo.create( child_id=request.child_id, start_time=request.start_time, + end_time=request.end_time, ) return SleepResponse(**sleep) diff --git a/src/baby_monitor/static/log-sleep.html b/src/baby_monitor/static/log-sleep.html new file mode 100644 index 0000000..df22b0a --- /dev/null +++ b/src/baby_monitor/static/log-sleep.html @@ -0,0 +1,385 @@ + + + + + + Log Sleep - Baby Monitor + + + +
+

😴 Log Sleep

+

Record a sleep session

+ +
+ +
Loading children...
+ + +
+ + + + diff --git a/src/baby_monitor/static/sleep.html b/src/baby_monitor/static/sleep.html index e2fc51d..ed9c7d0 100644 --- a/src/baby_monitor/static/sleep.html +++ b/src/baby_monitor/static/sleep.html @@ -517,7 +517,10 @@
-

Recent Sleep Sessions

+
+

Recent Sleep Sessions

+ +
${filteredSleeps .slice(0, 50) @@ -1058,6 +1061,10 @@ `; } + function addManualSleep() { + window.location.href = `/log-sleep.html`; + } + async function logout() { try { await fetch("/api/logout", {