Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
    • Help
    • Submit feedback
    • Contribute to GitLab
  • Sign in
F
finwise-miniapp-be
  • Project
    • Project
    • Details
    • Activity
    • Releases
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • ThinhNC
  • finwise-miniapp-be
  • Merge Requests
  • !10

Merged
Opened Jul 28, 2026 by ThinhNC@ThinhNC
  • Report abuse
Report abuse

feat(wallet): add wallet management API and migration

Summary

  • Add authenticated wallet management APIs following the project layer structure: route → validation → controller → service → repository.
  • Enforce wallet ownership using the authenticated user ID.
  • Support wallet listing, creation, retrieval, updates, default selection, archiving, and restoration.
  • Preserve monetary precision by handling wallet balances as decimal strings.
  • Add serializable transactions with retry handling for default-wallet consistency.
  • Add a Wallet-specific Prisma migration and regenerate Prisma Client types.
  • Document all Wallet endpoints and schemas in Swagger.
  • Update agent guidelines to require migration-history and generated-client verification after Prisma changes.

API Changes

  • GET /api/v1/wallets
  • POST /api/v1/wallets
  • GET /api/v1/wallets/:id
  • PUT /api/v1/wallets/:id
  • PATCH /api/v1/wallets/:id/default
  • PATCH /api/v1/wallets/:id/restore
  • DELETE /api/v1/wallets/:id

DELETE archives the wallet instead of deleting it permanently. A default wallet must be replaced before it can be archived.

Database Changes

  • Add Wallet metadata fields: currency, icon, color, and description.
  • Add is_default and is_archived state fields.
  • Change wallet balance to DECIMAL(18, 2).
  • Add an index on wallets.user_id.
  • Change the transaction-wallet foreign key to ON DELETE RESTRICT.

Verification

  • pnpm run prisma:generate
  • pnpm exec prisma validate
  • pnpm build
  • Applied the complete migration chain successfully to a temporary PostgreSQL database.
  • git diff --check

Notes

  • The primary development database was not reset or migrated during implementation.
  • Older migration history still has unrelated Auth, Category, and Budget schema debt. Those changes were intentionally excluded because the full diff contains destructive operations outside this feature's scope.

Check out, review, and merge locally

Step 1. Fetch and check out the branch for this merge request

git fetch origin
git checkout -b feat/wallet-management-api origin/feat/wallet-management-api

Step 2. Review the changes locally

Step 3. Merge the branch and fix any conflicts that come up

git fetch origin
git checkout origin/develop
git merge --no-ff feat/wallet-management-api

Step 4. Push the result of the merge to GitLab

git push origin develop

Note that pushing to GitLab requires write access to this repository.

Tip: You can also checkout merge requests locally by following these guidelines.

  • Discussion 0
  • Commits 1
  • Changes 22
Assignee
No assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
0
Labels
None
Assign labels
  • View project labels
Reference: ThinhNC/finwise-miniapp-be!10

Revert this merge request

This will create a new commit in order to revert the existing changes.

Switch branch
Cancel
A new branch will be created in your fork and a new merge request will be started.

Cherry-pick this merge request

Switch branch
Cancel
A new branch will be created in your fork and a new merge request will be started.