Skip to content

Commit 01d6e5e

Browse files
committed
feat: enhance budget management in Vault class
- Updated budget handling to differentiate between new and existing budgets. - Implemented logic to register budgets as dirty (update) or new (insert) based on their existence. - Modified budget deletion queries in VaultDrizzleRepository to ensure correct vault association during updates and deletions.
1 parent e68b77e commit 01d6e5e

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

src/vault/domain/vault.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,22 @@ export class Vault {
174174
if (amount < 0) {
175175
return left('O valor do orçamento não pode ser negativo');
176176
}
177+
const existingBudget = this.budgets.get(category.id);
177178
this.budgets.set(category.id, { category, amount });
178-
this.budgetsTracker.registerNew({
179-
category,
180-
amount,
181-
});
179+
180+
if (existingBudget) {
181+
// Budget already exists, register as dirty (update)
182+
this.budgetsTracker.registerDirty({
183+
category,
184+
amount,
185+
});
186+
} else {
187+
// New budget, register as new (insert)
188+
this.budgetsTracker.registerNew({
189+
category,
190+
amount,
191+
});
192+
}
182193
return right(true);
183194
}
184195

src/vault/repositories/drizzle/vault-drizzle.repository.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Inject, Injectable, Logger } from '@nestjs/common';
2-
import { eq, inArray } from 'drizzle-orm';
2+
import { and, eq, inArray } from 'drizzle-orm';
33
import { BatchItem } from 'drizzle-orm/batch';
44
import {
55
DRIZZLE_DATABASE,
@@ -108,7 +108,14 @@ export class VaultDrizzleRepository extends VaultRepository {
108108
// Delete removed budgets
109109
for (const b of budgetChanges.deleted) {
110110
queries.push(
111-
this.db.delete(budget).where(eq(budget.categoryId, b.category.id)),
111+
this.db
112+
.delete(budget)
113+
.where(
114+
and(
115+
eq(budget.vaultId, vaultEntity.id),
116+
eq(budget.categoryId, b.category.id),
117+
),
118+
),
112119
);
113120
}
114121

@@ -118,12 +125,16 @@ export class VaultDrizzleRepository extends VaultRepository {
118125
this.db
119126
.update(budget)
120127
.set({ amount: b.amount })
121-
.where(eq(budget.categoryId, b.category.id)),
128+
.where(
129+
and(
130+
eq(budget.vaultId, vaultEntity.id),
131+
eq(budget.categoryId, b.category.id),
132+
),
133+
),
122134
);
123135
}
124136

125137
// Execute all queries in a batch
126-
console.log('queries', queries);
127138
if (queries.length > 0) {
128139
const [first, ...rest] = queries;
129140
await this.db.batch([first, ...rest]);

src/vault/vault.service.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,8 +399,11 @@ export class VaultService {
399399
input.vaultId,
400400
);
401401
for (const budget of input.budgets) {
402+
// Support lookup by both ID and code for backwards compatibility
403+
// (web UI sends ID, telegram bot sends code)
402404
const category = categories.find(
403-
(cat) => cat.code === budget.categoryCode,
405+
(cat) =>
406+
cat.id === budget.categoryCode || cat.code === budget.categoryCode,
404407
);
405408
if (!category) {
406409
this.logger.warn(

0 commit comments

Comments
 (0)