checkpoint: goals feature, wallet balance, and goals/wallet detail UI

- Add goals feature (models, migrations, API, web pages)
- Add reserved/centralized wallet balance service
- Add wallet detail page and overview components
- Add new UI components (progress, multi-select, FAB)
- Remove stray empty -H/-d files from working tree
This commit is contained in:
Dwindi Ramadhana
2026-06-17 20:40:00 +07:00
parent 35e93b826a
commit 6a6e74562c
401 changed files with 9517 additions and 397 deletions

51
apps/api/dist/wallets/wallets.controller.js vendored Normal file → Executable file
View File

@@ -16,13 +16,16 @@ exports.WalletsController = void 0;
const common_1 = require("@nestjs/common");
const wallets_service_1 = require("./wallets.service");
const transactions_service_1 = require("../transactions/transactions.service");
const wallet_balance_service_1 = require("./wallet-balance.service");
const auth_guard_1 = require("../auth/auth.guard");
let WalletsController = class WalletsController {
wallets;
transactions;
constructor(wallets, transactions) {
walletBalance;
constructor(wallets, transactions, walletBalance) {
this.wallets = wallets;
this.transactions = transactions;
this.walletBalance = walletBalance;
}
list(req) {
return this.wallets.list(req.user.userId);
@@ -30,6 +33,34 @@ let WalletsController = class WalletsController {
async getAllTransactions(req) {
return this.transactions.listAll(req.user.userId);
}
async getAllBalances(req) {
try {
console.log('[BalanceController] Getting balances for user:', req.user.userId);
const balances = await this.walletBalance.getAllUserWalletBalances(req.user.userId);
console.log('[BalanceController] Got balances:', balances.length);
const result = balances.map(balance => ({
walletId: balance.walletId,
kind: balance.kind,
currency: balance.currency,
unit: balance.unit,
totalBalance: Number(balance.totalBalance),
reservedBalance: Number(balance.reservedBalance),
availableBalance: Number(balance.availableBalance),
totalUnits: balance.totalUnits ? Number(balance.totalUnits) : undefined,
pricePerUnit: balance.pricePerUnit ? Number(balance.pricePerUnit) : undefined,
totalValue: balance.totalValue ? Number(balance.totalValue) : undefined,
}));
console.log('[BalanceController] Returning:', result);
return result;
}
catch (error) {
console.error('[BalanceController] Error getting balances:', error);
throw error;
}
}
getOne(req, id) {
return this.wallets.getOne(req.user.userId, id);
}
create(req, body) {
if (!body?.name) {
return { error: 'name is required' };
@@ -64,6 +95,21 @@ __decorate([
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], WalletsController.prototype, "getAllTransactions", null);
__decorate([
(0, common_1.Get)('balances'),
__param(0, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], WalletsController.prototype, "getAllBalances", null);
__decorate([
(0, common_1.Get)(':id'),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Param)('id')),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, String]),
__metadata("design:returntype", void 0)
], WalletsController.prototype, "getOne", null);
__decorate([
(0, common_1.Post)(),
__param(0, (0, common_1.Req)()),
@@ -101,6 +147,7 @@ exports.WalletsController = WalletsController = __decorate([
(0, common_1.Controller)('wallets'),
(0, common_1.UseGuards)(auth_guard_1.AuthGuard),
__metadata("design:paramtypes", [wallets_service_1.WalletsService,
transactions_service_1.TransactionsService])
transactions_service_1.TransactionsService,
wallet_balance_service_1.WalletBalanceService])
], WalletsController);
//# sourceMappingURL=wallets.controller.js.map