Commit Graph

130 Commits

Author SHA1 Message Date
31f5d5f337 feat: user tombstone and retired usernames 2026-10-26 02:03:36 +01:00
bde8040cc3 watchlist add: event only if inserted; adr 0015 jetstream/relay accuracy; drop vacuous assert 2026-10-26 01:56:38 +01:00
fe9f284531 sqlite ack/nack/defer only if claim still held; use shared backoff 2026-10-26 01:52:28 +01:00
0908b7046a fix(sqlite): concurrent migrate retries 2026-10-26 01:40:40 +01:00
7f9c252d35 fix: NewRemoteReview param struct, atomic review+orphan movie delete 2026-10-26 01:19:09 +01:00
9a4d0c1714 feat: atomic social local writes, remote review enrichment
SocialCommand methods take events. Local follow ops = one FollowCommand::apply
tx (rows + events). k_ap path (remote, block/unblock): best-effort publish in
CompositeSocialAdapter after k_ap write; not atomic, k_ap owns tx.
save_remote_review takes events, enqueued in same tx via
sqlite::persistence::enqueue_events. Deps drop event_publisher: social
command, ReviewObjectHandler.

Remaining .publish( sites:
announce-only: users/delete_account UserDeleted, person/get + get_credits
PersonEnrichmentRequested, jobs/enrichment_staleness, http-axum search,
ImageStored (sync_poster, poster_sync_handler, image-converter backfill,
update_profile; object storage), federation_event_bridge (handler reaction),
nats relay (transport).
non-atomic by necessity: CompositeSocialAdapter::announce (k_ap-owned write).
Everything else rides its write.
2026-10-26 01:12:58 +01:00
6c295866a0 feat: atomic wrapup, movie, integration writes
Ride writes: WrapUpRequested/Completed (wrapup create/set_complete),
MovieDiscovered (resolve upsert, new+ext id only), PosterSynced (poster
handler upsert), MovieDeleted (delete_movie), WatchEventIngested (save).
Deps drop event_publisher: wrapup, ingest, delete_review, watchlist add,
review logger.

Remaining .publish( sites:
announce-only: users/delete_account UserDeleted, person/get +
get_credits PersonEnrichmentRequested, jobs/enrichment_staleness,
http-axum search, movies/sync_poster + poster_sync_handler +
image-converter backfill + users/update_profile ImageStored (object
storage), activitypub federation_event_bridge (reacting to events).
rides write, deferred: social/execute (see report),
activitypub review_handler MovieEnrichmentRequested (after
save_remote_review).
2026-10-26 01:02:34 +01:00
2f133afb96 fix: honest review update rollback test, goal delete NotFound fake, read before write 2026-10-26 00:52:45 +01:00
62ad9f4017 feat: atomic goal, watchlist, profile writes 2026-10-26 00:49:28 +01:00
c8a1e8bfe4 feat: atomic review writes with events 2026-10-26 00:40:43 +01:00
0236a488fa fix: defer blocked deliveries, claim owner token 2026-10-26 00:33:29 +01:00
53892847f2 fix: per-handler claim lease in ledger, nats max_deliver, pin handler names 2026-10-26 00:24:56 +01:00
5681d0c034 feat: processed-event ledger, idempotent dispatch 2026-10-26 00:17:28 +01:00
fa8e94817a fix: relay shutdown, claim lease, dead-letter undecodable, dedup window 2026-10-26 00:11:06 +01:00
32dfc84697 feat: event ids, outbox identity migration 2026-10-25 23:57:24 +01:00
c31aa033cc test: harden claim race test 2026-10-25 23:40:43 +01:00
b96f03f86f fix(sqlite): dedup clears old external id before canonical upsert 2026-10-25 23:39:04 +01:00
d073922308 fix(sqlite): atomic event queue claim 2026-10-25 23:39:04 +01:00
b7e69b69dc refactor: drop postgres leftovers, narrow bootstrap api 2026-10-25 23:25:16 +01:00
ec2760fd48 chore: drop unused deps 2026-10-25 23:19:19 +01:00
f6383d6c04 test: move sqlite tests to tests/
No inline exceptions; migrate via sqlite::migrate, renamed diary/social tests.
2026-10-25 22:40:53 +01:00
5256c6e851 test: refusing fakes, failure-path tests, shared panic stubs 2026-10-25 22:25:36 +01:00
06eec2feae test: cascading in-memory store 2026-10-25 22:19:24 +01:00
51d92e08a7 test: shared factories and command builders 2026-10-25 22:08:17 +01:00
9bf9342fc0 refactor: bootstrap crate, thin server/worker binaries 2026-10-25 21:16:38 +01:00
04f9c13625 refactor: adapters configured from config crate 2026-10-25 21:07:19 +01:00
ab4e4c3138 refactor: sqlite repositories per aggregate 2026-10-25 20:55:33 +01:00
67597ec9a6 refactor: merge sqlite adapter family into one crate 2026-10-25 20:48:30 +01:00
1ece8032ff test: track pre_merge.db fixture 2026-10-25 20:44:46 +01:00
f8fe49f739 test: pin migration ledger 2026-10-25 20:44:10 +01:00
18c179e14c chore: gate test helpers, code style, stricter clippy 2026-10-25 20:26:50 +01:00
4f3d99ec8e feature/spoiler-flag (#25)
Some checks failed
CI / Check / Test (push) Has been cancelled
Reviewed-on: #25
2026-10-25 18:52:11 +00:00
e303ae7f08 insights-correlations (#22)
Some checks failed
CI / Check / Test (push) Has been cancelled
Reviewed-on: #22
2026-10-12 18:56:55 +00:00
4d221e60de feat: favorite actors top-5 stat in profile trends
All checks were successful
CI / Check / Test (push) Successful in 1h5m14s
2026-08-09 20:59:18 +02:00
c9715baab8 structural refactor and codebase improvements 2026-08-09 14:58:14 +02:00
587dcc04de feat: richer profile stats, wrapup min-count filter, watch medium distribution
Some checks failed
CI / Check / Test (push) Has been cancelled
- filter wrapup top directors/actors with count < 2
- add watch_medium to wrapup report + adapters
- profile trends: genre breakdown, rating histogram, watch medium dist
- fix unused StarDisplay import in movie detail
2026-07-10 21:38:08 +02:00
0eb56c2be6 fmt
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-07-10 05:45:44 +02:00
c224cc6bd2 refactor: extract adapter-common crate — shared sqlx error mapping,
row-to-domain conversions, date/uuid utils

Eliminates 39 map_err copies, consolidates parse_uuid/parse_datetime/
datetime_to_str/format_year_month, extracts 7 shared row-to-domain
conversion functions (movie, review, watchlist, stats, user_summary).
Row structs stay per-adapter (FromRow is db-specific), only conversion
logic is shared. Net -281 lines.
2026-07-10 05:44:42 +02:00
6a9b4e5c00 refactor: LOW+MEDIUM cleanups — CQRS DiaryQuery/GoalCommand+GoalQuery,
test-helpers out of production, decompose get_user_profile_html,
dedup secure_flag, remove vestigial social_query, drop
PersistedImportSession, LoginCommand rename, DeleteAccountDeps,
PersonId macro, ReviewSortBy rename, TUI Command for fs::read,
generic PaginatedResponse<T>, noop ports for production fallbacks
2026-07-10 05:29:02 +02:00
5e0dde656c refactor: LOW cleanups — dedup secure_flag, remove vestigial social_query,
drop PersistedImportSession, rename LoginQuery→LoginCommand, own
DeleteAccountDeps, PersonId via uuid_id! macro, rename SortDirection→
ReviewSortBy, TUI fs::read→Command, generic PaginatedResponse<T>
2026-07-10 05:04:35 +02:00
dee013c7eb refactor: remaining MEDIUM — CQRS splits, DI Deps, profile dedup, event Value, response enum
M1: MovieRepository→MovieCommand/MovieQuery, WatchEventRepository→
WatchEventCommand/WatchEventQuery
M2: goals/ and import/ use Deps structs
M7: extract upload_image helper in update_profile
M8: FederationDeliveryRequested activity_json String→serde_json::Value
M11: UserProfileResponse uses ProfileViewData enum
2026-07-10 03:50:43 +02:00
12da356a40 refactor: fix HIGH+MEDIUM architectural violations from code review
HIGH: fix watch_medium data-loss bug, standardize error handling on
ApiError, fix dep direction (rss/template-askama no longer dep on
application), extract ImageFetcher port (remove reqwest from app layer),
move event construction from save_review to use case, extract
infra-wiring crate (DbPool/EventBusBackend dedup), deduplicate
presentation helpers (encode_error, export streaming, multipart parsing)

MEDIUM: split LocalApContentQuery god-trait 10→3 methods, dedup movie
resolution orchestration, add RemoteActorDto/PersonDto mappers, move
AppConfig to infra-wiring, fix SocialQueryPort Uuid→UserId, replace
stringly-typed api-types with domain enums, move count_reviews_in_year
to StatsRepository, dedup event publisher cfg blocks, extract
should_enrich, move group_by_month to application, dedup
count_local_posts, add FederationFlags Default, TUI input helper +
ShowError rename + typed auth errors, api-types cleanup
(UserSettingsDto/UserProfileBase/PreviewRowData)

102 files changed, -681 lines net
2026-07-10 02:08:39 +02:00
2e2adef5e0 fix: profile shows only own reviews, federation display name in community
- diary API accepts user_id filter, profile page passes it
- movie social feed joins ap_remote_actors for handle resolution
- COALESCE prefers actor handle for remote reviews, email for local
2026-07-10 00:19:23 +02:00
29cc68b07c feat: add WatchMedium field, general review editing, configurable deploy
Some checks failed
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
All checks were successful
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
All checks were successful
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
Some checks failed
CI / Check / Test (push) Has been cancelled
2026-06-30 02:25:42 +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