Skip to content

feat(user-profile): reusable name + photo edit flow#1112

Merged
bmc08gt merged 4 commits into
code/cashfrom
feat/user-profile-edit-flow
Jul 21, 2026
Merged

feat(user-profile): reusable name + photo edit flow#1112
bmc08gt merged 4 commits into
code/cashfrom
feat/user-profile-edit-flow

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Stacked PR 4/5 — base: feat/blob-storage-coordinator

A reusable stepped flow for setting/replacing the display name and profile photo, drivable for either or both steps (edit vs first-time setup).

What

  • New :apps:flipcash:features:user-profile module, entered via AppRoute.UpdateUserProfile(includeName, includePhoto, ...).
  • Photo selection reads the source MIME type, moderates, uploads through BlobStorageCoordinator, then sets the picture; name entry moderates and sets the display name.
  • ProfileController merges the result into the local UserProfile so changes reflect immediately.
  • ContentReader gains MIME-type detection and format-aware, EXIF-stripped cache copies.

bmc08gt added 4 commits July 21, 2026 18:46
Adds the client wrapper for the BlobStorage gRPC service (direct-to-storage
presigned uploads): Api/Service/Repository/Controller, an HTTP BlobUploader,
the UploadTarget/UploadPolicy domain models + proto converters, error types,
and DI wiring. BlobStorageController.upload() coordinates the full handshake
(reserve -> PUT/POST -> complete -> poll until READY) behind one call, and
getUploadPolicy() exposes the accepted MIME/size constraints.

Covered by UploadPolicyTest and BlobStorageControllerTest.

Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
Makes the shared chat FeedOperations type-aware: feed(chatType) and
observeUnreadConversations(chatType) now take a required ChatType, and the
sync delegate merges the CONTACT_DM and TIP_DM feeds while only applying the
contact identity-drop to CONTACT_DM. Send flow consumes feed(CONTACT_DM); the
contact list carries a ConversationReference instead of a raw Conversation.

Session/nav rename the generic notificationUnreadCount to contactDmUnreadCount
now that unread is tracked per chat type.

Covered by FeedSyncCombinedFeedTest.

Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
Adds the app-layer BlobStorageCoordinator (new :apps:flipcash:shared:blob
module) wrapping BlobStorageController. It owns a DataStore-backed upload-policy
cache, exposes policy as a self-refreshing Flow (TTL + version invalidation),
and offers preloadPolicy()/upload(). The session controller preloads the
policy once the user is registered so photo selection can filter/validate
locally without a round-trip.

Covered by BlobStorageCoordinatorTest.

Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
Adds the :apps:flipcash:features:user-profile module — a stepped flow for
setting/replacing the display name and profile photo, drivable for either or
both steps (edit vs first-time setup) via AppRoute.UpdateUserProfile. Photo
selection reads the source MIME type, moderates, uploads through the
BlobStorageCoordinator, and sets the picture; name entry moderates and sets
the display name. ProfileController now merges the result into the local
UserProfile so the change is reflected immediately. ContentReader gains
MIME-type detection and format-aware, EXIF-stripped cache copies.

Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
@github-actions github-actions Bot added area: ui Compose UI, theme, components, resources area: network gRPC, connectivity, API, exchange rates area: build-system Gradle, convention plugins, build-logic type: feature New functionality labels Jul 21, 2026
Base automatically changed from feat/blob-storage-coordinator to code/cash July 21, 2026 23:12
@bmc08gt
bmc08gt merged commit 3f53261 into code/cash Jul 21, 2026
2 of 3 checks passed
@bmc08gt
bmc08gt deleted the feat/user-profile-edit-flow branch July 21, 2026 23:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: build-system Gradle, convention plugins, build-logic area: network gRPC, connectivity, API, exchange rates area: ui Compose UI, theme, components, resources type: feature New functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant