No description
Find a file
2024-06-07 01:12:19 +02:00
.woodpecker feat!: JDK21 -> pattern matching, integration tests implementation & small fixes 2024-05-25 00:10:42 +02:00
src fix: SonarLint fixes 2024-05-25 00:47:12 +02:00
.editorconfig test: NBP rates model 2024-05-23 18:41:51 +02:00
.gitattributes Initial commit 2024-05-20 22:16:18 +02:00
.gitignore Initial commit 2024-05-20 22:16:18 +02:00
pom.xml feat: Release 1.0.0 2024-05-25 00:55:45 +02:00
readme.md docs: Readme 2024-06-07 01:12:19 +02:00

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

    {
      "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

    {
      "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}

    {
      "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

    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