Files
2026-07-06 20:16:00 +02:00

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 CI4
  • app/Config/Database.php — hostname/username/password/database z .env (jedno źródło prawdy)
  • app/Config/Routes.php — trasy publiczne + grupa chroniona filtrem auth
  • app/Config/Filters.php — alias auth
  • app/Config/App.phpindexPage=''
  • app/Controllers/BaseController.php — helpery form, url
  • app/Filters/AuthFilter.php — ochrona tras
  • app/Controllers/{Auth,Categories,Operations,Dashboard}.php
  • app/Models/{CategoryModel,OperationModel}.php
  • app/Database/Migrations/2026-07-06-100001_CreateCategories.php, ...100002_CreateOperations.php
  • app/Database/Seeds/DefaultCategoriesSeeder.php
  • app/Views/layout/main.php, auth/login.php, categories/{index,form}.php, operations/{index,form}.php, dashboard/index.php
  • .envCI_ENVIRONMENT, app.baseURL (produkcja)
  • .htaccess (root) — forward do public/ dla hostido
  • C:/xampp/php/php.ini — włączone extension=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-mcp odłożona do $paul-map-codebase; weryfikacja przeprowadzona runtime'owo
  • Raw outputs: .paul/codebase/tooling_status.md

Deviations

  • Dodano CI_ENVIRONMENT i app.baseURL do .env (potrzebne dla dev/prod; nie dubluje configu DB).
  • app/Config/App.php: indexPage='' (czyste URL-e) — poza pierwotną listą plików.
  • Włączono intl w XAMPP php.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.php czyta wyłącznie klucze .env, wybór host wg ENVIRONMENT.
  • Typ operacji narzuca kategoria: spójność wymuszana po stronie serwera (Operations::persist) + UX w JS.
  • CI4 na współdzielonym hostingu: root .htaccess forwarduje do public/ (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/, prawa writable/).