202 lines
3.7 KiB
Markdown
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 |
|