diff --git a/src/app.config.ts b/src/app.config.ts index 8060762..8893996 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -93,6 +93,20 @@ export const appConfig: AppConfig = { pollingInterval: 10000 // 10 seconds for polling updates } } + }, + expenses: { + name: 'expenses', + enabled: true, + lazy: false, + config: { + apiConfig: { + baseUrl: import.meta.env.VITE_LNBITS_BASE_URL || 'http://localhost:5000', + timeout: 30000 // 30 seconds for API requests + }, + defaultCurrency: 'sats', + maxExpenseAmount: 1000000, // 1M sats + requireDescription: true + } } }, diff --git a/src/app.ts b/src/app.ts index 459283e..6878880 100644 --- a/src/app.ts +++ b/src/app.ts @@ -16,6 +16,7 @@ import chatModule from './modules/chat' import eventsModule from './modules/events' import marketModule from './modules/market' import walletModule from './modules/wallet' +import expensesModule from './modules/expenses' // Root component import App from './App.vue' @@ -43,7 +44,8 @@ export async function createAppInstance() { ...chatModule.routes || [], ...eventsModule.routes || [], ...marketModule.routes || [], - ...walletModule.routes || [] + ...walletModule.routes || [], + ...expensesModule.routes || [] ].filter(Boolean) // Create router with all routes available immediately @@ -126,6 +128,13 @@ export async function createAppInstance() { ) } + // Register expenses module + if (appConfig.modules.expenses?.enabled) { + moduleRegistrations.push( + pluginManager.register(expensesModule, appConfig.modules.expenses) + ) + } + // Wait for all modules to register await Promise.all(moduleRegistrations) diff --git a/src/core/di-container.ts b/src/core/di-container.ts index da71624..0d27524 100644 --- a/src/core/di-container.ts +++ b/src/core/di-container.ts @@ -160,6 +160,9 @@ export const SERVICE_TOKENS = { // Image upload services IMAGE_UPLOAD_SERVICE: Symbol('imageUploadService'), + + // Expenses services + EXPENSES_API: Symbol('expensesAPI'), } as const // Type-safe injection helpers diff --git a/src/modules/expenses/components/AccountSelector.vue b/src/modules/expenses/components/AccountSelector.vue new file mode 100644 index 0000000..ec49ed3 --- /dev/null +++ b/src/modules/expenses/components/AccountSelector.vue @@ -0,0 +1,257 @@ + + + diff --git a/src/modules/expenses/components/AddExpense.vue b/src/modules/expenses/components/AddExpense.vue new file mode 100644 index 0000000..6b24130 --- /dev/null +++ b/src/modules/expenses/components/AddExpense.vue @@ -0,0 +1,288 @@ +