Commit Graph

382 Commits

Author SHA1 Message Date
83103e5eb5 feat: redesign wrapup HTML with glass cards, ranked lists, better layout
Some checks failed
CI / Check / Test (push) Failing after 42s
2026-06-03 01:00:50 +02:00
fc086de7f7 refactor: move DateRange validation to value object, add delete/cleanup
Some checks failed
CI / Check / Test (push) Failing after 40s
2026-06-03 00:58:07 +02:00
3a66f89609 fix: reverse rating bar order to 5★→1★ in video slides
Some checks failed
CI / Check / Test (push) Failing after 42s
2026-06-03 00:55:43 +02:00
45d6183ea4 fix: reverse rating bar order to 5★→1★
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-03 00:54:59 +02:00
241063c914 feat: wrapup date validation, delete endpoint, failed record cleanup
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-03 00:54:08 +02:00
3f483f8f81 fix: alpha-blend glass panels instead of opaque overwrite
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-03 00:46:09 +02:00
c842ad6a55 feat: download top-5 cast photos during TMDb enrichment
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-03 00:42:25 +02:00
a5cf62e281 fix: cover-fill backgrounds, bigger highlight posters
Some checks failed
CI / Check / Test (push) Failing after 42s
2026-06-03 00:40:35 +02:00
6fb00f9205 docs: add WRAPUP_BG_DIR to env/readme
Some checks failed
CI / Check / Test (push) Failing after 40s
2026-06-03 00:35:15 +02:00
d52120d6a9 feat: frutiger aero visual overhaul — backgrounds, glass panels, cast photos, full mosaic
Some checks failed
CI / Check / Test (push) Failing after 42s
2026-06-03 00:34:13 +02:00
e57ddd78ac feat: frutiger aero visual overhaul for wrapup video slides 2026-06-03 00:32:39 +02:00
0d02f23f4f fix: decode AVIF posters via ffmpeg fallback for mosaic slide
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-03 00:23:39 +02:00
86639853d2 fix: render genres via SlideRenderer, enable AVIF decoding, add poster fetch logging
Some checks failed
CI / Check / Test (push) Failing after 42s
2026-06-03 00:19:18 +02:00
7155bea78e fix: disable plotters axis labels to avoid system font lookup
Some checks failed
CI / Check / Test (push) Failing after 43s
2026-06-03 00:10:56 +02:00
8429d13db0 fix: enable ab_glyph font backend for plotters
Some checks failed
CI / Check / Test (push) Failing after 42s
2026-06-03 00:09:10 +02:00
cb611bcc7d fix: wire FfmpegWrapUpRenderer into worker when ffmpeg available
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-03 00:06:04 +02:00
bb503f3ce8 feat: AdminApiUser extractor for Bearer-token admin endpoints
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-03 00:00:45 +02:00
bf0350c87a fmt
Some checks failed
CI / Check / Test (push) Failing after 6m39s
2026-06-02 23:50:20 +02:00
9e13f04e9c fix: clippy warnings in wrapup compute + renderer
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-02 23:49:39 +02:00
e69f77a99f docs: add wrap-up to Dockerfile, .env.example, README
Some checks failed
CI / Check / Test (push) Failing after 42s
2026-06-02 23:47:21 +02:00
1e063b6580 feat: streaming video download via ImageStorage::get_stream
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-02 23:45:31 +02:00
f160adcd1c feat: wrapup env vars + render concurrency semaphore
Some checks failed
CI / Check / Test (push) Failing after 43s
2026-06-02 23:41:08 +02:00
efd1214a4c feat: font rendering + logo branding on wrapup slides
Some checks failed
CI / Check / Test (push) Failing after 43s
2026-06-02 23:16:55 +02:00
21c33b169e feat: gate wrapup generate behind admin role 2026-06-02 23:14:06 +02:00
490bd97a40 feat: wire video renderer pipeline + download endpoint
Some checks failed
CI / Check / Test (push) Failing after 41s
2026-06-02 22:34:55 +02:00
d45d8aa913 feat: video renderer adapter w/ slides + charts + ffmpeg 2026-06-02 22:31:45 +02:00
f00a2cbbb8 feat: HTML wrap-up page with Askama template 2026-06-02 22:28:28 +02:00
c0b3fb6940 fix: collapse nested if in wrapup generate
Some checks failed
CI / Check / Test (push) Failing after 44s
2026-06-02 22:20:29 +02:00
ea43911984 feat: wire real wrapup adapters into presentation + worker 2026-06-02 22:19:29 +02:00
5a15bea3d4 feat: wrap-up REST API endpoints 2026-06-02 22:17:11 +02:00
5e740ba2a1 fix: add async_trait + exhaustive match for wrapup events in tests 2026-06-02 22:14:50 +02:00
7ef8912d69 feat: wrapup worker handler + auto-generate job 2026-06-02 22:13:08 +02:00
ac05cdfeaf fix: add WrapUp events to NATS subject mapping 2026-06-02 22:09:57 +02:00
b171d2d1e2 feat(application): wrapup generate/get/list use cases 2026-06-02 22:09:08 +02:00
59b42ce810 feat: add WrapUpRequested/Completed domain events 2026-06-02 22:06:06 +02:00
5a6abdcc23 feat(adapters): WrapUpStatsQuery + WrapUpRepository for postgres/sqlite 2026-06-02 22:04:46 +02:00
a95d831fd1 feat(domain): add WrapUpRecord, WrapUpRepository port 2026-06-02 21:59:47 +02:00
4c75113c4f chore: wire WrapUpStatsQuery panic stub into binaries
Some checks failed
CI / Check / Test (push) Failing after 44s
2026-06-02 21:49:54 +02:00
8fec989dc6 test(wrapup): unit tests for stats computation 2026-06-02 21:46:51 +02:00
8c31a2b829 feat(application): add wrapup stats computation engine 2026-06-02 21:44:46 +02:00
4df78221a8 feat(domain): add WrapUpStatsQuery port and in-memory fake 2026-06-02 21:42:15 +02:00
e8b2d4f7ee feat(domain): add WrapUpReport model and supporting types 2026-06-02 21:40:43 +02:00
c878c0358f fix: add 403 response to confirm/dismiss OpenAPI annotations
Some checks failed
CI / Check / Test (push) Failing after 6m22s
2026-06-02 21:06:22 +02:00
4067dedb28 refactor: add DomainError::Forbidden + centralize error-to-HTTP mapping
Ownership checks (delete_review, confirm/dismiss watch events) now
return Forbidden instead of Unauthorized. Presentation layer maps
DomainError→StatusCode via domain_error_response helper, replacing
verbose per-handler match arms.
2026-06-02 21:00:22 +02:00
28170c95d4 chore: fmt + remove dead federation module
Some checks failed
CI / Check / Test (push) Failing after 5m58s
2026-06-02 20:44:08 +02:00
62fd6682c6 refactor: extract view-model mappers from presentation handlers
Some checks failed
CI / Check / Test (push) Has been cancelled
Move mapping logic (domain→DTO/template structs) into mappers/ module.
Handlers now call mapper fns instead of inline conversions.
2026-06-02 20:43:33 +02:00
b9210b6c4e fix: batch N+1 queries in import duplicate check and watch event dismiss
Some checks failed
CI / Check / Test (push) Failing after 5m54s
apply_mapping: 2 batch queries instead of up to 2N per-row lookups
dismiss: single fetch + single update instead of 2N per-event queries
2026-06-02 20:05:15 +02:00
ac7edd6953 WIP: federation + integrations
Some checks failed
CI / Check / Test (push) Failing after 5m56s
2026-06-02 19:50:19 +02:00
dcc9244d4e refactor: group use cases into DDD bounded contexts
Flat use_cases/ (44 files) + monolithic commands.rs/queries.rs
split into diary/, movies/, watchlist/, import/, auth/, users/,
integrations/, search/, person/, federation/ — each with own
commands.rs, queries.rs, and use case modules.

Inline tests extracted to sibling tests/ dirs.
2026-06-02 19:49:09 +02:00
aadad3cfb0 feat: Jellyfin/Plex auto-import via watch queue
Some checks failed
CI / Check / Test (push) Failing after 6m5s
Webhook ingestion from media servers — movies land in a pending
watch queue, user rates and confirms to create diary entries.

- domain: WatchEvent, WebhookToken models, MediaServerParser port
- adapters: jellyfin + plex parser crates, SQLite + Postgres repos
- application: ingest/confirm/dismiss/cleanup use cases, token mgmt
- presentation: webhook endpoints (bearer + query param auth),
  watch queue + integrations settings HTML pages, OpenAPI docs
- worker: WatchEventCleanupJob (daily, 30d retention)

Movie resolution deferred to confirm — single canonical path
through log_review for enrichment, poster fetch, federation.
2026-06-02 17:34:16 +02:00