feat(değerlendirme): ay sonu değerlendirmesi — 4 soru ve döküm (backend)

- GET /periods/{id}/review: param, hedef, harcanan, biriken; grup, kategori ve hafta bazında planlanan/gerçekleşen
- Dönemde "Nasıl daha iyi yapabilirim?" metni (reflection_md)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-12 11:54:57 +03:00
parent e4c8d971fc
commit 8ec1fd6f25
18 changed files with 625 additions and 4 deletions
+1
View File
@@ -13,6 +13,7 @@ const period: Period = {
days: 31,
status: 'open',
savings_goal: 500_000,
reflection_md: null,
version: 3,
weeks: [
{ index: 1, start_date: '2026-12-01', last_date: '2026-12-06', days: 6 },
+5 -1
View File
@@ -18,4 +18,8 @@ last_date: string, days: number, status: PeriodStatus,
/**
* Kuruş
*/
savings_goal: number, version: number, weeks: Array<PeriodWeek>, };
savings_goal: number,
/**
* "Nasıl daha iyi yapabilirim?" (Markdown)
*/
reflection_md: string | null, version: number, weeks: Array<PeriodWeek>, };
+38
View File
@@ -0,0 +1,38 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { ReviewCategory } from "./ReviewCategory";
import type { ReviewGroup } from "./ReviewGroup";
import type { ReviewWeek } from "./ReviewWeek";
export type PeriodReview = { income_total: number, fixed_expense_total: number, carryover_debt: number, carryover_surplus: number,
/**
* 1. Ne kadar param vardı? (gelir − sabit gider − borç + artı)
*/
available: number,
/**
* 2. Ne kadar biriktirmek istedim?
*/
savings_goal: number,
/**
* 3. Ne kadar harcadım?
*/
spent_total: number,
/**
* 4. Ne kadar biriktirdim? (negatifse açık var)
*/
realized_savings: number,
/**
* Gerçekleşen − hedef birikim (negatifse hedefin altında)
*/
savings_gap: number,
/**
* 4 grup, sabit sırada
*/
groups: Array<ReviewGroup>,
/**
* Harcama olan kategoriler, çoktan aza
*/
categories: Array<ReviewCategory>,
/**
* Haftalar: 4 grubun toplamı
*/
weeks: Array<ReviewWeek>, };
+5 -1
View File
@@ -1,3 +1,7 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type PeriodUpdateRequest = { name?: string, start_date?: string, end_date?: string, savings_goal?: number, version?: number, };
export type PeriodUpdateRequest = { name?: string, start_date?: string, end_date?: string, savings_goal?: number,
/**
* "Nasıl daha iyi yapabilirim?" (Markdown); boş metin → kaldır
*/
reflection_md?: string, version?: number, };
+8
View File
@@ -0,0 +1,8 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Group } from "./Group";
export type ReviewCategory = { category_id: string, group: Group, spent: number,
/**
* Kayıt sayısı
*/
count: number, };
+8
View File
@@ -0,0 +1,8 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Group } from "./Group";
export type ReviewGroup = { group: Group,
/**
* Aylık bütçe
*/
planned: number, spent: number, };
+3
View File
@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type ReviewWeek = { index: number, start_date: string, last_date: string, planned: number, spent: number, };