Tak název už máme a tím je už skoro hotovo. 🙂 No dobře, ještě je třeba na tom trochu vyšívat. Projekt jsem rozdělil do několika milníků a tvorbu Contexica budu popisovat právě z pohledu jednotlivých milníků.
Milník 1
Pro milník 1 jsem si stanovil tyto úkoly:
- přihlašovací stránka (jméno a heslo),
- dashboard s placeholder daty a základní API,
- přihlášení, odhlášení, údaje o přihlášeném uživateli a health-check,
- dashboard bude zatím ukazovat vymyšlená čísla, protože dokumenty ještě neexistují. Nešlo mi o funkčnost, ale o to, aby bylo vidět, jak bude aplikace vypadat a jak se v ní bude navigovat.
Technologie jsou záměrně nudné: PHP s Laravelem, MariaDB jako samostatná databáze a Sanctum pro tokeny. PHP má své limity, ale pro tento účel nejsou úzkým hrdlem a navíc ho znám z projektů pro WordPress. Za úzké hrdlo naopak považuji spíš OCR a vyhledávání než samotný jazyk, ve kterém aplikace běží.
Proč chci API
Webové rozhraní je jen tenký klient nad API a používá stejné endpointy, které bude mít k dispozici kdokoli jiný. Vím, proč to chci: u různých DMS jsem během své kariéry viděl, co dokážou dodavatelské zásahy přímo do kódu při každém upgradu. Jednak je to pracné a jednak je to pro uživatele s každou aktualizací drahé. Jádro Contexica proto nemá být modifikovatelné. Moduly poběží jako externí služby a budou se k jádru registrovat přes API. Dnes se to ještě nepoužívá, ale struktura projektu tomu už nebrání. Autentizaci jsem schválně nechal jednoduchou. Žádné AD, žádné dvoufaktorové přihlášení, zatím jen jméno a heslo. Datový model ale počítá s tím, že přihlašovacích metod může být více, takže se to dá později doplnit. Pro milník 1 to nyní není důležité.
Technické pozadí
Trochu bych chtěl přiblížit, jak tento projekt vzniká a proč se vyvíjí tak rychle. Je to tak, že kostru rozepisuji já, ale většinu kódu píše Devin. Vítejme v nové éře. Pro sebe jsem si to nazval half vibecoding. Protože jsem ale nechtěl slepě věřit kódu, který jsem sám nenapsal, obsahuje zadání i povinná kritéria kvality: rozsáhlé automatické testy, statickou analýzu a sebekontrolu agenta před odevzdáním.
Výsledek milníku 1 vypadá takto:
php -la Pint bez chyb (45 souborů),- PHPStan level 8 bez chyb,
- 124 testů se 594 asercemi, všechny prošly,
- pokrytí kódu 100 % při požadovaném minimu 90 %,
composer auditbez známých zranitelností,- soubor
.envnení ve verzování.
Agent navíc ověřil composer validate --strict, kompilaci šablon, cache konfigurace a rout i čistou instalaci přes migrate:fresh --seed, přesně podle README.
Co v reportu nebylo v pořádku
Report poctivě uváděl i slabá místa a dvě z nich jsem nechtěl nechat být. Ochrana dashboardu byla původně jen na straně klienta, takže by se k němu někdo bez přihlášení dostal přímým požadavkem. To u systému, který má časem držet smlouvy a faktury, není kosmetická věc. Druhým problémem bylo, že repozitář neměl jediný commit a celý stav existoval jen na disku. Obojí jsem opravil okamžitě, ještě v rámci milníku 1. Čím později bych to udělal, tím více práce by s tím bylo. Ochranu teď vynucuje server a repozitář má první commit.
Co v testování zbývá? Třeba to, že JavaScript není pokrytý testy a že měření pokrytí počítá jen řádky, ne větve. U dashboardu s placeholdery to zatím není kritické. Jakmile přibude skutečná interaktivní logika, vrátím se k tomu. A samozřejmě také automatizované uživatelské testy à la Selenium.
Co bude dál
Milník 2 je správa typů dokumentů a oddělení. Právě typy dokumentů jsou jádrem celého systému, protože na nich později stojí workflow, oprávnění i vyhledávání. Metadata každého typu půjdou nastavit zvlášť, takže faktura nebude zobrazovat například „platnost smlouvy“. Hodnoty metadat u konkrétních dokladů budu ukládat v JSON sloupci, ne ve vazební tabulce. U velkého DMS s tisíci záznamy měsíčně jsem viděl, že se vyhledávání po roce provozu přetížilo, a to se napravuje špatně. Takže see you later 🙂