All checks were successful
CI / ci (push) Successful in 36s
- Finance.jsx: main page with tabs (Dashboard/Transactions/Analytics) - FinanceDashboard: balance card, top categories, pie chart, daily line chart - TransactionList: filtered list with search, type/category filters - AddTransactionModal: bottom sheet with quick templates - FinanceAnalytics: bar chart, donut chart, monthly trend - finance.js: API layer - Navigation: added Wallet icon for Finance - App.jsx: added /finance route Design matches Storybook mockups (glassmorphism, Deep Teal palette)
48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
import client from './client'
|
|
|
|
export const financeApi = {
|
|
// Categories
|
|
listCategories: async () => {
|
|
const res = await client.get('finance/categories')
|
|
return res.data
|
|
},
|
|
createCategory: async (data) => {
|
|
const res = await client.post('finance/categories', data)
|
|
return res.data
|
|
},
|
|
updateCategory: async (id, data) => {
|
|
const res = await client.put(`finance/categories/${id}`, data)
|
|
return res.data
|
|
},
|
|
deleteCategory: async (id) => {
|
|
await client.delete(`finance/categories/${id}`)
|
|
},
|
|
|
|
// Transactions
|
|
listTransactions: async (params = {}) => {
|
|
const res = await client.get('finance/transactions', { params })
|
|
return res.data
|
|
},
|
|
createTransaction: async (data) => {
|
|
const res = await client.post('finance/transactions', data)
|
|
return res.data
|
|
},
|
|
updateTransaction: async (id, data) => {
|
|
const res = await client.put(`finance/transactions/${id}`, data)
|
|
return res.data
|
|
},
|
|
deleteTransaction: async (id) => {
|
|
await client.delete(`finance/transactions/${id}`)
|
|
},
|
|
|
|
// Summary & Analytics
|
|
getSummary: async (params = {}) => {
|
|
const res = await client.get('finance/summary', { params })
|
|
return res.data
|
|
},
|
|
getAnalytics: async (params = {}) => {
|
|
const res = await client.get('finance/analytics', { params })
|
|
return res.data
|
|
},
|
|
}
|