From 9a8ebb63b599b55a21b9fc2c51c6a137a598c868 Mon Sep 17 00:00:00 2001 From: Santeri Korri Date: Mon, 13 Jan 2025 12:37:49 +0200 Subject: [PATCH] OY-5034 Parannettu swagger-kuvauksia --- .../vastaanotto/model/Viesti.scala | 74 +++++++++++-------- .../vastaanotto/resource/ViestiResource.scala | 7 +- .../validation/ViestiValidator.scala | 6 +- 3 files changed, 51 insertions(+), 36 deletions(-) diff --git a/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/Viesti.scala b/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/Viesti.scala index beada0e0..44a6d4b8 100644 --- a/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/Viesti.scala +++ b/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/Viesti.scala @@ -4,6 +4,7 @@ import fi.oph.viestinvalitys.vastaanotto.model.Kayttooikeusrajoitukset.Kayttooik import fi.oph.viestinvalitys.vastaanotto.model.LahetysImpl.LAHETTAVAPALVELU_MAX_PITUUS import fi.oph.viestinvalitys.vastaanotto.model.Maskit.MaskitBuilder import fi.oph.viestinvalitys.vastaanotto.model.Viesti.* +import fi.oph.viestinvalitys.vastaanotto.model.ViestiImpl.{VIESTI_IDEMPOTENCY_KEY_SALLITUT_MERKIT, VIESTI_METADATA_ARVOT_MAX_MAARA_STR, VIESTI_METADATA_ARVO_MAX_PITUUS_STR, VIESTI_METADATA_AVAIN_MAX_PITUUS_STR, VIESTI_METADATA_SALLITUT_MERKIT} import io.swagger.v3.oas.annotations.media.Schema import io.swagger.v3.oas.annotations.media.Schema.RequiredMode @@ -14,35 +15,41 @@ import scala.beans.BeanProperty import scala.jdk.CollectionConverters.* object ViestiImpl { - final val OTSIKKO_MAX_PITUUS = 255 - final val SISALTO_MAX_PITUUS = 6*1024*1024 // SES-viesteissä maksimikoko 10 megatavua, mennään varmuuden vuoksi reilusti alle - - final val VIESTI_MAX_SIZE = VIESTI_MAX_SIZE_MB_STR.toInt * 1024 * 1024 - final val VIESTI_MAX_SIZE_MB_STR = "8" - - final val VIESTI_NIMI_MAX_PITUUS = 64 - final val VIESTI_SALAISUUS_MIN_PITUUS = 8 - final val VIESTI_SALAISUUS_MAX_PITUUS = 1024 - final val VIESTI_MASKI_MIN_PITUUS = 8 - final val VIESTI_MASKI_MAX_PITUUS = 1024 - final val VIESTI_METADATA_AVAIN_MAX_PITUUS = 64 - final val VIESTI_METADATA_ARVO_MAX_PITUUS = 64 - final val VIESTI_METADATA_ARVOT_MAX_MAARA = 1024 - - final val VIESTI_METADATA_AVAIMET_MAX_MAARA = 1024 - final val VIESTI_MASKIT_MAX_MAARA = 32 - final val VIESTI_VASTAANOTTAJAT_MAX_MAARA = 512 - final val VIESTI_LIITTEET_MAX_MAARA = 128 - - final val VIESTI_ORGANISAATIO_MAX_PITUUS = 64 - final val VIESTI_OIKEUS_MAX_PITUUS = 64 - final val VIESTI_KAYTTOOIKEUS_MAX_MAARA = 128 - - final val VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS = 64 - final val VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS_STR = "64" - - final val VIESTI_SISALTOTYYPPI_TEXT = "text" - final val VIESTI_SISALTOTYYPPI_HTML = "html" + final val OTSIKKO_MAX_PITUUS = 255 + final val SISALTO_MAX_PITUUS = 6*1024*1024 // SES-viesteissä maksimikoko 10 megatavua, mennään varmuuden vuoksi reilusti alle + + final val VIESTI_MAX_SIZE = VIESTI_MAX_SIZE_MB_STR.toInt * 1024 * 1024 + final val VIESTI_MAX_SIZE_MB_STR = "8" + + final val VIESTI_NIMI_MAX_PITUUS = 64 + final val VIESTI_SALAISUUS_MIN_PITUUS = 8 + final val VIESTI_SALAISUUS_MAX_PITUUS = 1024 + final val VIESTI_MASKI_MIN_PITUUS = 8 + final val VIESTI_MASKI_MAX_PITUUS = 1024 + final val VIESTI_MASKIT_MAX_MAARA = 32 + + final val VIESTI_METADATA_SALLITUT_MERKIT = "a-z, A-Z, 0-9 ja -_." + final val VIESTI_METADATA_AVAIN_MAX_PITUUS_STR = "64" + final val VIESTI_METADATA_AVAIN_MAX_PITUUS = VIESTI_METADATA_AVAIN_MAX_PITUUS_STR.toInt + final val VIESTI_METADATA_ARVO_MAX_PITUUS_STR = "64" + final val VIESTI_METADATA_ARVO_MAX_PITUUS = VIESTI_METADATA_ARVO_MAX_PITUUS_STR.toInt + final val VIESTI_METADATA_ARVOT_MAX_MAARA_STR = "1024" + final val VIESTI_METADATA_ARVOT_MAX_MAARA = VIESTI_METADATA_ARVOT_MAX_MAARA_STR.toInt + final val VIESTI_METADATA_AVAIMET_MAX_MAARA = 1024 + + final val VIESTI_VASTAANOTTAJAT_MAX_MAARA = 512 + final val VIESTI_LIITTEET_MAX_MAARA = 128 + + final val VIESTI_ORGANISAATIO_MAX_PITUUS = 64 + final val VIESTI_OIKEUS_MAX_PITUUS = 64 + final val VIESTI_KAYTTOOIKEUS_MAX_MAARA = 128 + + final val VIESTI_IDEMPOTENCY_KEY_SALLITUT_MERKIT = "a-z, A-Z, 0-9 ja -_." + final val VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS = 64 + final val VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS_STR = "64" + + final val VIESTI_SISALTOTYYPPI_TEXT = "text" + final val VIESTI_SISALTOTYYPPI_HTML = "html" } /** @@ -219,7 +226,11 @@ case class ViestiImpl( @(Schema @field)(requiredMode=RequiredMode.REQUIRED, minimum=LahetysImpl.SAILYTYSAIKA_MIN_PITUUS_STR, maximum=LahetysImpl.SAILYTYSAIKA_MAX_PITUUS_STR, example = "365") @BeanProperty sailytysaika: Optional[Integer], - @(Schema @field)(example = "{ \"key\": [\"value1\", \"value2\"] }", maxLength = ViestiImpl.VIESTI_METADATA_ARVOT_MAX_MAARA) + @(Schema @field)(example = "{ \"key\": [\"value1\", \"value2\"] }", maxLength = ViestiImpl.VIESTI_METADATA_AVAIMET_MAX_MAARA, description = + "Avaimen maksimipituus on " + VIESTI_METADATA_AVAIN_MAX_PITUUS_STR + " merkkiä, " + + "arvon maksimipituus on " + VIESTI_METADATA_ARVO_MAX_PITUUS_STR + " merkkiä, " + + "sallittuja merkkejä ovat " + VIESTI_METADATA_SALLITUT_MERKIT + " " + + "Yksittäisellä avaimella voi olla enintään " + VIESTI_METADATA_ARVOT_MAX_MAARA_STR + " arvoa") @BeanProperty metadata: Optional[util.Map[String, util.List[String]]], @(Schema@field)(description = "Täytyy olla saman käyttäjän (cas-identiteetti) luoma, jos tyhjä luodaan automaattisesti.", example = " ", nullable = true) @@ -228,7 +239,8 @@ case class ViestiImpl( @(Schema@field)(example = "hakemuspalvelu", maxLength = LAHETTAVAPALVELU_MAX_PITUUS) @BeanProperty lahettavaPalvelu: Optional[String], - @(Schema@field)(description = "Lähettävän palvelun määrittelemä viestikohtainen yksilöivä avain jolla varmistetaan ettei samaa viestiä lähetetä kahdesti", example = "12345", maxLength = ViestiImpl.VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS) + @(Schema@field)(description = "Lähettävän palvelun määrittelemä viestikohtainen yksilöivä avain jolla varmistetaan ettei samaa viestiä lähetetä kahdesti. Sallittuja merkkejä ovat " + + VIESTI_IDEMPOTENCY_KEY_SALLITUT_MERKIT, example = "12345", maxLength = ViestiImpl.VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS) @BeanProperty idempotencyKey: Optional[String], @(Schema@field)(maxLength = ViestiImpl.VIESTI_KAYTTOOIKEUS_MAX_MAARA) diff --git a/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/resource/ViestiResource.scala b/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/resource/ViestiResource.scala index ff59fe93..2373a749 100644 --- a/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/resource/ViestiResource.scala +++ b/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/resource/ViestiResource.scala @@ -121,8 +121,11 @@ class ViestiResource { "- Yksittäinen järjestelmä voi lähettää vain yhden korkean prioriteetin pyynnön sekunnissa, " + "nopeampi lähetystahti voi johtaa 429-vastaukseen\n" + "- Viestin mukana on mahdollista antaa enintään " + ViestiImpl.VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS_STR + " merkin pituinen " + - "idempotency-avain, jonka avulla voidaan varmistaa ettei samaa viestiä lähetetä kahdesti. Mikäli annetulla avaimella " + - "löytyy jo viesti palautetaan tämän viestin tiedot. HUOMAA tämä myös käyttäessäsi rajapintaa swaggerin kautta!" + " merkin pituinen idempotency-avain, jonka avulla voidaan varmistaa ettei samaa viestiä lähetetä kahdesti. Mikäli annetulla avaimella " + + "löytyy jo viesti palautetaan tämän viestin tiedot. HUOMAA tämä myös käyttäessäsi rajapintaa swaggerin kautta!\n" + + "- HUOMAA ERITYISESTI jos käytetään idempotency-avainta ja viesti on palasteltu useammaksi viestiksi koska vastaanottajia on enemmän " + + "kuin yhden viestin maksimivastaanottajamäärä. Eri viesteillä täytyy olla eri idempotency-avain tai viesti lähetetään vain ensimmäisenä vuorossa oleville " + + "vastaanottajille ja seuraavat kutsut palauttavat tämän ensimmäisen viestin tiedot!" @PostMapping( path = Array(LUO_VIESTI_PATH), consumes = Array(MediaType.APPLICATION_JSON_VALUE), diff --git a/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/validation/ViestiValidator.scala b/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/validation/ViestiValidator.scala index 2c67acc8..dfeebb1b 100644 --- a/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/validation/ViestiValidator.scala +++ b/lambdat/vastaanotto/src/main/scala/fi/oph/viestinvalitys/vastaanotto/validation/ViestiValidator.scala @@ -65,15 +65,15 @@ object ViestiValidator: final val VALIDATION_LAHETYSTUNNISTE_EI_TARJOLLA = "lähetysTunniste: tunnistetta ei ole järjestelmässä tai käyttäjällä ei ole siihen oikeuksia" final val VALIDATION_IDEMPOTENCY_KEY_LIIAN_PITKA = "idempotencyKey: Idempotency-avain ei voi pidempi kuin " + VIESTI_IDEMPOTENCY_KEY_MAX_PITUUS + " merkkiä" - final val VALIDATION_IDEMPOTENCY_KEY_INVALID = "idempotencyKey: Sallitut merkit ovat A-Z, a-z, 0-9, -_." + final val VALIDATION_IDEMPOTENCY_KEY_INVALID = "idempotencyKey: Sallitut merkit ovat " + VIESTI_IDEMPOTENCY_KEY_SALLITUT_MERKIT final val VALIDATION_METADATA_NULL = "metadata: Seuraavat avaimet sisältävät null-arvoja: " final val VALIDATION_METADATA_DUPLICATE = "metadata: Seuraavat avaimet sisältää duplikaattiarvoja: " final val VALIDATION_METADATA_AVAIMET_MAARA = "metadata: Metadata voi sisältää maksimissaan " + VIESTI_METADATA_AVAIMET_MAX_MAARA + " avainta" - final val VALIDATION_METADATA_AVAIN_INVALID = "avaimessa sallitut merkit ovat a-z, A-Z, 0-9 ja -_." + final val VALIDATION_METADATA_AVAIN_INVALID = "avaimessa sallitut merkit ovat " + VIESTI_METADATA_SALLITUT_MERKIT final val VALIDATION_METADATA_AVAIN_PITUUS = "avain on yli maksimipituuden " + VIESTI_METADATA_AVAIN_MAX_PITUUS + " merkkiä" final val VALIDATION_METADATA_ARVOT_MAARA = "avain sisältää yli " + VIESTI_METADATA_ARVOT_MAX_MAARA + " arvoa" - final val VALIDATION_METADATA_ARVO_INVALID = "arvossa sallitut merkit ovat a-z, A-Z, 0-9 ja -_." + final val VALIDATION_METADATA_ARVO_INVALID = "arvossa sallitut merkit ovat " + VIESTI_METADATA_SALLITUT_MERKIT final val VALIDATION_METADATA_ARVO_PITUUS = "arvo on yli maksimipituuden " + VIESTI_METADATA_ARVO_MAX_PITUUS + " merkkiä: " final val VALIDATION_KAYTTOOIKEUSRAJOITUS_NULL = "kayttooikeusRajoitukset: Kenttä sisältää null-arvoja"