Skip to content

Koululentovaraus API

Kimmo Muli edited this page Apr 25, 2023 · 13 revisions

/api/:airfieldCode/timeslots

Seuraavat päätepisteet ovat saatavilla varausikkunoiden kanssa työskentelyyn:

:airfieldCode yksilöi rajapintakutsut tiettyyn lentokenttään ❗

1. Hae varausikkunat aikavälillä

  • Menetelmä: GET
  • Päätepiste: /api/:airfieldCode/timeslots
  • Kuvaus: Hakee kaikki varausikkunat annetulla aikavälillä.
  • URL-parametrit:
    • from: aloituspäivämäärä (ISO 8601 -muodossa)
    • until: lopetuspäivämäärä (ISO 8601 -muodossa)
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Lista varausikkuna-objekteja.

Esimerkki

Pyyntö
GET /api/EFHK/timeslots?from=2023-05-01T00:00:00Z&until=2023-05-01T23:59:59Z
Vastaus
[
  {
    "id": 1,
    "start": "2023-05-01T08:00:00Z",
    "end": "2023-05-01T08:30:00Z",
    "type": "available",
    "group": null,
    "info": null,
    "airfieldCode": "EFHK"
  },
  {
    "id": 2,
    "start": "2023-05-01T09:30:00Z",
    "end": "2023-05-01T10:00:00Z",
    "type": "available",
    "group": null,
    "info": null,
    "airfieldCode": "EFHK"
  }
]

2. Poista varausikkuna

  • Menetelmä: DELETE
  • Päätepiste: /api/:airfieldCode/timeslots/:id
  • Kuvaus: Poistaa varausikkunan annetulla ID:llä.
  • URL-parametrit:
    • id: Varausikkunan yksilöllinen id/koodi.
Vastaus
  • Tila: 200
  • Sisältötyyppi: text/plain
  • Vastauksen sisältö: Viesti varausikkunan poistosta.

Esimerkki

Pyyntö
DELETE /api/EFHK/timeslots/1
Vastaus
`Timeslot 1 deleted`

3. Luo uusi varausikkuna

  • Menetelmä: POST
  • Päätepiste: /api/:airfieldCode/timeslots
  • Kuvaus: Luo uuden varausikkunan.
  • Lähetettävä data: JSON-objekti, joka sisältää uuden varausikkunan tiedot.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Uusi varausikkunaobjekti.

Esimerkki

Pyyntö
POST /api/EFHK/timeslots
Lähetettävä data
{
  "start": "2023-05-01T09:30:00Z",
  "end": "2023-05-01T10:00:00Z",
  "type": "available",
  "group": null,
  "info": null,
  "airfieldCode": "EFHK"
}
Vastaus
{
  "id": 3,
  "start": "2023-05-01T09:30:00Z",
  "end": "2023-05-01T10:00:00Z",
  "type": "available",
  "group": null,
  "info": null,
  "airfieldCode": "EFHK"
}

4. Päivitä varausikkuna

  • Menetelmä: PUT
  • Päätepiste: /api/:airfieldCode/timeslots/:id
  • Kuvaus: Päivittää varausikkunan annetulla ID:llä. Mahdollisuus myös muokata varausikkunasta toistuva.
  • Lähetettävä data: JSON-objekti, joka sisältää päivitetyt varausikkunan tiedot.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Päivitetty varausikkunaobjekti.

Esimerkki (muokkaus)

Pyyntö
PUT /api/EFHK/timeslots/3
Lähetettävä data
{
  "start": "2023-05-01T10:00:00Z",
  "end": "2023-05-01T10:30:00Z",
  "type": "unavailable",
  "group": null,
  "info": "Huoltotyöt",
  "airfieldCode": "EFHK"
}
Vastaus
{
  "id": 3,
  "start": "2023-05-01T10:00:00Z",
  "end": "2023-05-01T10:30:00Z",
  "type": "unavailable",
  "group": null,
  "info": "Huoltotyöt",
  "airfieldCode": "EFHK"
}

Esimerkki (toistuvuuden luonti)

Pyyntö
PUT /api/EFHK/timeslots/4
Lähetettävä data
{
  "start": "2023-05-01T12:00:00Z",
  "end": "2023-05-01T14:00:00Z",
  "type": "unavailable",
  "group": null,
  "info": "Säännölliset huoltotyöt",
  "airfieldCode": "EFHK",
  "periodEnd": "2023-05-31T23:59:59Z",
  "days": {
    "monday": true,
    "tuesday": true,
    "wednesday": true,
    "thursday": true,
    "friday": true,
    "saturday": false,
    "sunday": false
  }
}
Vastaus
[
  {
    "id": 4,
    "start": "2023-05-01T12:00:00Z",
    "end": "2023-05-01T14:00:00Z",
    "type": "unavailable",
    "group": "group-1649000000000",
    "info": "Säännölliset huoltotyöt",
    "airfieldCode": "EFHK"
  },
  {
    "id": 5,
    "start": "2023-05-02T12:00:00Z",
    "end": "2023-05-02T14:00:00Z",
    "type": "unavailable",
    "group": "group-1649000000000",
    "info": "Säännölliset huoltotyöt",
    "airfieldCode": "EFHK"
  },
  {
    "id": 6,
    "start": "2023-05-03T12:00:00Z",
    "end": "2023-05-03T14:00:00Z",
    "type": "unavailable",
    "group": "group-1649000000000",
    "info": "Säännölliset huoltotyöt",
    "airfieldCode": "EFHK"
  },
  ...
]

5. Päivitä varausikkuna ryhmä

  • Menetelmä: PUT
  • Päätepiste: /api/timeslots/group/:group
  • Kuvaus: Päivittää kaikki varausikkunat, jotka kuuluvat annettuun ryhmään.
  • Lähetettävä data: JSON-objekti, joka sisältää päivitetyt varausikkunan tiedot.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Lista päivitettyjä varausikkunaobjekti.

Esimerkki

Pyyntö
PUT /api/timeslots/group/group-2023-05-01T23:59:59Z
Lähetettävä data
{
  "startingFrom": "2023-05-01T00:00:00Z",
  "startTimeOfDay": {
    "hours": 9,
    "minutes": 0
  },
  "endTimeOfDay": {
    "hours": 17,
    "minutes": 0
  }
}
Vastaus
[
  {
    "id": 1,
    "start": "2023-05-01T09:00:00Z",
    "end": "2023-05-01T17:00:00Z",
    "type": "available",
    "group": "group-2023-05-01T23:59:59Z",
    "info": null
  },
  {
    "id": 2,
    "start": "2023-05-02T09:00:00Z",
    "end": "2023-05-02T17:00:00Z",
    "type": "available",
    "group": "group-2023-05-01T23:59:59Z",
    "info": null
  }
]

/api/:airfieldCode/reservations

:airfieldCode yksilöi rajapintakutsut tiettyyn lentokenttään ❗

Seuraavat päätepisteet ovat saatavilla varauksiin liittyen:

1. Hae varaukset aikaväliltä

  • Menetelmä: GET
  • Päätepiste: /api/:airfieldCode/reservations
  • URL-parametrit:
    • from: aloitusaika (ISO 8601 muodossa)
    • until: lopetusaika (ISO 8601 muodossa)
  • Kuvaus: Hakee varaukset annetulta aikaväliltä.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Lista varausobjekteja.

Esimerkki

Pyyntö
GET /api/reservations?from=2023-05-01T00:00:00.000Z&until=2023-05-31T23:59:59.000Z
Vastaus
[
  {
    "id": 1,
    "airfieldCode": "EFTU",
    "start": "2023-05-03T10:00:00.000Z",
    "end": "2023-05-03T12:00:00.000Z"
  },
  {
    "id": 2,
    "airfieldCode": "EFTU",
    "start": "2023-05-10T14:00:00.000Z",
    "end": "2023-05-10T16:00:00.000Z"
  }
]

2. Poista varaus

  • Menetelmä: DELETE
  • Päätepiste: /api/:airfieldCode/reservations/:id
  • Kuvaus: Poistaa varauksen annetulla ID:llä.
  • URL-parametrit:
    • id: varauksen yksilöivä koodi/id
Vastaus
  • Tila: 200
  • Sisältötyyppi: text/plain
  • Vastauksen sisältö: Ilmoitus varauksen poistamisesta.

Esimerkki

Pyyntö
DELETE /api/reservations/1
Vastaus
Reservation 1 deleted

3. Luo uusi varaus

  • Menetelmä: POST
  • Päätepiste: /api/:airfieldCode/reservations
  • Kuvaus: Luo uuden varauksen. Aikavälillä täytyy olla vapaa varausikkuna.
  • Lähetettävä data: JSON-objekti, joka sisältää uuden varauksen tiedot.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Luotu varausobjekti.

Esimerkki

Esimerkki olettaa, että aikavälillä on vapaa varausikkuna.

Pyyntö
POST /api/reservations
Lähetettävä data
{
  "airfieldCode": "EFTU",
  "start": "2023-05-15T08:00:00.000Z",
  "end": "2023-05-15T10:00:00.000Z"
}

Vastaus
{
  "id": 3,
  "airfieldCode": "EFTU",
  "start": "2023-05-15T08:00:00.000Z",
  "end": "2023-05-15T10:00:00.000Z"
}

4. Varauksen päivittäminen

  • Menetelmä: PUT
  • Päätepiste: /api/:airfieldCode/reservations/:id
  • Kuvaus: Päivittää varauksen tietyn tunnuksen perusteella.
  • Lähetettävä data: JSON-objekti, joka sisältää päivitetyt varaustiedot.
  • URL-parametrit:
    • id: varauksen yksilöivä koodi/id
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Päivitetty varausobjekti.

Esimerkki

Pyyntö
PUT /api/reservations/123
Lähetettävä data
{
  "start": "2023-05-01T10:00:00.000Z",
  "end": "2023-05-01T12:00:00.000Z",
  "plane": "OH-LPL",
  "pilot": "John Doe"
}

Vastaus
{
  "id": 123,
  "start": "2023-05-01T10:00:00.000Z",
  "end": "2023-05-01T12:00:00.000Z",
  "plane": "OH-LPL",
  "pilot": "John Doe"
}

/api/airfields

Seuraavat päätepisteet ovat saatavilla lentokenttätietojen kanssa työskentelyyn:

1. Hae kaikki lentokentät

  • Menetelmä: GET
  • Päätepiste: /api/airfields
  • Kuvaus: Hakee kaikki saatavilla olevat lentokentät.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Lentokenttäobjektien taulukko.

Esimerkki

Pyyntö
GET /api/airfields
Vastaus
[
  {
    "code": "EFHK",
    "name": "Helsinki-Vantaan lentoasema",
    "maxConcurrentFlights": 3,
    "eventGranularityMinutes": 20
  },
  {
    "code": "EFTU",
    "name": "Turun lentoasema",
    "maxConcurrentFlights": 2,
    "eventGranularityMinutes": 15
  }
]

2. Hae lentokenttä koodilla

  • Menetelmä: GET
  • Päätepiste: /api/airfields/:code
  • Kuvaus: Hakee tietyn lentokentän sen koodin perusteella.
  • URL-parametrit:
    • code: Lentokentän yksilöllinen koodi.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Lentokenttäobjekti.

Esimerkki

Pyyntö
GET /api/airfields/EFHK
Vastaus
{
  "code": "EFHK",
  "name": "Helsinki-Vantaan lentoasema",
  "maxConcurrentFlights": 3,
  "eventGranularityMinutes": 20
}

3. Päivitä lentokenttä koodilla

  • Menetelmä: PUT
  • Päätepiste: /api/airfields/:code
  • Kuvaus: Päivittää tietyn lentokentän sen koodin perusteella.
  • URL-parametrit:
    • code: Lentokentän yksilöllinen koodi.
  • Lähetettävä data: JSON-objekti, joka sisältää päivitetyt lentokentän tiedot, lukuun ottamatta lentokentän koodia.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Päivitetty lentokenttäobjekti.

Esimerkki

Pyyntö
PUT /api/airfields/EFHK
Lähetettävä data
{
  "name": "Helsinki-Vantaan lentoasema",
  "maxConcurrentFlights": 4,
  "eventGranularityMinutes": 25
}
Vastaus
{
  "code": "EFHK",
  "name": "Helsinki-Vantaan lentoasema",
  "maxConcurrentFlights": 4,
  "eventGranularityMinutes": 25
}

4. Luo lentokenttä

  • Menetelmä: POST
  • Päätepiste: /api/airfields
  • Kuvaus: Luo uuden lentokentän.
  • Lähetettävä data: JSON-objekti, joka sisältää uuden lentokentän tiedot, mukaan lukien lentokentän koodi.
Vastaus
  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Luotu lentokenttäobjekti.

Esimerkki

Pyyntö
POST /api/airfields
Lähetettävä data
{
  "code": "EFJY",
  "name": "Jyväskylän lentoasema",
  "maxConcurrentFlights": 2,
  "eventGranularityMinutes": 30
}

Vastaus
{
  "code": "EFJY",
  "name": "Jyväskylän lentoasema",
  "maxConcurrentFlights": 2,
  "eventGranularityMinutes": 30
}

/api/configurations

Seuraavat päätepisteet ovat saatavilla konfiguraatioiden kanssa työskentelyyn:

1. Hae konfiguraatio

  • Menetelmä: GET
  • Päätepiste: Päätepiste: /api/configurations/1
  • Kuvaus: Hakee konfiguraation.

Vastaus

  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Konfiguraatio-objekti.

Esimerkki

Pyyntö
GET /api/configurations/1
Vastaus
{
  "id": 1,
  "daysToStart": 3,
  "maxDaysInFuture": 30
}

2. Päivitä konfiguraatio

  • Menetelmä: PUT
  • Päätepiste: /api/configurations/1
  • Kuvaus: Päivittää konfiguraation.
  • Lähetettävä data: JSON-objekti, joka sisältää päivitetyt konfiguraatiotiedot, lukuun ottamatta konfiguraation ID:tä.

Vastaus

  • Tila: 200
  • Sisältötyyppi: application/json
  • Vastauksen sisältö: Päivitetty konfiguraatio-objekti.

Esimerkki

Pyyntö
PUT /api/configurations/1
Lähetettävä data
{
  "daysToStart": 5,
  "maxDaysInFuture": 45
}
Vastaus
{
  "id": 1,
  "daysToStart": 5,
  "maxDaysInFuture": 45
}

Virheiden käsittely

Virhetilanteessa API palauttaa vastauksen, jossa on sopiva HTTP-tilakoodi ja JSON-objekti.