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

View File

@@ -0,0 +1,5 @@
export declare class CreateAllocationDto {
walletId: string;
amount: number;
notes?: string;
}

View File

@@ -0,0 +1,35 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateAllocationDto = void 0;
const class_validator_1 = require("class-validator");
class CreateAllocationDto {
walletId;
amount;
notes;
}
exports.CreateAllocationDto = CreateAllocationDto;
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsNotEmpty)(),
__metadata("design:type", String)
], CreateAllocationDto.prototype, "walletId", void 0);
__decorate([
(0, class_validator_1.IsNumber)(),
(0, class_validator_1.Min)(0.01),
__metadata("design:type", Number)
], CreateAllocationDto.prototype, "amount", void 0);
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateAllocationDto.prototype, "notes", void 0);
//# sourceMappingURL=create-allocation.dto.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"create-allocation.dto.js","sourceRoot":"","sources":["../../../src/goals/dto/create-allocation.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAkF;AAElF,MAAa,mBAAmB;IAG9B,QAAQ,CAAS;IAIjB,MAAM,CAAS;IAIf,KAAK,CAAU;CAChB;AAZD,kDAYC;AATC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;qDACI;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,IAAI,CAAC;;mDACK;AAIf;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;kDACE"}

View File

@@ -0,0 +1,9 @@
export declare class CreateGoalDto {
name: string;
description?: string;
targetAmount: number;
currency: string;
targetDate?: string;
imageUrl?: string;
category?: string;
}

59
apps/api/dist/goals/dto/create-goal.dto.js vendored Executable file
View File

@@ -0,0 +1,59 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateGoalDto = void 0;
const class_validator_1 = require("class-validator");
class CreateGoalDto {
name;
description;
targetAmount;
currency;
targetDate;
imageUrl;
category;
}
exports.CreateGoalDto = CreateGoalDto;
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsNotEmpty)(),
__metadata("design:type", String)
], CreateGoalDto.prototype, "name", void 0);
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateGoalDto.prototype, "description", void 0);
__decorate([
(0, class_validator_1.IsNumber)(),
(0, class_validator_1.Min)(0),
__metadata("design:type", Number)
], CreateGoalDto.prototype, "targetAmount", void 0);
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsNotEmpty)(),
__metadata("design:type", String)
], CreateGoalDto.prototype, "currency", void 0);
__decorate([
(0, class_validator_1.IsDateString)(),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateGoalDto.prototype, "targetDate", void 0);
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateGoalDto.prototype, "imageUrl", void 0);
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateGoalDto.prototype, "category", void 0);
//# sourceMappingURL=create-goal.dto.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"create-goal.dto.js","sourceRoot":"","sources":["../../../src/goals/dto/create-goal.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAgG;AAEhG,MAAa,aAAa;IAGxB,IAAI,CAAS;IAIb,WAAW,CAAU;IAIrB,YAAY,CAAS;IAIrB,QAAQ,CAAS;IAIjB,UAAU,CAAU;IAIpB,QAAQ,CAAU;IAIlB,QAAQ,CAAU;CACnB;AA5BD,sCA4BC;AAzBC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;2CACA;AAIb;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;kDACQ;AAIrB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,qBAAG,EAAC,CAAC,CAAC;;mDACc;AAIrB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACI;AAIjB;IAFC,IAAA,8BAAY,GAAE;IACd,IAAA,4BAAU,GAAE;;iDACO;AAIpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACK;AAIlB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+CACK"}

View File

@@ -0,0 +1,6 @@
import { CreateGoalDto } from './create-goal.dto';
declare const UpdateGoalDto_base: import("@nestjs/mapped-types").MappedType<Partial<CreateGoalDto>>;
export declare class UpdateGoalDto extends UpdateGoalDto_base {
status?: string;
}
export {};

25
apps/api/dist/goals/dto/update-goal.dto.js vendored Executable file
View File

@@ -0,0 +1,25 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateGoalDto = void 0;
const mapped_types_1 = require("@nestjs/mapped-types");
const create_goal_dto_1 = require("./create-goal.dto");
const class_validator_1 = require("class-validator");
class UpdateGoalDto extends (0, mapped_types_1.PartialType)(create_goal_dto_1.CreateGoalDto) {
status;
}
exports.UpdateGoalDto = UpdateGoalDto;
__decorate([
(0, class_validator_1.IsString)(),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UpdateGoalDto.prototype, "status", void 0);
//# sourceMappingURL=update-goal.dto.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"update-goal.dto.js","sourceRoot":"","sources":["../../../src/goals/dto/update-goal.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAmD;AACnD,uDAAkD;AAClD,qDAAuD;AAEvD,MAAa,aAAc,SAAQ,IAAA,0BAAW,EAAC,+BAAa,CAAC;IAG3D,MAAM,CAAU;CACjB;AAJD,sCAIC;AADC;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;6CACG"}