
BackendWebbFocalPay
FocalPay Inventory Service
Bröt ut lagerhanteringen ur en större tjänst och byggde en egen tjänst för den, från plan och arkitektur till skyddsnät
- År
- aug. 2026
- Typ
- Backend
- Tekniker
- 12
- Spår
- Webb
Detaljer
Lagerhanteringen på FocalPay låg i en större tjänst som inte längre passade för uppgiften, och fel i lagersaldona hade börjat dyka upp. Jag fick ansvaret för att bryta ut den. Jag skrev migreringsplanen, designade den nya tjänsten och byggde den själv. Tanken var att den nya tjänsten skulle ta över lite i taget, inte att allt skulle bytas ut på en gång.
De viktiga besluten tog jag, och vart och ett finns dokumenterat i en ADR. Flytten görs stegvis enligt strangler-mönstret, och varje steg går att backa med en rollback som vi har övat på i förväg. Lagret räknas fram ur en huvudbok där inget skrivs över eller tas bort, så man kan alltid se varifrån en siffra kommer. Saldot ändras med atomiska uppdateringar, så att två samtidiga försäljningar aldrig kan skriva över varandra. Händelser skickas via en outbox till idempotenta mottagare, så ingenting försvinner och ingenting räknas två gånger. Tjänsten är dessutom hexagonal, och arkitekturreglerna kontrolleras i bygget så att affärslogiken inte blir beroende av ramverk eller infrastruktur.
Funktionellt hanterar tjänsten lagersaldon, inköpsorder till leverantörer med export till Excel, inleverans med batchnummer och bäst före-datum, varningar när varor närmar sig utgångsdatum, inventering, viktvaror, rapporter och avstämning av leveranser mot order.
För mig var det en del av leveransen att kunna visa att allt faktiskt fungerar. Tjänsten har över tusen automatiska tester, och många av dem körs mot riktiga databaser och meddelandeköer i containrar. Till det kommer end-to-end-tester mellan tjänster och lasttester, och jag bröt medvetet varje skydd för att se att bygget verkligen blev rött. Jag skrev också runbooks, felsökningsguider och en färdplan så att teamet kan förvalta tjänsten. Tjänsten är klar och testad och väntar nu på att den stegvisa flytten ska börja.
Tekniker
- Java
- Spring Boot
- MongoDB
- Kafka
- Event-Driven Architecture
- Transactional Outbox
- Hexagonal Architecture
- DDD
- ArchUnit
- Testcontainers
- k6
- ADR