openapi: 3.0.1
info:
  title: Airport Manager
  description: |
    Microservice Application for Airport Manager
  contact:
    name: Martin Slovik
    email: 540485@mail.muni.cz
    # insert your information as well
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  version: "1.1"
servers:
  - url: "{scheme}://{server}:{port}"
    description: my server
    variables:
      scheme:
        default: http
        enum:
          - http
          - https
      server:
        default: localhost
      port:
        default: "8080"
tags:
  - name: Core
    description: Microservice for core.
paths:
  /api/stewards:
    get:
      tags:
        - Steward
      summary: Get all stewards.
      description: |
        Returns an array of objects representing stewards.
      operationId: getAllStewards
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StewardDto'
    post:
      tags:
        - Steward
      summary: Create a new steward.
      description: |
        Creates a new steward and returns it as a response.
      operationId: createSteward
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewStewardDtoRequest'
        required: true
      responses:
        "201":
          $ref: '#/components/responses/SingleStewardDtoResponse'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/stewards/{id}:
    get:
      tags:
        - Steward
      summary: Get steward by id
      description: Returns a steward by id.
      operationId: getSteward
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StewardDto'
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    delete:
      tags:
        - Steward
      summary: Delete steward by id.
      operationId: deleteSteward
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Steward
      summary: Update steward by id.
      operationId: updateSteward
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      description: |
        Updates a steward by id and returns it as a response.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewStewardDtoRequest'
        required: true
      responses:
        "200":
          $ref: '#/components/responses/SingleStewardDtoResponse'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/stewards/{stewardId}/flights/{flightId}:
    post:
      tags:
        - Steward
      summary: Assign steward to a flight.
      operationId: createStewardFlights
      parameters:
        - name: stewardId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: flightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "201":
          $ref: '#/components/responses/SingleStewardDtoResponse'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    delete:
      tags:
        - Steward
      summary: Delete assignment of steward to a flight.
      operationId: deleteStewardFlights
      parameters:
        - name: stewardId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: flightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/stewards/paged:
    get:
      tags:
        - Steward
      summary: Paged stewards
      description: |
        Returns a page of stewards.
        The parameter `page` specifies zero-based index of the requested page,
        and the parameter `size` specifies the size of the page.
      operationId: getStewardsPaged
      parameters:
        - name: page
          in: query
          description: Zero-based page index (0..N)
          required: false
          schema:
            minimum: 0
            type: integer
            default: 0
        - name: size
          in: query
          description: The size of the page to be returned
          required: false
          schema:
            minimum: 1
            type: integer
            default: 20
        - name: sort
          in: query
          description: "Sorting criteria in the format: property,(asc|desc). Default\
          \ sort order is ascending. Multiple sort criteria are supported."
          required: false
          schema:
            type: array
            items:
              type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageStewardDto'
  /api/flights:
    get:
      tags:
        - Flight
      summary: Get all flights.
      description: |
        Returns an array of objects representing flights.
      operationId: getAllFlights
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FlightDto'
    post:
      tags:
        - Flight
      summary: Create a new flight.
      description: |
        Creates a new flight and returns it as a response.
      operationId: createFlight
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewFlightDtoRequest'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlightDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/flights/{id}:
    get:
      tags:
        - Flight
      summary: Get flight by id.
      description: |
        Returns an object representing a flight.
      operationId: getFlightById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlightDto'
    delete:
      tags:
        - Flight
      summary: Delete flight by id.
      operationId: deleteFlight
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Flight
      summary: Update flight by id.
      operationId: updateFlight
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      description: Updates a flight by id and returns it as a response.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewFlightDtoRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlightDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airplaneTypes:
    get:
      tags:
        - AirplaneType
      summary: Get all airplane types.
      description: |
        Returns an array of objects representing airplane types.
      operationId: getAllAirplaneTypes
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AirplaneTypeDto'
    post:
      tags:
        - AirplaneType
      summary: Create a new airplane type.
      description: Creates a new airplane type and returns it as a response.
      operationId: createAirplaneType
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewAirplaneTypeDtoRequest'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneTypeDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airplaneTypes/{id}:
    get:
      tags:
        - AirplaneType
      summary: Get airplane type by id.
      description: Returns an object representing an airplane type.
      operationId: getAirplaneTypeById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneTypeDto'
    delete:
      tags:
        - AirplaneType
      summary: Delete airplane type by id.
      operationId: deleteAirplaneType
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - AirplaneType
      summary: Update airplane type by id.
      operationId: updateAirplaneType
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      description: Updates a airplane type by id and returns it as a response.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewAirplaneTypeDtoRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneTypeDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airplanes:
    get:
      tags:
        - Airplane
      summary: Get all airplanes.
      description: Returns an array of objects representing airplanes.
      operationId: getAllAirplanes
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AirplaneDto'
    post:
      tags:
        - Airplane
      summary: Create a new airplane.
      description: Creates a new airplane and returns it as a response.
      operationId: createAirplane
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewAirplaneDtoRequest'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airplanes/{id}:
    get:
      tags:
        - Airplane
      summary: Get airplane by id.
      description: Returns an object representing an airplane.
      operationId: getAirplaneById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneDto'
    delete:
      tags:
        - Airplane
      summary: Delete airplane by id.
      operationId: deleteAirplane
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Airplane
      summary: Update airplane by id.
      operationId: updateAirplane
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      description: Updates a airplane by id and returns it as a response.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewAirplaneDtoRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airplanes/{airplaneId}/airplaneTypes/{airplaneTypeId}:
    post:
      tags:
        - Airplane
      summary: Assign airplane type to a airplane.
      operationId: assignAirplaneType
      parameters:
        - name: airplaneId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: airplaneTypeId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Airplane
      summary: Update assignment of airplane type to an airplane.
      operationId: updateAirplaneTypeAssignment
      parameters:
        - name: airplaneId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: airplaneTypeId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirplaneDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    delete:
      tags:
        - Airplane
      summary: Delete assignment of airplane type to an airplane.
      operationId: deleteAirplaneTypeAssignment
      parameters:
        - name: airplaneId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: airplaneTypeId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/countries:
    get:
      tags:
        - Country
      summary: Get all countries.
      description: Returns an array of objects representing countries.
      operationId: getAllCountries
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CountryDto'
    post:
      tags:
        - Country
      summary: Create a new country.
      description: Creates a new country and returns it as a response.
      operationId: createCountry
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCountryDtoRequest'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountryDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/countries/{id}:
    get:
      tags:
        - Country
      summary: Get country by id.
      description: Returns an object representing a country.
      operationId: getCountryById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountryDto'
    delete:
      tags:
        - Country
      summary: Delete country by id.
      operationId: deleteCountry
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Country
      summary: Update country by id.
      operationId: updateCountry
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      description: Updates a country by id and returns it as a response.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCountryDtoRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountryDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/cities:
    get:
      tags:
        - City
      summary: Get all cities.
      description: Returns an array of objects representing cities.
      operationId: getAllCities
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CityDto'
    post:
      tags:
        - City
      summary: Create a new city.
      description: Creates a new city and returns it as a response.
      operationId: createCity
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCityDtoRequest'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/cities/{id}:
    get:
      tags:
        - City
      summary: Get city by id.
      description: Returns an object representing a city.
      operationId: getCityById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDto'
    delete:
      tags:
        - City
      summary: Delete city by id.
      operationId: deleteCity
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - City
      summary: Update city by id.
      operationId: updateCity
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      description: Updates a city by id and returns it as a response.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewCityDtoRequest'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/cities/{cityId}/countries/{countryId}:
    post:
      tags:
        - City
      summary: Assign country to a city.
      operationId: assignCountry
      parameters:
        - name: cityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: countryId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - City
      summary: Update assignment of country to a city.
      operationId: updateCountryAssignment
      parameters:
        - name: cityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: countryId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    delete:
      tags:
        - City
      summary: Delete assignment of country to a city.
      operationId: deleteCountryAssignment
      parameters:
        - name: cityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: countryId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/cities/{cityId}/airports/{airportId}:
    post:
      tags:
        - City
      summary: Assign airport to a city.
      operationId: assignAirport
      parameters:
        - name: cityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - City
      summary: Update assignment of airport to a city.
      operationId: updateAirportAssignment
      parameters:
        - name: cityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CityDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    delete:
      tags:
        - City
      summary: Delete assignment of airport to a city.
      operationId: deleteAirportAssignment
      parameters:
        - name: cityId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airports:
    get:
      tags:
        - Airport
      summary: Get all airports.
      description: Returns an array of objects representing airports.
      operationId: getAllAirports
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AirportDto'
    post:
      tags:
        - Airport
      summary: Create a new airport.
      description: Creates a new airport and returns it as a response.
      operationId: createAirport
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewAirportDtoRequest'
        required: true
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirportDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airports/{id}:
    get:
      tags:
        - Airport
      summary: Get airport by id.
      description: Returns an object representing an airport.
      operationId: getAirportById
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirportDto'
    delete:
      tags:
        - Airport
      summary: Delete airport by id.
      operationId: deleteAirport
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Airport
      summary: Update city by id.
      operationId: updateAirport
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
            format: int64
      description: Updates a airport by id and returns it as a response.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirportDto'
        required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirportDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airports/{airportId}/departingFlights/{departingFlightId}:
    post:
      tags:
        - Airport
      summary: Assign departing flight to an airport.
      operationId: assignDepartingFlight
      parameters:
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: departingFlightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirportDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Airport
      summary: Update assignment of departing flight to an airport.
      operationId: updateDepartingFlightAssignment
      parameters:
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: departingFlightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirportDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    delete:
      tags:
        - Airport
      summary: Delete assignment of departing flight to an airport.
      operationId: deleteDepartingFlightAssignment
      parameters:
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: departingFlightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
  /api/airports/{airportId}/arrivingFlights/{arrivingFlightId}:
    post:
      tags:
        - Airport
      summary: Assign arriving flight to an airport.
      operationId: assignArrivingFlight
      parameters:
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: arrivingFlightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "201":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirportDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    put:
      tags:
        - Airport
      summary: Update assignment of arriving flight to an airport.
      operationId: updateArrivingFlightAssignment
      parameters:
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: arrivingFlightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirportDto'
        "400":
          description: Input data not correct
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
    delete:
      tags:
        - Airport
      summary: Delete assignment of arriving flight to an airport.
      operationId: deleteArrivingFlightAssignment
      parameters:
        - name: airportId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: arrivingFlightId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        "204":
          description: Deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
components:
  schemas:
    DomainEntityDto:
      title: Domain Entity
      description: Represents a Domain Entity
      type: object
      required:
        - id
      properties:
        id:
          type: integer
          description: unique id
          format: int64
          example: 1
      discriminator:
        propertyName: objectType
    ErrorMessage:
      title: Error Message
      description: Response body for HTML statuses.
      type: object
      properties:
        timestamp:
          type: string
          description: time in ISO format
          format: date-time
          example: 2022-12-21T18:52:10.757Z
        status:
          type: integer
          description: HTTP status code
          format: int32
          example: 404
        error:
          type: string
          description: HTTP status text
          example: Not Found
        message:
          type: string
          description: reason for error
          example: entity not found
        path:
          type: string
          description: URL path
          example: /api/stewards/1
    StewardDto:
      allOf:
        - $ref: '#/components/schemas/DomainEntityDto'
      type: object
      title: Steward
      description: Represents a steward on a flight.
      required:
        - id
        - firstName
        - lastName
      properties:
        firstName:
          type: string
          description: first name of a steward
          example: John
        lastName:
          type: string
          description: last name of a steward
          example: Doe
        flights:
          type: array
          description: flights assigned to a steward
          items:
            $ref: '#/components/schemas/FlightDto'
    NewStewardDtoRequest:
      type: object
      title: New Steward Request
      description: Object for requesting a new Steward.
      required:
        - firstName
        - lastName
      properties:
        firstName:
          type: string
          description: first name of a steward
          example: John
        lastName:
          type: string
          description: last name of a steward
          example: Doe
    FlightDto:
      allOf:
        - $ref: '#/components/schemas/DomainEntityDto'
      type: object
      title: Flight
      description: Represents a flight.
      required:
        - id
        - departureTime
        - arrivalTime
        - stewards
        - airplane
        - departureAirport
        - arrivalAirport
      properties:
        departureTime:
          type: string
          description: time of flight departure
          format: date-time
          example: 2022-12-22T12:04:04.493908908+01:00
        arrivalTime:
          type: string
          description: time of flight arrival
          format: date-time
          example: 2022-12-22T12:04:04.493908908+01:00
        stewards:
          type: array
          description: stewards assigned to a flight
          items:
            $ref: '#/components/schemas/StewardDto'
        airplane:
          $ref: '#/components/schemas/AirplaneDto'
        departureAirport:
          $ref: '#/components/schemas/AirportDto'
        arrivalAirport:
          $ref: '#/components/schemas/AirportDto'
    NewFlightDtoRequest:
      type: object
      title: New Flight Request
      description: Object for requesting a new Flight.
      required:
        - departureTime
        - arrivalTime
      properties:
        departureTime:
          type: string
          description: time of flight departure
          format: date-time
          example: 2022-12-22T12:04:04.493908908+01:00
        arrivalTime:
          type: string
          description: time of flight arrival
          format: date-time
          example: 2022-12-22T12:04:04.493908908+01:00
    AirplaneTypeDto:
      allOf:
        - $ref: '#/components/schemas/DomainEntityDto'
      type: object
      title: Airplane Type
      description: Represents an Airplane Type.
      required:
        - id
        - name
      properties:
        name:
          type: string
          description: airplane type name
          example: Boeing 747
    NewAirplaneTypeDtoRequest:
      type: object
      title: New Airplane Type Request
      description: Object for requesting a new Airplane Type.
      required:
        - name
      properties:
        name:
          type: string
          description: airplane type name
          example: Boeing 747
    AirplaneDto:
      allOf:
        - $ref: '#/components/schemas/DomainEntityDto'
      type: object
      title: Airplane
      description: Represents an Airplane.
      required:
        - id
        - name
        - capacity
        - type
      properties:
        name:
          type: string
          description: airplane name
          example: Spitfire
        capacity:
          type: integer
          description: airplane seat capacity
          format: int32
          example: 150
        type:
          $ref: '#/components/schemas/AirplaneTypeDto'
    NewAirplaneDtoRequest:
      type: object
      title: New Airplane Request
      description: Object for requesting a new Airplane.
      required:
        - name
        - capacity
      properties:
        name:
          type: string
          description: airplane name
          example: Spitfire
        capacity:
          type: integer
          description: airplane seat capacity
          format: int32
          example: 150
    PageableObject:
      type: object
      title: Pageable Object
      properties:
        offset:
          type: integer
          format: int64
        sort:
          $ref: '#/components/schemas/SortObject'
        pageSize:
          type: integer
          format: int32
        pageNumber:
          type: integer
          format: int32
        paged:
          type: boolean
        unpaged:
          type: boolean
    SortObject:
      type: object
      title: Sort Object
      properties:
        empty:
          type: boolean
        sorted:
          type: boolean
        unsorted:
          type: boolean
    PageStewardDto:
      type: object
      title: Paged Stewards
      properties:
        totalPages:
          type: integer
          format: int32
        totalElements:
          type: integer
          format: int64
        first:
          type: boolean
        last:
          type: boolean
        size:
          type: integer
          format: int32
        content:
          type: array
          items:
            $ref: '#/components/schemas/StewardDto'
        number:
          type: integer
          format: int32
        sort:
          $ref: '#/components/schemas/SortObject'
        numberOfElements:
          type: integer
          format: int32
        pageable:
          $ref: '#/components/schemas/PageableObject'
        empty:
          type: boolean
    CountryDto:
      allOf:
        - $ref: '#/components/schemas/DomainEntityDto'
      type: object
      title: Country
      description: Represents a country.
      required:
        - id
        - name
      properties:
        name:
          type: string
          description: country name
          example: Canada
    NewCountryDtoRequest:
      type: object
      title: New Country Request
      description: Object for requesting a new Country.
      required:
        - name
      properties:
        name:
          type: string
          description: country name
          example: Canada
    CityDto:
      allOf:
        - $ref: '#/components/schemas/DomainEntityDto'
      type: object
      title: City
      description: Represents a City in a Country containing Airports.
      required:
        - id
        - name
      properties:
        name:
          type: string
          description: city name
          example: London
        country:
          $ref: '#/components/schemas/CountryDto'
        airports:
          type: array
          items:
            $ref: '#/components/schemas/AirportDto'
    NewCityDtoRequest:
      type: object
      title: New City Request
      description: Object for requesting a new City.
      required:
        - name
      properties:
        name:
          type: string
          description: city name
          example: London
    GPSLocationDto:
      type: object
      title: GPS Location
      description: Represents a GPS Location of latitude and longitude.
      required:
        - latitude
        - longitude
      properties:
        latitude:
          type: number
          format: double
          example: 41.40338
        longitude:
          type: number
          format: double
          example: 2.17403
    AirportDto:
      allOf:
        - $ref: '#/components/schemas/DomainEntityDto'
      type: object
      title: Airport
      description: Represents an Airport.
      required:
        - id
        - name
        - code
        - departingFlights
        - arrivingFlights
        - city
        - location
      properties:
        name:
          type: string
          description: airport name
          example: John F. Kennedy International Airport
        code:
          type: string
          description: airport code in IATA format
          example: JFK
        departingFlights:
          type: array
          items:
            $ref: '#/components/schemas/FlightDto'
        arrivingFlights:
          type: array
          items:
            $ref: '#/components/schemas/FlightDto'
        city:
          $ref: '#/components/schemas/CityDto'
        location:
          $ref: '#/components/schemas/GPSLocationDto'
    NewAirportDtoRequest:
      type: object
      title: New Airport Type Request
      description: Object for requesting a new Airport.
      required:
        - name
        - code
        - cityId
        - location
      properties:
        name:
          type: string
          description: airport name
          example: John F. Kennedy International Airport
        code:
          type: string
          description: airport code in IATA format
          example: JFK
        cityId:
          type: integer
          format: int64
        location:
          $ref: '#/components/schemas/GPSLocationDto'
  responses:
    SingleStewardDtoResponse:
      description: Response containing a single Steward.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StewardDto'
      links:
        link_to_getSteward:
          operationId: getSteward
          parameters:
            id: $response.body#/id
          description: |
            The `id` value returned in the response can be used as
            the `id` parameter in `GET /stewards/{id}`.