Implement updateWalletBalance method in PaymentService and deprecate AuthService method

- Added updateWalletBalance method in PaymentService to handle wallet balance updates from WebSocket notifications, improving wallet management.
- Deprecated the existing updateWalletBalance method in AuthService, redirecting calls to the new PaymentService method for better consistency and maintainability.
- Updated WalletWebSocketService to utilize PaymentService for balance updates, ensuring accurate wallet state management.

These changes enhance the architecture of wallet balance handling and streamline the update process across services.
This commit is contained in:
padreug 2025-09-18 09:24:51 +02:00
parent 49e94a894c
commit f93058add2
3 changed files with 45 additions and 27 deletions

View file

@ -117,6 +117,39 @@ export class PaymentService extends BaseService {
return wallet?.inkey || null return wallet?.inkey || null
} }
/**
* Update wallet balance from WebSocket notifications
* @param balanceMsat - The new balance in millisatoshis
* @param walletId - Optional wallet ID (defaults to preferred wallet)
*/
updateWalletBalance(balanceMsat: number, walletId?: string): void {
if (!this.authService?.user?.value?.wallets?.length) {
this.debug('No wallets available to update')
return
}
// Determine which wallet to update
let walletToUpdate
if (walletId) {
walletToUpdate = this.authService.user.value.wallets.find((w: any) => w.id === walletId)
} else {
// Use preferred wallet if no ID specified
walletToUpdate = this.getPreferredWallet()
}
if (walletToUpdate) {
const oldBalance = walletToUpdate.balance_msat
walletToUpdate.balance_msat = balanceMsat
// Trigger reactivity in AuthService
this.authService.user.value = { ...this.authService.user.value }
this.debug(`Wallet ${walletToUpdate.id} balance updated: ${oldBalance} -> ${balanceMsat} msat (${Math.round(balanceMsat/1000)} sats)`)
} else {
this.debug(`Wallet ${walletId} not found for balance update`)
}
}
/** /**
* Generate QR code for Lightning payment request * Generate QR code for Lightning payment request
*/ */

View file

@ -2,6 +2,7 @@
import { ref, computed } from 'vue' import { ref, computed } from 'vue'
import { BaseService } from '@/core/base/BaseService' import { BaseService } from '@/core/base/BaseService'
import { eventBus } from '@/core/event-bus' import { eventBus } from '@/core/event-bus'
import { tryInjectService, SERVICE_TOKENS } from '@/core/di-container'
import type { LoginCredentials, RegisterData, User } from '@/lib/api/lnbits' import type { LoginCredentials, RegisterData, User } from '@/lib/api/lnbits'
export class AuthService extends BaseService { export class AuthService extends BaseService {
@ -134,32 +135,16 @@ export class AuthService extends BaseService {
} }
/** /**
* Update wallet balance from WebSocket notifications * @deprecated Use PaymentService.updateWalletBalance() instead
* @param walletId - The wallet ID to update (if not provided, updates first wallet for backwards compatibility) * This method will be removed in a future version
* @param balanceMsat - The new balance in millisatoshis
*/ */
updateWalletBalance(balanceMsat: number, walletId?: string): void { updateWalletBalance(balanceMsat: number, walletId?: string): void {
if (!this.user.value?.wallets?.length) return console.warn('AuthService.updateWalletBalance is deprecated. Use PaymentService.updateWalletBalance() instead')
// Find the wallet to update // For backwards compatibility, delegate to PaymentService if available
let walletToUpdate const paymentService = tryInjectService(SERVICE_TOKENS.PAYMENT_SERVICE) as any
if (walletId) { if (paymentService?.updateWalletBalance) {
walletToUpdate = this.user.value.wallets.find(w => w.id === walletId) paymentService.updateWalletBalance(balanceMsat, walletId)
} else {
// Fallback to first wallet for backwards compatibility
// TODO: This should eventually be removed once all callers provide walletId
walletToUpdate = this.user.value.wallets[0]
console.warn('updateWalletBalance called without walletId, using wallets[0] as fallback')
}
if (walletToUpdate) {
const oldBalance = walletToUpdate.balance_msat
walletToUpdate.balance_msat = balanceMsat
// Trigger reactivity
this.user.value = { ...this.user.value }
this.debug(`Wallet ${walletToUpdate.id} balance updated: ${oldBalance} -> ${balanceMsat} msat (${Math.round(balanceMsat/1000)} sats) via WebSocket`)
} }
} }

View file

@ -233,7 +233,7 @@ export class WalletWebSocketService extends BaseService {
} }
/** /**
* Update wallet balance in auth service * Update wallet balance via PaymentService
*/ */
private updateWalletBalance(balanceSats: number): void { private updateWalletBalance(balanceSats: number): void {
console.log('WalletWebSocketService: Updating balance to', balanceSats, 'sats') console.log('WalletWebSocketService: Updating balance to', balanceSats, 'sats')
@ -245,9 +245,9 @@ export class WalletWebSocketService extends BaseService {
const wallet = this.paymentService?.getPreferredWallet?.() const wallet = this.paymentService?.getPreferredWallet?.()
const walletId = wallet?.id const walletId = wallet?.id
// Update balance in auth service (source of truth) // Update balance via PaymentService (which manages wallet state)
if (this.authService?.updateWalletBalance) { if (this.paymentService?.updateWalletBalance) {
this.authService.updateWalletBalance(balanceMsat, walletId) this.paymentService.updateWalletBalance(balanceMsat, walletId)
} }
} }