konta-walutowe/readme.md

202 lines
3.7 KiB
Markdown

# 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"
},
"initial": {
"type": "number",
"description": "początkowy stan konta w domyślnej walucie"
}
},
"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": {
"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
```
## Konfiguracja
Aplikacja posiada dostosowaną konfigurację, która obejmuje własności:
### `hsqldb`
Konfiguracja bazy danych
| Nazwa | Opis | Typ | Wartość domyślna |
|-------|------------------|--------|------------------|
| name | host bazy danych | string | db |
| port | port bazy danych | int | 9090 |
### `nbp`
Konfiguracja połączenia z Narodowym Bankiem Polskim
| Nazwa | Opis | Typ | Wartość domyślna |
|---------|--------------|--------|-------------------|
| baseurl | host API nbp | string | http://api.nbp.pl |
### `currency`
Konfiguracja walut
| Nazwa | Opis | Typ | Wartość domyślna |
|---------|-----------------------------------------|--------|------------------|
| initial | waluta początkowa przy zakładaniu konta | string | PLN |