450 Commits

Author SHA1 Message Date
7faf14fb2f docs: update project description to reflect current scope
All checks were successful
CI / Check / Test (push) Successful in 43m3s
2026-06-12 12:53:15 +02:00
ddb5966c9b docs: mention Insomnia collection in API section
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-12 12:51:24 +02:00
4ec231017e docs: badges, TOC, quick start, env var table, screenshots
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-12 12:46:31 +02:00
fab236688b screenshots
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-12 12:31:13 +02:00
4683a408d7 fix(spa): use import type for UpdateUserSettingsRequest
All checks were successful
CI / Check / Test (push) Successful in 38m33s
2026-06-12 02:29:50 +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
All checks were successful
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
Some checks failed
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
d9234ecd11 fix(presentation): log errors in diary export stream 2026-06-12 01:18:54 +02:00
010ee404c8 feat(presentation): pipe diary export stream to Body::from_stream 2026-06-12 01:15:23 +02:00
d4c42f8567 feat(application): export_diary::execute returns BoxStream<Bytes> 2026-06-12 01:11:36 +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
ded7517a8a feat(domain): DiaryRepository::stream_user_history, DiaryExporter::stream_entries 2026-06-12 01:05:32 +02:00
bf272bf8d9 perf(import): parallelize row processing with JoinSet + Semaphore (limit 10)
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-12 00:40:27 +02:00
6f34b7b5ec fix(worker): nack on transient handler failures, ack on permanent
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-12 00:30:06 +02:00
17d4de461b feat(domain): DomainError::is_transient() for retry classification 2026-06-12 00:27:16 +02:00
40cb15e7cb refactor(postgres): split fat PostgresRepository into per-port structs
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-12 00:00:15 +02:00
c80287bb9e refactor(presentation): use split sqlite repos in api_test 2026-06-11 23:52:14 +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
All checks were successful
CI / Check / Test (push) Successful in 39m33s
2026-06-11 23:18:28 +02:00
b5cc7f8371 refactor(search): fix test to not use AppContext 2026-06-11 23:00:01 +02:00
9ca5ada924 refactor(auth): LoginDeps, RegisterDeps, RefreshDeps, RegisterAndLoginDeps, RefreshSessionCleanupJob 2026-06-11 22:58:42 +02:00
70d1f10e3d refactor(users): fix test files to not use AppContext 2026-06-11 22:49:44 +02:00
61980b0cfb refactor(users): GetProfileDeps, UpdateProfileDeps, scoped Arc deps 2026-06-11 22:47:17 +02:00
7bf5c47f5b refactor(diary): DeleteReviewDeps, GetMovieSocialPageDeps, GetActivityFeedDeps 2026-06-11 22:37:35 +02:00
ddf100cfc2 refactor(wrapup): scoped deps — HandleWrapUpRequestedDeps, flat-Arc jobs 2026-06-11 22:29:30 +02:00
cdff0de53d refactor(movies): collapse single-field deps structs to Arc params 2026-06-11 22:17:09 +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
b29f3020e6 refactor(integrations): IngestWatchEventDeps, scoped Arc deps, WatchEventCleanupJob 2026-06-11 22:01:15 +02:00
76edd52bb0 refactor(import): fix test files to not use AppContext 2026-06-11 21:51:24 +02:00
b5ff43d9dc refactor(import): scoped Arc deps, ImportSessionCleanupJob 2026-06-11 21:49:15 +02:00
b552c1d156 refactor(watchlist): WatchlistAddDeps, scoped Arc deps 2026-06-11 21:40:48 +02:00
f006ba00a8 refactor(goals): scoped Arc deps instead of AppContext 2026-06-11 21:36:11 +02:00
2b295e10ba refactor(search): scoped Arc dep instead of AppContext 2026-06-11 21:32:19 +02:00
20ac0d3adf fmt
All checks were successful
CI / Check / Test (push) Successful in 38m10s
2026-06-11 14:44:53 +02:00
8ac87a3735 refactor: split jobs.rs into per-context modules 2026-06-11 14:44:23 +02:00
4f0f44dec3 test: refresh token rotation, logout revocation, login refresh token 2026-06-11 14:42:39 +02:00
96c753c2c6 spa: silent refresh on 401, persistent login 2026-06-11 14:39:10 +02:00
822f3f9d9c api: refresh + logout endpoints, update login response 2026-06-11 14:37:09 +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
ef9ecbae06 domain: add RefreshSession model + repository port 2026-06-11 14:29:43 +02:00
db285b513b fix: swap import/export icons 2026-06-11 14:13:51 +02:00
2617c77b42 feat: add arrow navigation to horizontal scroll strips 2026-06-11 14:12:42 +02:00
e618e1aa84 feat: horizontal poster strip for person filmography 2026-06-11 14:10:20 +02:00