29cc68b07c
feat: add WatchMedium field, general review editing, configurable deploy
...
CI / Check / Test (push) Failing after 27m0s
- WatchMedium enum (cinema/streaming/tv/physical_media/download/media_server/other)
- PATCH /api/v1/reviews/:id partial update (rating, comment, watched_at, watch_medium)
- edit_review use case w/ ownership + remote review guard, best-effort AP Update broadcast
- SPA: icon picker, edit sheet (long-press mobile / pencil desktop), watch medium badge
- shared ReviewFormFields, EditableContextMenu, parse_watched_at/format_watched_at
- deploy.sh parameterized (--features, --tag), CORS allows PATCH
- CONTEXT.md glossary, ADR-0001 general review editing
2026-07-10 00:01:14 +02:00
9794babe06
feat: implement federated profile handling with support for remote actor URLs across multiple components
CI / Check / Test (push) Successful in 1h7m53s
2026-07-01 00:13:28 +02:00
d7fbf8d9e2
feat: enhance review handling by adding actor URL support across multiple components
CI / Check / Test (push) Successful in 1h3m53s
2026-06-30 03:34:52 +02:00
9f6ba55afc
fix: update SQL queries to filter reviews with null remote_actor_url
2026-06-30 02:57:58 +02:00
5ae38c834a
making it AP complaint
CI / Check / Test (push) Has been cancelled
2026-06-30 02:25:42 +02:00
943a0abe54
refactor: reorganize HtmlPageContext and update imports across modules
CI / Check / Test (push) Failing after 46m33s
2026-06-30 00:07:20 +02:00
9c06fbd33e
refactor
2026-06-29 23:54:59 +02:00
bb17beb80d
restructure
2026-06-29 23:38:53 +02:00
6d4c70553a
fix: remove unused UserFederationSettingsQuery import in worker/db.rs
2026-06-12 02:28:02 +02:00
ca7ca51949
feat: per-entity federation privacy toggles for reviews and watchlist
...
- add federate_reviews + federate_watchlist to UserSettings (default true)
- new UserFederationSettingsQuery port with FederationFlags struct
- remove get_user_federate_goals from LocalApContentQuery
- gate ReviewLogged, ReviewUpdated, WatchlistEntryAdded, on_poster_synced on flags
- goals gating migrated to UserFederationSettingsQuery
- ReviewDeleted and WatchlistEntryRemoved ungated (tombstones always fire)
- sqlite + postgres migrations and adapter impls
- settings API and SPA toggles
2026-06-12 02:26:01 +02:00
33aa5bdab3
fmt
CI / Check / Test (push) Successful in 38m21s
2026-06-12 01:46:16 +02:00
b844339795
fix(domain): ImportSession::new() generates own ID, add from_persistence()
2026-06-12 01:41:03 +02:00
cedb13d7a8
fix(domain): typed VOs in MovieEnrichmentRequested and PersonEnrichmentRequested
2026-06-12 01:34:47 +02:00
aec5f6b058
feat(dependencies): add async-stream and bytes to Cargo.toml and Cargo.lock
...
CI / Check / Test (push) Has been cancelled
refactor(adapters): update diary.rs to use BoxStream from futures
2026-06-12 01:20:45 +02:00
9c44330f14
feat(adapters): stream_user_history in SQLite and Postgres diary adapters
2026-06-12 01:10:21 +02:00
2fa118570f
feat(export): stream_entries — CSV/JSON streaming via BoxStream<Bytes>
2026-06-12 01:08:11 +02:00
40cb15e7cb
refactor(postgres): split fat PostgresRepository into per-port structs
CI / Check / Test (push) Has been cancelled
2026-06-12 00:00:15 +02:00
06ab5c8df1
refactor(sqlite): split fat SqliteMovieRepository into per-port structs
2026-06-11 23:49:55 +02:00
57520c00f3
refactor: move AppContext to presentation crate, structurally enforce boundary
CI / Check / Test (push) Successful in 39m33s
2026-06-11 23:18:28 +02:00
1e62f12903
refactor(movies): EnrichMovieDeps, ReindexSearchDeps, SyncPosterDeps, SearchReindexHandler, EnrichmentStalenessJob
2026-06-11 22:13:25 +02:00
66bd138927
refactor(person): EnrichPersonDeps + GetPersonDeps, PersonEnrichmentHandler
2026-06-11 22:05:38 +02:00
8ac87a3735
refactor: split jobs.rs into per-context modules
2026-06-11 14:44:23 +02:00
55feaa353f
app: refresh/logout use cases, update login with refresh token
2026-06-11 14:35:53 +02:00
3a3f3b3889
db: refresh_sessions migration + SQLite/Postgres adapters
2026-06-11 14:31:46 +02:00
b09ef4686a
fmt
2026-06-11 14:03:05 +02:00
2074a2244e
refactor: move person enrichment staleness check to application layer
2026-06-11 14:01:44 +02:00
c05087a6c7
fmt
2026-06-11 13:51:33 +02:00
0fdc79af23
fix: add enrichment columns to test schema
2026-06-11 13:51:14 +02:00
262ba5ca39
fix: collapse nested if per clippy
2026-06-11 13:48:08 +02:00
53b7f730cb
refactor: drop EnrichmentHandler alias, use MovieEnrichmentHandler directly
2026-06-11 13:46:30 +02:00
e8fa24bf9b
refactor: split tmdb-enrichment into client, movie_handler, person_handler
2026-06-11 13:46:00 +02:00
a68e19aad7
feat: TMDB person enrichment client + event handler
2026-06-11 13:38:07 +02:00
517a18da8a
db: person enrichment migrations + adapter updates
2026-06-11 13:34:10 +02:00
7df24a19ee
domain: add person enrichment fields, event, port
2026-06-11 13:30:19 +02:00
87fcdc12ca
clean up
CI / Check / Test (push) Successful in 37m41s
2026-06-10 11:02:18 +02:00
d389e26e39
fix: broadcast goal progress on review log, fix goal handler security gaps
...
CI / Check / Test (push) Has been cancelled
- Broadcast GoalUpdated AP note after ReviewLogged so federated goal
progress reflects the new review count without requiring a manual goal edit
- Add attribution check in GoalObjectHandler::on_update (mirrors
review_handler) to prevent any remote actor from overwriting another's goal
- Implement on_actor_removed in GoalObjectHandler via new
RemoteGoalRepository::remove_all_by_actor — remote goals were never
cleaned up when an actor unfollowed or was deleted
- Add remove_all_by_actor to SQLite, Postgres, Noop, and test Panic impls
2026-06-10 02:40:25 +02:00
70b3ca0f5c
refactor: split domain models, move presentation logic out of app layer
...
CI / Check / Test (push) Failing after 47s
Split domain/models/mod.rs (630 lines) into focused files:
movie.rs, review.rs, user.rs, stats.rs, enrichment.rs, feed.rs.
Move URL/date formatting from application use cases to
presentation mappers — use cases now return raw domain data.
Delete watchlist/get_page.rs (was pure presentation logic),
replace with presentation/mappers/watchlist.rs.
Document signature conventions in CONTRIBUTING.md.
2026-06-09 02:29:11 +02:00
6d3182525f
fmt
CI / Check / Test (push) Has been cancelled
2026-06-09 02:16:18 +02:00
7bcbc59587
fix: implement get_all_reviews_for_user, add crate metadata
...
CI / Check / Test (push) Failing after 43s
Replace todo!() stubs in sqlite/postgres adapters with
actual queries. Add description+license to presentation crate.
2026-06-09 02:12:35 +02:00
30a6200b5b
remove wrapup video rendering (ffmpeg)
...
CI / Check / Test (push) Successful in 15m34s
SPA handles wrapup visuals client-side; server-side
renderer was dead code pulling in ffmpeg + image crates.
2026-06-09 00:36:44 +02:00
f4fd915e35
refactor: replace sqlx compile-time macros with runtime queries
...
CI / Check / Test (push) Failing after 44s
No longer requires DATABASE_URL at build time.
2026-06-09 00:19:02 +02:00
fff5f4af2f
feat: goals — "watch N movies in YEAR" with progress bar
...
Domain: Goal entity, UserSettings (federation toggle), RemoteGoalEntry.
Ports: GoalRepository, UserSettingsRepository, RemoteGoalRepository.
Adapters: sqlite + postgres repos, migrations, AP content query extensions.
Application: CRUD use cases (create/update/delete/get/list), settings use cases.
API: 7 endpoints (/goals CRUD, /users/{id}/goals, /settings) with utoipa docs.
Federation: GoalObject (Note + goal discriminator), outbound broadcast with
per-user toggle, inbound GoalObjectHandler in CompositeObjectHandler.
SPA: API client + hooks, GoalCard (shadcn Card+Progress+DropdownMenu),
GoalSheet (Drawer), profile integration (editable own, read-only others),
federation toggle in settings (Switch).
Classic HTML: glassmorphic goal card on profile, Frutiger Aero styling.
Progress computed from existing reviews — backwards compatible.
2026-06-08 22:37:52 +02:00
4dacbbfded
fix: update poster_url on remote review Update activity
...
CI / Check / Test (push) Successful in 21m35s
on_update was ignoring posterUrl from the AP note, so remote instances
never got the poster even after receiving the Update.
2026-06-04 23:21:19 +02:00
886f26c7dc
fix: broadcast AP Update after poster sync to fix missing posters on remote instances
...
CI / Check / Test (push) Has been cancelled
New movies had no poster at AP broadcast time (race between poster sync
and ReviewLogged handler). PosterSynced event now fires after sync
completes, triggering Update notes so remote apps get the poster URL.
2026-06-04 23:12:27 +02:00
237f1e7d32
style: fmt persons test
CI / Check / Test (push) Successful in 16m49s
2026-06-04 17:59:05 +02:00
c647f4c13b
fix: clippy 1.96 lints — map_or, duplicate_mod, needless_borrows, slice_refs
CI / Check / Test (push) Failing after 44s
2026-06-04 17:58:01 +02:00
7e8a1b8379
feat: batteries-included deployment — compose, .env.example, sane defaults
CI / Check / Test (push) Failing after 6m21s
2026-06-04 17:32:34 +02:00
49728f8cd7
fix: fall back to converted extensions in object storage get
CI / Check / Test (push) Failing after 6m36s
2026-06-04 16:22:57 +02:00
5334312d64
refactor: extract reindex + enrichment logic from handlers into use cases
CI / Check / Test (push) Failing after 6m45s
2026-06-04 16:09:35 +02:00
dacc057af6
fix: lazy-load wrapup backgrounds, cap sqlite pool to 4 connections
...
CI / Check / Test (push) Failing after 6m32s
backgrounds were decoded to RGBA at startup (~173MB for 9 images).
now only store paths, decode on demand during video generation.
2026-06-04 14:57:47 +02:00