From 476410fba8d1833d9e070d5e977d9f2038b72898 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Fri, 7 Jun 2024 01:12:19 +0200 Subject: [PATCH] docs: Readme --- readme.md | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..c1a193e --- /dev/null +++ b/readme.md @@ -0,0 +1,174 @@ +# 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", + "pln" + ] + } + ``` + ⇐ 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 + +```