Adds per-user wallet configuration
Allows users to configure their own wallet ID, enabling the system to track expenses and receivables on a per-user basis. Introduces new database table, models, API endpoints, and UI elements to manage user-specific wallet settings.
This commit is contained in:
parent
31344607c6
commit
bb1dbcccd8
7 changed files with 236 additions and 6 deletions
|
|
@ -12,9 +12,11 @@ window.app = Vue.createApp({
|
|||
accounts: [],
|
||||
currencies: [],
|
||||
settings: null,
|
||||
userWalletSettings: null,
|
||||
isAdmin: false,
|
||||
isSuperUser: false,
|
||||
castleWalletConfigured: false,
|
||||
userWalletConfigured: false,
|
||||
expenseDialog: {
|
||||
show: false,
|
||||
description: '',
|
||||
|
|
@ -34,6 +36,11 @@ window.app = Vue.createApp({
|
|||
show: false,
|
||||
castleWalletId: '',
|
||||
loading: false
|
||||
},
|
||||
userWalletDialog: {
|
||||
show: false,
|
||||
userWalletId: '',
|
||||
loading: false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -123,10 +130,27 @@ window.app = Vue.createApp({
|
|||
this.castleWalletConfigured = false
|
||||
}
|
||||
},
|
||||
async loadUserWallet() {
|
||||
try {
|
||||
const response = await LNbits.api.request(
|
||||
'GET',
|
||||
'/castle/api/v1/user/wallet',
|
||||
this.g.user.wallets[0].inkey
|
||||
)
|
||||
this.userWalletSettings = response.data
|
||||
this.userWalletConfigured = !!(this.userWalletSettings && this.userWalletSettings.user_wallet_id)
|
||||
} catch (error) {
|
||||
this.userWalletConfigured = false
|
||||
}
|
||||
},
|
||||
showSettingsDialog() {
|
||||
this.settingsDialog.castleWalletId = this.settings?.castle_wallet_id || ''
|
||||
this.settingsDialog.show = true
|
||||
},
|
||||
showUserWalletDialog() {
|
||||
this.userWalletDialog.userWalletId = this.userWalletSettings?.user_wallet_id || ''
|
||||
this.userWalletDialog.show = true
|
||||
},
|
||||
async submitSettings() {
|
||||
if (!this.settingsDialog.castleWalletId) {
|
||||
this.$q.notify({
|
||||
|
|
@ -158,6 +182,37 @@ window.app = Vue.createApp({
|
|||
this.settingsDialog.loading = false
|
||||
}
|
||||
},
|
||||
async submitUserWallet() {
|
||||
if (!this.userWalletDialog.userWalletId) {
|
||||
this.$q.notify({
|
||||
type: 'warning',
|
||||
message: 'Wallet ID is required'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
this.userWalletDialog.loading = true
|
||||
try {
|
||||
await LNbits.api.request(
|
||||
'PUT',
|
||||
'/castle/api/v1/user/wallet',
|
||||
this.g.user.wallets[0].inkey,
|
||||
{
|
||||
user_wallet_id: this.userWalletDialog.userWalletId
|
||||
}
|
||||
)
|
||||
this.$q.notify({
|
||||
type: 'positive',
|
||||
message: 'Wallet configured successfully'
|
||||
})
|
||||
this.userWalletDialog.show = false
|
||||
await this.loadUserWallet()
|
||||
} catch (error) {
|
||||
LNbits.utils.notifyApiError(error)
|
||||
} finally {
|
||||
this.userWalletDialog.loading = false
|
||||
}
|
||||
},
|
||||
async submitExpense() {
|
||||
this.expenseDialog.loading = true
|
||||
try {
|
||||
|
|
@ -252,5 +307,6 @@ window.app = Vue.createApp({
|
|||
await this.loadAccounts()
|
||||
await this.loadCurrencies()
|
||||
await this.loadSettings()
|
||||
await this.loadUserWallet()
|
||||
}
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue