5.3 KiB
5.3 KiB
plan_id, title, completed, storage, quality_radar
| plan_id | title | completed | storage | quality_radar |
|---|---|---|---|---|
| 20260706-1248-fundament-wydatki-przychody | Fundament finansePRO + moduł wydatków/przychodów bieżących | 2026-07-06T13:20:00+02:00 | plan-first | degraded |
Summary: Fundament finansePRO + moduł wydatków/przychodów bieżących
Objective
Postawić fundament aplikacji finansePRO na CodeIgniter 4 (MySQL z .env), logowanie jednego użytkownika oraz moduł finansów bieżących: kategorie hierarchiczne z typem, operacje z filtrami i dashboard z wykresami ApexCharts.
What Was Built
| Area | Result |
|---|---|
| Fundament CI4 | CodeIgniter 4.7.3 zainstalowany (Composer), Database.php czyta klucze z istniejącego .env, czyste URL-e (indexPage='') |
| Logowanie | Filtr auth + Auth::login/logout weryfikuje wobec user_email/user_password z .env, sesja logged_in |
| Schemat DB | Migracje categories (hierarchia parent_id, type, FK self SET NULL) i operations (FK category_id SET NULL), seeder 9 kategorii |
| CRUD kategorii/operacji | Pełny CRUD, filtry (data/kategoria/typ), sumy przychody/wydatki/saldo, blokada usunięcia używanej kategorii |
| Dashboard | 3 wykresy ApexCharts (bilans miesięczny, wydatki wg kategorii donut, saldo skumulowane) + kafelki podsumowań |
| Deployment | Root .htaccess (forward do public/, HTTPS jak crmPRO), sekcja produkcyjna w .env |
Files Modified
composer.json,composer.lock,vendor/,spark,public/,writable/— szkielet CI4app/Config/Database.php— hostname/username/password/database z.env(jedno źródło prawdy)app/Config/Routes.php— trasy publiczne + grupa chroniona filtremauthapp/Config/Filters.php— aliasauthapp/Config/App.php—indexPage=''app/Controllers/BaseController.php— helperyform,urlapp/Filters/AuthFilter.php— ochrona trasapp/Controllers/{Auth,Categories,Operations,Dashboard}.phpapp/Models/{CategoryModel,OperationModel}.phpapp/Database/Migrations/2026-07-06-100001_CreateCategories.php,...100002_CreateOperations.phpapp/Database/Seeds/DefaultCategoriesSeeder.phpapp/Views/layout/main.php,auth/login.php,categories/{index,form}.php,operations/{index,form}.php,dashboard/index.php.env—CI_ENVIRONMENT,app.baseURL(produkcja).htaccess(root) — forward dopublic/dla hostidoC:/xampp/php/php.ini— włączoneextension=intl(poza repo, wymóg CI4)
Acceptance Criteria Results
| Criterion | Status | Evidence |
|---|---|---|
| AC-1: start + połączenie z DB | Pass | php spark serve startuje, migrate łączy się z bazą hostido |
AC-2: logowanie z .env |
Pass | curl: poprawne dane → 303 /dashboard; złe → powrót; /logout → /login; trasa chroniona → /login |
| AC-3: kategorie (hierarchia+typ) | Pass | CRUD OK; parent_id respektowany; usunięcie używanej kategorii zablokowane komunikatem |
| AC-4: CRUD operacji + filtry | Pass | filtry income/expense/zakres dat zwracają dokładne kwoty; sumy 5000/450/4550 |
| AC-5: dashboard z wykresami | Pass | JSON monthly/byCat/running poprawne; 3 wykresy ApexCharts renderowane |
Verification Results
| Check | Result | Notes |
|---|---|---|
php spark migrate |
Pass | 2 migracje na bazie hostido |
php spark db:seed DefaultCategoriesSeeder |
Pass | 9 kategorii |
php spark serve + curl (login/logout/CRUD/filtry/dashboard) |
Pass | pełny przepływ end-to-end |
| Wymuszenie typu operacji przez kategorię | Pass | wysłane złe typy zostały poprawione wg kategorii |
| Blokada usunięcia używanej kategorii | Pass | redirect + komunikat |
| Dane testowe | Cleaned | operacje: 0, kategorie seed: 9 |
Quality Radar Results
Status: degraded
- New risks: brak nowych ryzyk duplikacji (jscpd/ast-grep wyłączone polityką)
- Resolved risks: config DB — jedno źródło prawdy (
.env); typ operacji — wymuszany przez kategorię - Deferred risks: pełna indeksacja
codebase-memory-mcpodłożona do$paul-map-codebase; weryfikacja przeprowadzona runtime'owo - Raw outputs:
.paul/codebase/tooling_status.md
Deviations
- Dodano
CI_ENVIRONMENTiapp.baseURLdo.env(potrzebne dla dev/prod; nie dubluje configu DB). app/Config/App.php:indexPage=''(czyste URL-e) — poza pierwotną listą plików.- Włączono
intlw XAMPPphp.ini; zainstalowano Composer (środowisko). - Dev łączy się do zdalnej bazy hostido (lokalny MySQL zgaszony); produkcyjnie
localhost. - Dodano root
.htaccess(naprawa 403 na hostido) — poza pierwotnym zakresem, wynikło z wdrożenia.
Key Decisions / Patterns
- Jedno źródło prawdy dla DB:
Database.phpczyta wyłącznie klucze.env, wybór host wgENVIRONMENT. - Typ operacji narzuca kategoria: spójność wymuszana po stronie serwera (
Operations::persist) + UX w JS. - CI4 na współdzielonym hostingu: root
.htaccessforwarduje dopublic/(wzorzec z crmPRO dla HTTPS).
Follow-up
- Plan 2: moduł inwestycji —
inv_operations(wpłaty/wypłaty) +inv_valuations(ręczne snapshoty wartości), wykres suma wpłat vs bieżąca wartość vs zarobek. - Opcjonalnie:
$paul-map-codebase(pełny indeks) przed Planem 2. - Weryfikacja wdrożenia produkcyjnego na
https://finanse.projectpro.pl/(docroot/.htaccess,vendor/, prawawritable/).