Č. 01
Backend
Navrhujem a vyvíjam backendy v PHP a Symfony: API, integrácie so systémami iných firiem a platobné systémy. Pripravím aj Docker prostredie a CI, cez ktoré sa nasadzujú.
Pracujem formou agentického vývoja s AI a každú zmenu, ktorá ide von, kontrolujem sám.
- prijaté payment.captured
- podpis overený
- prvé doručenie, kľúč idempotencie uložený
- objednávka 24117 označená ako zaplatená
- odpoveď 200 OK
Presun platieb rezervačnej platformy zo Stripe na Revolut
- Problém
- Rezervačná platforma zájazdov na podujatia, s balíkmi hotela a letu, musela presunúť platby kartou zo Stripe na Revolut bez prerušenia objednávok. Platobná relácia v Stripe platí najviac 24 hodín, takže zákazník nikdy nemohol dostať na zaplatenie zálohy viac času.
- Čo som postavil
- Platobné rozhranie nezávislé od jedného poskytovateľa a za ním klient pre Revolut. Webhooky sa overujú cez HMAC s časovým oknom proti opakovanému odoslaniu, dajú sa bezpečne prijať dvakrát aj v ľubovoľnom poradí a ignorujú sa, ak nenesú náš tag objednávky, pretože účet obchodníka zdieľajú aj iné aplikácie. Keď objednávka vyprší nezaplatená, zablokované hotelové izby sa uvoľnia.
- Výsledok
- Od návrhu po zlúčenie do hlavnej vetvy za dva dni. Objednávka na frontende sa nezmenila, k Stripe sa dá vrátiť zmenou jedného riadku konfigurácie a lehota na zaplatenie už nie je obmedzená na 24 hodín (Revolut dovoľuje až 30 dní).
AI parser cenníkov od dodávateľov
- Problém
- Cestovná kancelária dostáva od dodávateľov hotelové a golfové cenníky ako PDF a tabuľkové súbory, každý v inom formáte. Niekto ich musel čítať a ceny ručne prepisovať do rezervačných systémov.
- Čo som postavil
- Asynchrónne spracovanie v Symfony, ktoré každú hodinu stiahne súbory dodávateľov z Google Drive a zistí, čo ktorý obsahuje. Tabuľky z nich vytiahne pomocná služba v Pythone, LLM z nich urobí štruktúrované ceny a druhý prechod AI ich skontroluje a opraví. Hotely sa prepoja so zdieľanou databázou hotelov firmy, len keď je zhoda istá, a náklady na AI sa sledujú pre každú úlohu aj projekt.
- Výsledok
- Ceny dodávateľov sa dajú vyhľadávať v administrácii aj cez partnerské REST API. Určujú ceny balíkov na predajných weboch firmy a výhodnejšie ponuky posielajú do jej nástroja na sledovanie cien. Spracovanie má približne 725 automatických testov.
Presun rezervačnej platformy z CRM do vlastnej databázy
- Problém
- Tá istá platforma zájazdov na podujatia používala ako jedinú databázu headless CRM: každá stránka partnera potrebovala 3 až 4 volania za sebou do API s limitom požiadaviek a nemala transakcie. Potvrdili sa dve chyby zo súbežného prístupu: poslednú izbu si mohli rezervovať dvaja zákazníci naraz a zákazníci dostávali potvrdenie platby dvakrát.
- Čo som postavil
- Dátová vrstva na MariaDB a Doctrine s jednorazovým importom z CRM. Počty izieb a stavy platieb sa menia atomicky, výplaty partnerom bežia v transakciách a rozhranie CRM nahradila pre zamestnancov administrácia v EasyAdmin.
- Výsledok
- Prechod trval dva dni a verejné API zostalo rovnaké do posledného bajtu. Obe chyby zo súbežného prístupu sú opravené a CRM sa už vôbec nepoužíva.