feat: image storage generalization, user profile, and federation polish

- Replace PosterStorage with generic ImageStorage port (IMAGE_STORAGE_BACKEND/PATH env vars)
- Rename poster-storage crate to image-storage; serve at /images/{*key}
- Add bio and avatar_path to User model (migration 0009_user_profile)
- update_profile use case with avatar upload, mime validation, old avatar cleanup
- GET/PUT /api/v1/profile and GET/POST /settings/profile HTML page
- Enrich AP Person actor with summary, icon, url, discoverable fields
- Store remote actor avatar_url (migration 0010_ap_remote_actor_avatar)
- Shared inbox delivery via collect_inboxes deduplication
- Broadcast Update(Person) to followers on UserUpdated event
- Paginated outbox: OrderedCollection + OrderedCollectionPage with cursor
- Announce/boost tracking in ap_announces table (migration 0011_ap_announces)
This commit is contained in:
2026-05-11 22:59:52 +02:00
parent 8a254346f4
commit 80f620c840
89 changed files with 2231 additions and 499 deletions

32
Cargo.lock generated
View File

@@ -2399,6 +2399,20 @@ dependencies = [
"icu_properties",
]
[[package]]
name = "image-storage"
version = "0.1.0"
dependencies = [
"anyhow",
"async-trait",
"domain",
"infer",
"object_store",
"tokio",
"tracing",
"uuid",
]
[[package]]
name = "impl-more"
version = "0.1.9"
@@ -3424,20 +3438,6 @@ dependencies = [
"reqwest 0.13.3",
]
[[package]]
name = "poster-storage"
version = "0.1.0"
dependencies = [
"anyhow",
"async-trait",
"domain",
"infer",
"object_store",
"tokio",
"tracing",
"uuid",
]
[[package]]
name = "poster-sync"
version = "0.1.0"
@@ -3539,13 +3539,13 @@ dependencies = [
"dotenvy",
"export",
"http-body-util",
"image-storage",
"importer",
"infer",
"metadata",
"nats",
"percent-encoding",
"poster-fetcher",
"poster-storage",
"postgres",
"postgres-event-queue",
"postgres-federation",
@@ -6340,11 +6340,11 @@ dependencies = [
"dotenvy",
"export",
"futures",
"image-storage",
"importer",
"metadata",
"nats",
"poster-fetcher",
"poster-storage",
"poster-sync",
"postgres",
"postgres-event-queue",