From 7671ab76b277beb1535845d08fd2338cc6dc8997 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 21 Aug 2026 07:23:57 +0300 Subject: [PATCH] fix: close analytics review findings --- CHANGELOG.md | 6 ++++++ backend/src/routes/analytics.ts | 2 +- backend/src/services/analytics.integration.test.ts | 7 +++++++ frontend/package.json | 2 +- frontend/src/pages/AnalyticsPage.tsx | 2 +- 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42dfdce..4ee5baa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [Frontend 0.11.1] - 2026-08-21 + +### Fixed + +- Preserve the explicit «Без категории» analytics filter value when requesting data. + ## [Frontend 0.11.0 / Backend 0.10.1 / Shared 0.5.0] - 2026-08-21 ### Fixed diff --git a/backend/src/routes/analytics.ts b/backend/src/routes/analytics.ts index 774c641..42065bf 100644 --- a/backend/src/routes/analytics.ts +++ b/backend/src/routes/analytics.ts @@ -64,7 +64,7 @@ router.get( from: from as string, to: to as string, accountId: accountId ? Number(accountId) : undefined, - categoryId: categoryId ? Number(categoryId) : undefined, + categoryId: categoryId !== undefined ? Number(categoryId) : undefined, onlyConfirmed: onlyConfirmed === 'true', granularity: granularity as Granularity, }); diff --git a/backend/src/services/analytics.integration.test.ts b/backend/src/services/analytics.integration.test.ts index 94b4390..7c4e3aa 100644 --- a/backend/src/services/analytics.integration.test.ts +++ b/backend/src/services/analytics.integration.test.ts @@ -40,6 +40,9 @@ async function testQueries(): Promise { assert.deepEqual({ expense: categorySummary.totalExpense, income: categorySummary.totalIncome }, { expense: 6_000, income: 0 }); const uncategorized = await getSummary({ ...params, categoryId: 0, onlyConfirmed: false }, client); assert.equal(uncategorized.totalExpense, 2_500); + assert.equal((await getSummary({ ...params, categoryId: 0, onlyConfirmed: true }, client)).totalExpense, 0); + assert.deepEqual((await getByCategory({ ...params, categoryId: 0, onlyConfirmed: false }, client)).map((item) => item.amount), [2_500]); + assert.deepEqual((await getByCategory({ ...params, categoryId: 0, onlyConfirmed: true }, client)), []); assert.equal((await getSummary({ ...params, from: '2026-08-01', to: '2026-08-31' }, client)).totalExpense, 7_000); assert.deepEqual((await getByCategory(params, client)).map((item) => item.amount), [6_000]); const timeseries = await getTimeseries({ ...params, granularity: 'month' }, client); @@ -48,6 +51,10 @@ async function testQueries(): Promise { const partial = await getTimeseries({ ...params, from: '2026-07-02', to: '2026-07-03', granularity: 'month' }, client); assert.equal(partial[0].expenseAmount, 0); assert.equal(partial[0].incomeAmount, 20_000); + const uncategorizedSeries = await getTimeseries({ ...params, categoryId: 0, onlyConfirmed: false, granularity: 'month' }, client); + assert.equal(uncategorizedSeries[0].expenseAmount, 2_500); + const confirmedUncategorizedSeries = await getTimeseries({ ...params, categoryId: 0, onlyConfirmed: true, granularity: 'month' }, client); + assert.equal(confirmedUncategorizedSeries[0].expenseAmount, 0); } finally { await client.query('ROLLBACK'); client.release(); diff --git a/frontend/package.json b/frontend/package.json index 93ec54e..5bc25f4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@family-budget/frontend", - "version": "0.11.0", + "version": "0.11.1", "private": true, "type": "module", "scripts": { diff --git a/frontend/src/pages/AnalyticsPage.tsx b/frontend/src/pages/AnalyticsPage.tsx index a1dc0ab..46e9ec6 100644 --- a/frontend/src/pages/AnalyticsPage.tsx +++ b/frontend/src/pages/AnalyticsPage.tsx @@ -68,7 +68,7 @@ export function AnalyticsPage() { from: period.from, to: period.to, ...(accountId ? { accountId: Number(accountId) } : {}), - ...(categoryId ? { categoryId: Number(categoryId) } : {}), + ...(categoryId !== '' ? { categoryId: Number(categoryId) } : {}), ...(onlyConfirmed ? { onlyConfirmed: true } : {}), };