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:
21
apps/api/dist/wallets/wallet-balance.service.d.ts
vendored
Executable file
21
apps/api/dist/wallets/wallet-balance.service.d.ts
vendored
Executable file
@@ -0,0 +1,21 @@
|
||||
import { PrismaService } from '../prisma/prisma.service';
|
||||
import { Decimal } from '@prisma/client/runtime/library';
|
||||
export interface WalletBalance {
|
||||
walletId: string;
|
||||
kind: string;
|
||||
currency?: string;
|
||||
unit?: string;
|
||||
totalBalance: Decimal;
|
||||
reservedBalance: Decimal;
|
||||
availableBalance: Decimal;
|
||||
totalUnits?: Decimal;
|
||||
pricePerUnit?: Decimal;
|
||||
totalValue?: Decimal;
|
||||
}
|
||||
export declare class WalletBalanceService {
|
||||
private prisma;
|
||||
constructor(prisma: PrismaService);
|
||||
calculateBalance(walletId: string): Promise<WalletBalance>;
|
||||
calculateMultipleBalances(walletIds: string[]): Promise<WalletBalance[]>;
|
||||
getAllUserWalletBalances(userId: string): Promise<WalletBalance[]>;
|
||||
}
|
||||
105
apps/api/dist/wallets/wallet-balance.service.js
vendored
Executable file
105
apps/api/dist/wallets/wallet-balance.service.js
vendored
Executable file
@@ -0,0 +1,105 @@
|
||||
"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.WalletBalanceService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const prisma_service_1 = require("../prisma/prisma.service");
|
||||
const library_1 = require("@prisma/client/runtime/library");
|
||||
let WalletBalanceService = class WalletBalanceService {
|
||||
prisma;
|
||||
constructor(prisma) {
|
||||
this.prisma = prisma;
|
||||
}
|
||||
async calculateBalance(walletId) {
|
||||
const wallet = await this.prisma.wallet.findUnique({
|
||||
where: { id: walletId },
|
||||
include: {
|
||||
transactions: {
|
||||
orderBy: { date: 'asc' },
|
||||
},
|
||||
},
|
||||
});
|
||||
if (!wallet) {
|
||||
throw new Error('Wallet not found');
|
||||
}
|
||||
console.log(`[Balance] Calculating for wallet ${walletId}:`, {
|
||||
name: wallet.name,
|
||||
kind: wallet.kind,
|
||||
initialAmount: wallet.initialAmount?.toString(),
|
||||
transactionCount: wallet.transactions.length,
|
||||
});
|
||||
const reservedBalance = new library_1.Decimal(wallet.reservedBalance || 0);
|
||||
if (wallet.kind === 'money') {
|
||||
let totalBalance = wallet.initialAmount ? new library_1.Decimal(wallet.initialAmount) : new library_1.Decimal(0);
|
||||
for (const tx of wallet.transactions) {
|
||||
if (tx.direction === 'in') {
|
||||
totalBalance = totalBalance.plus(tx.amount);
|
||||
}
|
||||
else {
|
||||
totalBalance = totalBalance.minus(tx.amount);
|
||||
}
|
||||
}
|
||||
const availableBalance = totalBalance.minus(reservedBalance);
|
||||
return {
|
||||
walletId: wallet.id,
|
||||
kind: wallet.kind,
|
||||
currency: wallet.currency || 'IDR',
|
||||
totalBalance,
|
||||
reservedBalance,
|
||||
availableBalance: availableBalance.greaterThanOrEqualTo(0) ? availableBalance : new library_1.Decimal(0),
|
||||
pricePerUnit: wallet.pricePerUnit || undefined,
|
||||
};
|
||||
}
|
||||
else {
|
||||
let totalUnits = wallet.initialAmount ? new library_1.Decimal(wallet.initialAmount) : new library_1.Decimal(0);
|
||||
for (const tx of wallet.transactions) {
|
||||
if (tx.direction === 'in') {
|
||||
totalUnits = totalUnits.plus(tx.amount);
|
||||
}
|
||||
else {
|
||||
totalUnits = totalUnits.minus(tx.amount);
|
||||
}
|
||||
}
|
||||
const pricePerUnit = wallet.pricePerUnit ? new library_1.Decimal(wallet.pricePerUnit) : new library_1.Decimal(0);
|
||||
const totalValue = totalUnits.times(pricePerUnit);
|
||||
const reservedUnits = pricePerUnit.greaterThan(0) ? reservedBalance.dividedBy(pricePerUnit) : new library_1.Decimal(0);
|
||||
const availableUnits = totalUnits.minus(reservedUnits);
|
||||
const availableValue = totalValue.minus(reservedBalance);
|
||||
return {
|
||||
walletId: wallet.id,
|
||||
kind: wallet.kind,
|
||||
unit: wallet.unit || 'units',
|
||||
totalUnits,
|
||||
pricePerUnit,
|
||||
totalValue,
|
||||
totalBalance: totalUnits,
|
||||
reservedBalance: reservedUnits,
|
||||
availableBalance: availableUnits.greaterThanOrEqualTo(0) ? availableUnits : new library_1.Decimal(0),
|
||||
};
|
||||
}
|
||||
}
|
||||
async calculateMultipleBalances(walletIds) {
|
||||
return Promise.all(walletIds.map(id => this.calculateBalance(id)));
|
||||
}
|
||||
async getAllUserWalletBalances(userId) {
|
||||
const wallets = await this.prisma.wallet.findMany({
|
||||
where: { userId, deletedAt: null },
|
||||
select: { id: true },
|
||||
});
|
||||
return this.calculateMultipleBalances(wallets.map(w => w.id));
|
||||
}
|
||||
};
|
||||
exports.WalletBalanceService = WalletBalanceService;
|
||||
exports.WalletBalanceService = WalletBalanceService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__metadata("design:paramtypes", [prisma_service_1.PrismaService])
|
||||
], WalletBalanceService);
|
||||
//# sourceMappingURL=wallet-balance.service.js.map
|
||||
1
apps/api/dist/wallets/wallet-balance.service.js.map
vendored
Executable file
1
apps/api/dist/wallets/wallet-balance.service.js.map
vendored
Executable file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"wallet-balance.service.js","sourceRoot":"","sources":["../../src/wallets/wallet-balance.service.ts"],"names":[],"mappings":"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"}
|
||||
29
apps/api/dist/wallets/wallets-balance.controller.d.ts
vendored
Executable file
29
apps/api/dist/wallets/wallets-balance.controller.d.ts
vendored
Executable file
@@ -0,0 +1,29 @@
|
||||
import { WalletBalanceService } from './wallet-balance.service';
|
||||
export declare class WalletsBalanceController {
|
||||
private readonly walletBalanceService;
|
||||
constructor(walletBalanceService: WalletBalanceService);
|
||||
getAllBalances(req: any): Promise<{
|
||||
walletId: string;
|
||||
kind: string;
|
||||
currency: string | undefined;
|
||||
unit: string | undefined;
|
||||
totalBalance: number;
|
||||
reservedBalance: number;
|
||||
availableBalance: number;
|
||||
totalUnits: number | undefined;
|
||||
pricePerUnit: number | undefined;
|
||||
totalValue: number | undefined;
|
||||
}[]>;
|
||||
getBalance(req: any, walletId: string): Promise<{
|
||||
walletId: string;
|
||||
kind: string;
|
||||
currency: string | undefined;
|
||||
unit: string | undefined;
|
||||
totalBalance: number;
|
||||
reservedBalance: number;
|
||||
availableBalance: number;
|
||||
totalUnits: number | undefined;
|
||||
pricePerUnit: number | undefined;
|
||||
totalValue: number | undefined;
|
||||
}>;
|
||||
}
|
||||
86
apps/api/dist/wallets/wallets-balance.controller.js
vendored
Executable file
86
apps/api/dist/wallets/wallets-balance.controller.js
vendored
Executable file
@@ -0,0 +1,86 @@
|
||||
"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);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.WalletsBalanceController = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const wallet_balance_service_1 = require("./wallet-balance.service");
|
||||
const auth_guard_1 = require("../auth/auth.guard");
|
||||
let WalletsBalanceController = class WalletsBalanceController {
|
||||
walletBalanceService;
|
||||
constructor(walletBalanceService) {
|
||||
this.walletBalanceService = walletBalanceService;
|
||||
}
|
||||
async getAllBalances(req) {
|
||||
try {
|
||||
console.log('[BalanceController] Getting balances for user:', req.user.userId);
|
||||
const balances = await this.walletBalanceService.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;
|
||||
}
|
||||
}
|
||||
async getBalance(req, walletId) {
|
||||
const balance = await this.walletBalanceService.calculateBalance(walletId);
|
||||
return {
|
||||
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,
|
||||
};
|
||||
}
|
||||
};
|
||||
exports.WalletsBalanceController = WalletsBalanceController;
|
||||
__decorate([
|
||||
(0, common_1.Get)('balances'),
|
||||
__param(0, (0, common_1.Request)()),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], WalletsBalanceController.prototype, "getAllBalances", null);
|
||||
__decorate([
|
||||
(0, common_1.Get)(':id/balance'),
|
||||
__param(0, (0, common_1.Request)()),
|
||||
__param(1, (0, common_1.Param)('id')),
|
||||
__metadata("design:type", Function),
|
||||
__metadata("design:paramtypes", [Object, String]),
|
||||
__metadata("design:returntype", Promise)
|
||||
], WalletsBalanceController.prototype, "getBalance", null);
|
||||
exports.WalletsBalanceController = WalletsBalanceController = __decorate([
|
||||
(0, common_1.Controller)('wallets'),
|
||||
(0, common_1.UseGuards)(auth_guard_1.AuthGuard),
|
||||
__metadata("design:paramtypes", [wallet_balance_service_1.WalletBalanceService])
|
||||
], WalletsBalanceController);
|
||||
//# sourceMappingURL=wallets-balance.controller.js.map
|
||||
1
apps/api/dist/wallets/wallets-balance.controller.js.map
vendored
Executable file
1
apps/api/dist/wallets/wallets-balance.controller.js.map
vendored
Executable file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"wallets-balance.controller.js","sourceRoot":"","sources":["../../src/wallets/wallets-balance.controller.ts"],"names":[],"mappings":"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"}
|
||||
45
apps/api/dist/wallets/wallets.controller.d.ts
vendored
Normal file → Executable file
45
apps/api/dist/wallets/wallets.controller.d.ts
vendored
Normal file → Executable file
@@ -1,5 +1,6 @@
|
||||
import { WalletsService } from './wallets.service';
|
||||
import { TransactionsService } from '../transactions/transactions.service';
|
||||
import { WalletBalanceService } from './wallet-balance.service';
|
||||
interface RequestWithUser {
|
||||
user: {
|
||||
userId: string;
|
||||
@@ -8,7 +9,8 @@ interface RequestWithUser {
|
||||
export declare class WalletsController {
|
||||
private readonly wallets;
|
||||
private readonly transactions;
|
||||
constructor(wallets: WalletsService, transactions: TransactionsService);
|
||||
private readonly walletBalance;
|
||||
constructor(wallets: WalletsService, transactions: TransactionsService, walletBalance: WalletBalanceService);
|
||||
list(req: RequestWithUser): import("@prisma/client").Prisma.PrismaPromise<{
|
||||
id: string;
|
||||
createdAt: Date;
|
||||
@@ -18,9 +20,10 @@ export declare class WalletsController {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}[]>;
|
||||
getAllTransactions(req: RequestWithUser): Promise<{
|
||||
category: string | null;
|
||||
@@ -34,6 +37,32 @@ export declare class WalletsController {
|
||||
walletId: string;
|
||||
recurrenceId: string | null;
|
||||
}[]>;
|
||||
getAllBalances(req: RequestWithUser): Promise<{
|
||||
walletId: string;
|
||||
kind: string;
|
||||
currency: string | undefined;
|
||||
unit: string | undefined;
|
||||
totalBalance: number;
|
||||
reservedBalance: number;
|
||||
availableBalance: number;
|
||||
totalUnits: number | undefined;
|
||||
pricePerUnit: number | undefined;
|
||||
totalValue: number | undefined;
|
||||
}[]>;
|
||||
getOne(req: RequestWithUser, id: string): import("@prisma/client").Prisma.Prisma__WalletClient<{
|
||||
id: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
name: string;
|
||||
userId: string;
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
} | null, null, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions>;
|
||||
create(req: RequestWithUser, body: {
|
||||
name: string;
|
||||
currency?: string;
|
||||
@@ -50,9 +79,10 @@ export declare class WalletsController {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}, never, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions> | {
|
||||
error: string;
|
||||
};
|
||||
@@ -72,9 +102,10 @@ export declare class WalletsController {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}, never, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions>;
|
||||
bulkUpdatePrices(req: RequestWithUser, body: {
|
||||
updates: Array<{
|
||||
@@ -93,9 +124,10 @@ export declare class WalletsController {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}[];
|
||||
}> | {
|
||||
error: string;
|
||||
@@ -109,9 +141,10 @@ export declare class WalletsController {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}, never, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions>;
|
||||
}
|
||||
export {};
|
||||
|
||||
51
apps/api/dist/wallets/wallets.controller.js
vendored
Normal file → Executable file
51
apps/api/dist/wallets/wallets.controller.js
vendored
Normal file → Executable 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
|
||||
2
apps/api/dist/wallets/wallets.controller.js.map
vendored
Normal file → Executable file
2
apps/api/dist/wallets/wallets.controller.js.map
vendored
Normal file → Executable file
@@ -1 +1 @@
|
||||
{"version":3,"file":"wallets.controller.js","sourceRoot":"","sources":["../../src/wallets/wallets.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAWwB;AACxB,uDAAmD;AACnD,+EAA2E;AAC3E,mDAA+C;AAUxC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAET;IACA;IAFnB,YACmB,OAAuB,EACvB,YAAiC;QADjC,YAAO,GAAP,OAAO,CAAgB;QACvB,iBAAY,GAAZ,YAAY,CAAqB;IACjD,CAAC;IAGJ,IAAI,CAAQ,GAAoB;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAGK,AAAN,KAAK,CAAC,kBAAkB,CAAQ,GAAoB;QAClD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAGD,MAAM,CACG,GAAoB,EAE3B,IAOC;QAED,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAGD,MAAM,CACG,GAAoB,EACd,EAAU,EAEvB,IAOC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAGD,gBAAgB,CACP,GAAoB,EAE3B,IAKC;QAED,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAGD,MAAM,CAAQ,GAAoB,EAAe,EAAU;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AAzEY,8CAAiB;AAO5B;IADC,IAAA,YAAG,GAAE;IACA,WAAA,IAAA,YAAG,GAAE,CAAA;;;;6CAEV;AAGK;IADL,IAAA,YAAG,EAAC,cAAc,CAAC;IACM,WAAA,IAAA,YAAG,GAAE,CAAA;;;;2DAE9B;AAGD;IADC,IAAA,aAAI,GAAE;IAEJ,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;;;;+CAcR;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;IAER,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;;;+CAWR;AAGD;IADC,IAAA,cAAK,EAAC,oBAAoB,CAAC;IAEzB,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;;;;yDAYR;AAGD;IADC,IAAA,eAAM,EAAC,KAAK,CAAC;IACN,WAAA,IAAA,YAAG,GAAE,CAAA;IAAwB,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;+CAE/C;4BAxEU,iBAAiB;IAF7B,IAAA,mBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,kBAAS,EAAC,sBAAS,CAAC;qCAGS,gCAAc;QACT,0CAAmB;GAHzC,iBAAiB,CAyE7B"}
|
||||
{"version":3,"file":"wallets.controller.js","sourceRoot":"","sources":["../../src/wallets/wallets.controller.ts"],"names":[],"mappings":"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"}
|
||||
0
apps/api/dist/wallets/wallets.module.d.ts
vendored
Normal file → Executable file
0
apps/api/dist/wallets/wallets.module.d.ts
vendored
Normal file → Executable file
8
apps/api/dist/wallets/wallets.module.js
vendored
Normal file → Executable file
8
apps/api/dist/wallets/wallets.module.js
vendored
Normal file → Executable file
@@ -10,7 +10,9 @@ exports.WalletsModule = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const wallets_service_1 = require("./wallets.service");
|
||||
const wallets_controller_1 = require("./wallets.controller");
|
||||
const wallets_balance_controller_1 = require("./wallets-balance.controller");
|
||||
const transactions_service_1 = require("../transactions/transactions.service");
|
||||
const wallet_balance_service_1 = require("./wallet-balance.service");
|
||||
const prisma_module_1 = require("../prisma/prisma.module");
|
||||
let WalletsModule = class WalletsModule {
|
||||
};
|
||||
@@ -18,9 +20,9 @@ exports.WalletsModule = WalletsModule;
|
||||
exports.WalletsModule = WalletsModule = __decorate([
|
||||
(0, common_1.Module)({
|
||||
imports: [prisma_module_1.PrismaModule],
|
||||
providers: [wallets_service_1.WalletsService, transactions_service_1.TransactionsService],
|
||||
controllers: [wallets_controller_1.WalletsController],
|
||||
exports: [wallets_service_1.WalletsService],
|
||||
providers: [wallets_service_1.WalletsService, transactions_service_1.TransactionsService, wallet_balance_service_1.WalletBalanceService],
|
||||
controllers: [wallets_controller_1.WalletsController, wallets_balance_controller_1.WalletsBalanceController],
|
||||
exports: [wallets_service_1.WalletsService, wallet_balance_service_1.WalletBalanceService],
|
||||
})
|
||||
], WalletsModule);
|
||||
//# sourceMappingURL=wallets.module.js.map
|
||||
2
apps/api/dist/wallets/wallets.module.js.map
vendored
Normal file → Executable file
2
apps/api/dist/wallets/wallets.module.js.map
vendored
Normal file → Executable file
@@ -1 +1 @@
|
||||
{"version":3,"file":"wallets.module.js","sourceRoot":"","sources":["../../src/wallets/wallets.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AACnD,6DAAyD;AACzD,+EAA2E;AAC3E,2DAAuD;AAQhD,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IANzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAY,CAAC;QACvB,SAAS,EAAE,CAAC,gCAAc,EAAE,0CAAmB,CAAC;QAChD,WAAW,EAAE,CAAC,sCAAiB,CAAC;QAChC,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"}
|
||||
{"version":3,"file":"wallets.module.js","sourceRoot":"","sources":["../../src/wallets/wallets.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AACnD,6DAAyD;AACzD,6EAAwE;AACxE,+EAA2E;AAC3E,qEAAgE;AAChE,2DAAuD;AAQhD,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IANzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,4BAAY,CAAC;QACvB,SAAS,EAAE,CAAC,gCAAc,EAAE,0CAAmB,EAAE,6CAAoB,CAAC;QACtE,WAAW,EAAE,CAAC,sCAAiB,EAAE,qDAAwB,CAAC;QAC1D,OAAO,EAAE,CAAC,gCAAc,EAAE,6CAAoB,CAAC;KAChD,CAAC;GACW,aAAa,CAAG"}
|
||||
29
apps/api/dist/wallets/wallets.service.d.ts
vendored
Normal file → Executable file
29
apps/api/dist/wallets/wallets.service.d.ts
vendored
Normal file → Executable file
@@ -11,10 +11,25 @@ export declare class WalletsService {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}[]>;
|
||||
getOne(userId: string, id: string): import("@prisma/client").Prisma.Prisma__WalletClient<{
|
||||
id: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
name: string;
|
||||
userId: string;
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
} | null, null, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions>;
|
||||
create(userId: string, input: {
|
||||
name: string;
|
||||
currency?: string;
|
||||
@@ -31,9 +46,10 @@ export declare class WalletsService {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}, never, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions>;
|
||||
update(userId: string, id: string, input: {
|
||||
name?: string;
|
||||
@@ -51,9 +67,10 @@ export declare class WalletsService {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}, never, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions>;
|
||||
bulkUpdatePrices(userId: string, updates: Array<{
|
||||
walletId: string;
|
||||
@@ -70,9 +87,10 @@ export declare class WalletsService {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}[];
|
||||
}>;
|
||||
delete(userId: string, id: string): import("@prisma/client").Prisma.Prisma__WalletClient<{
|
||||
@@ -84,8 +102,9 @@ export declare class WalletsService {
|
||||
kind: string;
|
||||
currency: string | null;
|
||||
unit: string | null;
|
||||
deletedAt: Date | null;
|
||||
initialAmount: import("@prisma/client/runtime/library").Decimal | null;
|
||||
pricePerUnit: import("@prisma/client/runtime/library").Decimal | null;
|
||||
deletedAt: Date | null;
|
||||
reservedBalance: import("@prisma/client/runtime/library").Decimal;
|
||||
}, never, import("@prisma/client/runtime/library").DefaultArgs, import("@prisma/client").Prisma.PrismaClientOptions>;
|
||||
}
|
||||
|
||||
5
apps/api/dist/wallets/wallets.service.js
vendored
Normal file → Executable file
5
apps/api/dist/wallets/wallets.service.js
vendored
Normal file → Executable file
@@ -23,6 +23,11 @@ let WalletsService = class WalletsService {
|
||||
orderBy: { createdAt: 'asc' },
|
||||
});
|
||||
}
|
||||
getOne(userId, id) {
|
||||
return this.prisma.wallet.findFirst({
|
||||
where: { id, userId, deletedAt: null },
|
||||
});
|
||||
}
|
||||
create(userId, input) {
|
||||
const kind = input.kind ?? 'money';
|
||||
return this.prisma.wallet.create({
|
||||
|
||||
2
apps/api/dist/wallets/wallets.service.js.map
vendored
Normal file → Executable file
2
apps/api/dist/wallets/wallets.service.js.map
vendored
Normal file → Executable file
@@ -1 +1 @@
|
||||
{"version":3,"file":"wallets.service.js","sourceRoot":"","sources":["../../src/wallets/wallets.service.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"wallets.service.js","sourceRoot":"","sources":["../../src/wallets/wallets.service.ts"],"names":[],"mappings":"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"}
|
||||
Reference in New Issue
Block a user