# Wymiana walut Prosty mikroserwis stworzony na potrzeby rekrutacji ## Założenia - PESEL jedynym identyfikatorem - Jedno konto na PESEL - Użytkownik pełnoletni - Wymiana walut na podstawie tabeli NBP - Baza danych in-memory ## Interfejsy - stworzenie konta ⇒ POST `/api/user` ```json { "type": "object", "properties": { "name": { "type": "string" }, "surname": { "type": "string" }, "pesel": { "type": "string" }, "pln": { "type": "number", "description": "początkowy stan konta w złotówkach" } }, "required": [ "name", "surname", "pesel", "initial" ] } ``` ⇐ 204/400/409/500 - pobranie informacji o koncie ⇒ GET `/api/user/{pesel}` ⇐ 200/400/404/500 ```json { "type": "object", "def": { "currency": { "type": "object", "properties": { "symbol": { "type": "string" }, "amount": { "type": "number" } }, "required": [ "symbol", "amount" ] } }, "properties": { "name": { "type": "string" }, "surname": { "type": "string" }, "pesel": { "type": "string" }, "currencies": { "$comment": "TODO: Map -> List", "type": "array", "items": { "$ref": "#/def/currency" } } }, "required": [ "name", "surname", "pesel", "currencies" ] } ``` - zlecenie wymiany walut ⇒ POST `/api/exchange/{pesel}` ```json { "type": "object", "properties": { "pesel": { "type": "string" }, "from": { "type": "string", "description": "waluta źródłowa" }, "to": { "type": "string", "description": "waluta docelowa" }, "toBuy": { "type": "number", "description": "ilość do zakupu" }, "toSell": { "type": "number", "description": "ilość do sprzedaży" } }, "oneOf": [ { "required": [ "pesel", "from", "to", "toBuy" ] }, { "required": [ "pesel", "from", "to", "toSell" ] } ] } ``` ⇐ 200/400/404/500 patrz: pobranie informacji o koncie ## Architektura ```mermaid flowchart LR actor["fa:fa-person"] subgraph NBP tabC["Tabela C"] end subgraph proces subgraph spring-boot core subgraph endpoint user exchange end end hsqldb end actor <--> user actor <--> exchange endpoint <--> core core <--> tabC core <-- hsql.port --> hsqldb ```