This website requires JavaScript.
7faf14fb2f
docs: update project description to reflect current scope
master
Gabriel Kaszewski
2026-06-12 12:53:15 +02:00
ddb5966c9b
docs: mention Insomnia collection in API section
Gabriel Kaszewski
2026-06-12 12:51:24 +02:00
4ec231017e
docs: badges, TOC, quick start, env var table, screenshots
Gabriel Kaszewski
2026-06-12 12:46:31 +02:00
fab236688b
screenshots
Gabriel Kaszewski
2026-06-12 12:31:13 +02:00
4683a408d7
fix(spa): use import type for UpdateUserSettingsRequest
Gabriel Kaszewski
2026-06-12 02:29:50 +02:00
6d4c70553a
fix: remove unused UserFederationSettingsQuery import in worker/db.rs
Gabriel Kaszewski
2026-06-12 02:28:02 +02:00
ca7ca51949
feat: per-entity federation privacy toggles for reviews and watchlist
Gabriel Kaszewski
2026-06-12 02:26:01 +02:00
33aa5bdab3
fmt
Gabriel Kaszewski
2026-06-12 01:46:16 +02:00
b844339795
fix(domain): ImportSession::new() generates own ID, add from_persistence()
Gabriel Kaszewski
2026-06-12 01:41:03 +02:00
cedb13d7a8
fix(domain): typed VOs in MovieEnrichmentRequested and PersonEnrichmentRequested
Gabriel Kaszewski
2026-06-12 01:34:47 +02:00
aec5f6b058
feat(dependencies): add async-stream and bytes to Cargo.toml and Cargo.lock refactor(adapters): update diary.rs to use BoxStream from futures
Gabriel Kaszewski
2026-06-12 01:20:45 +02:00
d9234ecd11
fix(presentation): log errors in diary export stream
Gabriel Kaszewski
2026-06-12 01:18:54 +02:00
010ee404c8
feat(presentation): pipe diary export stream to Body::from_stream
Gabriel Kaszewski
2026-06-12 01:15:23 +02:00
d4c42f8567
feat(application): export_diary::execute returns BoxStream<Bytes>
Gabriel Kaszewski
2026-06-12 01:11:36 +02:00
9c44330f14
feat(adapters): stream_user_history in SQLite and Postgres diary adapters
Gabriel Kaszewski
2026-06-12 01:10:21 +02:00
2fa118570f
feat(export): stream_entries — CSV/JSON streaming via BoxStream<Bytes>
Gabriel Kaszewski
2026-06-12 01:08:11 +02:00
ded7517a8a
feat(domain): DiaryRepository::stream_user_history, DiaryExporter::stream_entries
Gabriel Kaszewski
2026-06-12 01:05:32 +02:00
bf272bf8d9
perf(import): parallelize row processing with JoinSet + Semaphore (limit 10)
Gabriel Kaszewski
2026-06-12 00:40:27 +02:00
6f34b7b5ec
fix(worker): nack on transient handler failures, ack on permanent
Gabriel Kaszewski
2026-06-12 00:30:06 +02:00
17d4de461b
feat(domain): DomainError::is_transient() for retry classification
Gabriel Kaszewski
2026-06-12 00:27:16 +02:00
40cb15e7cb
refactor(postgres): split fat PostgresRepository into per-port structs
Gabriel Kaszewski
2026-06-12 00:00:15 +02:00
c80287bb9e
refactor(presentation): use split sqlite repos in api_test
Gabriel Kaszewski
2026-06-11 23:52:14 +02:00
06ab5c8df1
refactor(sqlite): split fat SqliteMovieRepository into per-port structs
Gabriel Kaszewski
2026-06-11 23:49:55 +02:00
57520c00f3
refactor: move AppContext to presentation crate, structurally enforce boundary
Gabriel Kaszewski
2026-06-11 23:18:28 +02:00
b5cc7f8371
refactor(search): fix test to not use AppContext
Gabriel Kaszewski
2026-06-11 23:00:01 +02:00
9ca5ada924
refactor(auth): LoginDeps, RegisterDeps, RefreshDeps, RegisterAndLoginDeps, RefreshSessionCleanupJob
Gabriel Kaszewski
2026-06-11 22:58:42 +02:00
70d1f10e3d
refactor(users): fix test files to not use AppContext
Gabriel Kaszewski
2026-06-11 22:49:44 +02:00
61980b0cfb
refactor(users): GetProfileDeps, UpdateProfileDeps, scoped Arc deps
Gabriel Kaszewski
2026-06-11 22:47:17 +02:00
7bf5c47f5b
refactor(diary): DeleteReviewDeps, GetMovieSocialPageDeps, GetActivityFeedDeps
Gabriel Kaszewski
2026-06-11 22:37:35 +02:00
ddf100cfc2
refactor(wrapup): scoped deps — HandleWrapUpRequestedDeps, flat-Arc jobs
Gabriel Kaszewski
2026-06-11 22:29:30 +02:00
cdff0de53d
refactor(movies): collapse single-field deps structs to Arc params
Gabriel Kaszewski
2026-06-11 22:17:09 +02:00
1e62f12903
refactor(movies): EnrichMovieDeps, ReindexSearchDeps, SyncPosterDeps, SearchReindexHandler, EnrichmentStalenessJob
Gabriel Kaszewski
2026-06-11 22:13:25 +02:00
66bd138927
refactor(person): EnrichPersonDeps + GetPersonDeps, PersonEnrichmentHandler
Gabriel Kaszewski
2026-06-11 22:05:38 +02:00
b29f3020e6
refactor(integrations): IngestWatchEventDeps, scoped Arc deps, WatchEventCleanupJob
Gabriel Kaszewski
2026-06-11 22:01:15 +02:00
76edd52bb0
refactor(import): fix test files to not use AppContext
Gabriel Kaszewski
2026-06-11 21:51:24 +02:00
b5ff43d9dc
refactor(import): scoped Arc deps, ImportSessionCleanupJob
Gabriel Kaszewski
2026-06-11 21:49:15 +02:00
b552c1d156
refactor(watchlist): WatchlistAddDeps, scoped Arc deps
Gabriel Kaszewski
2026-06-11 21:40:48 +02:00
f006ba00a8
refactor(goals): scoped Arc deps instead of AppContext
Gabriel Kaszewski
2026-06-11 21:36:11 +02:00
2b295e10ba
refactor(search): scoped Arc dep instead of AppContext
Gabriel Kaszewski
2026-06-11 21:32:19 +02:00
20ac0d3adf
fmt
Gabriel Kaszewski
2026-06-11 14:44:53 +02:00
8ac87a3735
refactor: split jobs.rs into per-context modules
Gabriel Kaszewski
2026-06-11 14:44:23 +02:00
4f0f44dec3
test: refresh token rotation, logout revocation, login refresh token
Gabriel Kaszewski
2026-06-11 14:42:39 +02:00
96c753c2c6
spa: silent refresh on 401, persistent login
Gabriel Kaszewski
2026-06-11 14:39:10 +02:00
822f3f9d9c
api: refresh + logout endpoints, update login response
Gabriel Kaszewski
2026-06-11 14:37:09 +02:00
55feaa353f
app: refresh/logout use cases, update login with refresh token
Gabriel Kaszewski
2026-06-11 14:35:53 +02:00
3a3f3b3889
db: refresh_sessions migration + SQLite/Postgres adapters
Gabriel Kaszewski
2026-06-11 14:31:46 +02:00
ef9ecbae06
domain: add RefreshSession model + repository port
Gabriel Kaszewski
2026-06-11 14:29:43 +02:00
db285b513b
fix: swap import/export icons
Gabriel Kaszewski
2026-06-11 14:13:51 +02:00
2617c77b42
feat: add arrow navigation to horizontal scroll strips
Gabriel Kaszewski
2026-06-11 14:12:42 +02:00
e618e1aa84
feat: horizontal poster strip for person filmography
Gabriel Kaszewski
2026-06-11 14:10:20 +02:00
7dc372a7b6
feat: redesign person page with Cards, SwipeTabs, collapsible bio
Gabriel Kaszewski
2026-06-11 14:07:27 +02:00
e39fcf6802
feat: show person age calculated from birthday
Gabriel Kaszewski
2026-06-11 14:04:52 +02:00
b09ef4686a
fmt
Gabriel Kaszewski
2026-06-11 14:03:05 +02:00
2074a2244e
refactor: move person enrichment staleness check to application layer
Gabriel Kaszewski
2026-06-11 14:01:44 +02:00
338ecb71c8
perf: reduce worker concurrency to 4 to ease SQLite write contention
Gabriel Kaszewski
2026-06-11 13:55:48 +02:00
8cb90b256c
fix: guard also_known_as access when undefined
Gabriel Kaszewski
2026-06-11 13:52:44 +02:00
c05087a6c7
fmt
Gabriel Kaszewski
2026-06-11 13:51:33 +02:00
0fdc79af23
fix: add enrichment columns to test schema
Gabriel Kaszewski
2026-06-11 13:51:14 +02:00
262ba5ca39
fix: collapse nested if per clippy
Gabriel Kaszewski
2026-06-11 13:48:08 +02:00
57c720b22f
fix: collapse nested if per clippy
Gabriel Kaszewski
2026-06-11 13:47:32 +02:00
53b7f730cb
refactor: drop EnrichmentHandler alias, use MovieEnrichmentHandler directly
Gabriel Kaszewski
2026-06-11 13:46:30 +02:00
e8fa24bf9b
refactor: split tmdb-enrichment into client, movie_handler, person_handler
Gabriel Kaszewski
2026-06-11 13:46:00 +02:00
7437ed89ad
fix: handle PersonEnrichmentRequested in test fakes
Gabriel Kaszewski
2026-06-11 13:43:37 +02:00
b2a41db290
feat: rich person detail page with bio, dates, links
Gabriel Kaszewski
2026-06-11 13:42:04 +02:00
9b932cde8e
feat: wire person enrichment handler, update API DTOs
Gabriel Kaszewski
2026-06-11 13:40:16 +02:00
a68e19aad7
feat: TMDB person enrichment client + event handler
Gabriel Kaszewski
2026-06-11 13:38:07 +02:00
371a3cdc46
app: person enrichment use case + staleness checks
Gabriel Kaszewski
2026-06-11 13:36:43 +02:00
517a18da8a
db: person enrichment migrations + adapter updates
Gabriel Kaszewski
2026-06-11 13:34:10 +02:00
7df24a19ee
domain: add person enrichment fields, event, port
Gabriel Kaszewski
2026-06-11 13:30:19 +02:00
549923b92e
feat: show relative watched date and comment preview in profile entries
Gabriel Kaszewski
2026-06-11 13:03:49 +02:00
3cbb406ea7
feat: add export route to settings in route tree
Gabriel Kaszewski
2026-06-11 13:01:12 +02:00
21cc6ed437
fix: move useDocumentTitle before early returns (Rules of Hooks)
Gabriel Kaszewski
2026-06-11 12:59:13 +02:00
5dc90724d3
feat: JSON import + mapping presets in SPA
Gabriel Kaszewski
2026-06-11 12:58:08 +02:00
9a894c3a95
refactor: move export to its own settings page under Data group
Gabriel Kaszewski
2026-06-11 12:46:46 +02:00
acc20d2f43
feat: dynamic page titles across SPA
Gabriel Kaszewski
2026-06-11 12:45:01 +02:00
a95be0b131
feat: add search input on user profile pages
Gabriel Kaszewski
2026-06-11 12:39:14 +02:00
f10b114e83
feat: expose search param on user profile API endpoint
Gabriel Kaszewski
2026-06-11 12:37:20 +02:00
c020135cd1
feat: move diary export to settings page with CSV/JSON options
Gabriel Kaszewski
2026-06-11 12:36:03 +02:00
ad55897871
i18n: add export and profile search translations
Gabriel Kaszewski
2026-06-11 12:34:29 +02:00
87fcdc12ca
clean up
Gabriel Kaszewski
2026-06-10 11:02:18 +02:00
d14199813f
perf: optimize compile times
Gabriel Kaszewski
2026-06-10 03:33:48 +02:00
f52219b2b7
docs: update architecture diagram — add domain services, Password VO
Gabriel Kaszewski
2026-06-10 03:25:14 +02:00
6e21ec115d
fmt
Gabriel Kaszewski
2026-06-10 03:24:17 +02:00
deae83cfd1
fix: Password uses char count not byte length, redact Debug output, tighten test assertion
Gabriel Kaszewski
2026-06-10 03:23:23 +02:00
c4d6b68ef9
refactor: enforce password min-length via domain Password value object
Gabriel Kaszewski
2026-06-10 03:15:43 +02:00
d8cff33679
refactor: move profile-field count validation into domain UserProfile
Gabriel Kaszewski
2026-06-10 03:13:19 +02:00
e9aa6131ae
refactor: extract wrapup analytics into domain::services::wrapup_analyzer
Gabriel Kaszewski
2026-06-10 03:10:44 +02:00
43f6c5679d
fmt
Gabriel Kaszewski
2026-06-10 02:56:56 +02:00
956e51530e
refactor: move domain inline tests to separate files under tests/
Gabriel Kaszewski
2026-06-10 02:55:47 +02:00
b882569ee1
fix: use correct i18n key for comment placeholder in queue tab
Gabriel Kaszewski
2026-06-10 02:47:04 +02:00
5dbc02b58f
fix: remove .sqlx copy from Dockerfile
Gabriel Kaszewski
2026-06-10 02:41:59 +02:00
d389e26e39
fix: broadcast goal progress on review log, fix goal handler security gaps
Gabriel Kaszewski
2026-06-10 02:40:25 +02:00
05d062f4e0
fmt
Gabriel Kaszewski
2026-06-09 02:31:02 +02:00
70b3ca0f5c
refactor: split domain models, move presentation logic out of app layer
Gabriel Kaszewski
2026-06-09 02:29:11 +02:00
ac03182aa6
docs: add ReviewLogger to architecture diagram
Gabriel Kaszewski
2026-06-09 02:17:49 +02:00
6d3182525f
fmt
Gabriel Kaszewski
2026-06-09 02:16:18 +02:00
7bcbc59587
fix: implement get_all_reviews_for_user, add crate metadata
Gabriel Kaszewski
2026-06-09 02:12:35 +02:00
d867a14b28
add 400+ unit tests for domain and application layers
Gabriel Kaszewski
2026-06-09 02:07:26 +02:00
30a6200b5b
remove wrapup video rendering (ffmpeg)
Gabriel Kaszewski
2026-06-09 00:36:44 +02:00
f4fd915e35
refactor: replace sqlx compile-time macros with runtime queries
Gabriel Kaszewski
2026-06-09 00:19:02 +02:00