From 8189723fdaf5b5d87c5e664c10798eeb293ce659 Mon Sep 17 00:00:00 2001 From: Marja Kari Date: Tue, 9 Jan 2024 17:25:03 +0200 Subject: [PATCH] toimivahko hakuapi ja validaation tuunaus --- .../vastaanotto/model/ViestiValidator.scala | 4 +-- .../resource/LahetysResource.scala | 20 ++++++------- .../business/KantaOperaatiot.scala | 30 +++++++++---------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala b/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala index 8b27d9a3..504eeca6 100644 --- a/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala +++ b/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala @@ -388,8 +388,7 @@ object ViestiValidator: else // lähettävä palvelu pitää olla määritelty jos lähetystä ei ole määritelty - if(lahettavaPalvelu.isEmpty) - virheet = virheet.incl(VALIDATION_LAHETTAVA_PALVELU_TYHJA) + virheet = LahetysValidator.validateLahettavaPalvelu(lahettavaPalvelu) virheet @@ -432,7 +431,6 @@ object ViestiValidator: validateSailytysAika(viesti.getSailytysAika), validateMetadata(viesti.getMetadata), LahetysValidator.validateKayttooikeusRajoitukset(viesti.getKayttooikeusRajoitukset), - LahetysValidator.validateLahettavaPalvelu(viesti.getLahettavaPalvelu), // validoidaan kenttien väliset suhteet validateKorkeaPrioriteetti(viesti.getPrioriteetti, viesti.getVastaanottajat), diff --git a/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala b/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala index 75ef096b..34390cdd 100644 --- a/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala +++ b/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala @@ -52,15 +52,15 @@ case class PalautaLahetysFailureResponse( class PalautaViestitResponse() {} @JsonInclude(JsonInclude.Include.NON_ABSENT) -case class ViestiResponse()( +case class ViestiResponse( @BeanProperty lahetysTunniste: String, + @BeanProperty lahettavapalvelu: String, @BeanProperty otsikko: String, @BeanProperty tunniste: String, @BeanProperty sisalto: String, @BeanProperty sisallonTyyppi: String, - @BeanProperty lahettavanVirkailijanOID: Option[String], - @BeanProperty replyTo: Option[String], - @BeanProperty lahettavapalvelu: Option[String], + @BeanProperty lahettavanVirkailijanOID: String, + @BeanProperty replyTo: String, @BeanProperty omistaja: String ) @@ -69,7 +69,7 @@ case class PalautaViestitSuccessResponse( @BeanProperty viestit: java.util.List[ViestiResponse], ) extends PalautaViestitResponse -case class PalautaViestiFailureResponse( +case class PalautaViestitFailureResponse( @BeanProperty virhe: String, ) extends PalautaViestitResponse @@ -115,14 +115,14 @@ class LahetysResource { new ApiResponse(responseCode = "403", description = KATSELU_RESPONSE_403_DESCRIPTION, content = Array(new Content(schema = new Schema(implementation = classOf[Void])))), new ApiResponse(responseCode = "410", description = KATSELU_RESPONSE_410_DESCRIPTION, content = Array(new Content(schema = new Schema(implementation = classOf[Void])))) )) - def lueLahetyksenViestit(@PathVariable(LAHETYSTUNNISTE_PARAM_NAME) lahetysTunniste: String): ResponseEntity[PalautaViestiResponse] = + def lueLahetyksenViestit(@PathVariable(LAHETYSTUNNISTE_PARAM_NAME) lahetysTunniste: String): ResponseEntity[PalautaViestitResponse] = val securityOperaatiot = new SecurityOperaatiot if (!securityOperaatiot.onOikeusKatsella()) return ResponseEntity.status(HttpStatus.FORBIDDEN).build() val uuid = ParametriUtil.asUUID(lahetysTunniste) if (uuid.isEmpty) - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(PalautaLahetysFailureResponse(LAHETYSTUNNISTE_INVALID)) + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(PalautaViestitFailureResponse(LAHETYSTUNNISTE_INVALID)) val kantaOperaatiot = new KantaOperaatiot(DbUtil.database) val lahetys = kantaOperaatiot.getLahetys(uuid.get) @@ -137,9 +137,9 @@ class LahetysResource { val viestit = kantaOperaatiot.getLahetyksenViestit(uuid.get) ResponseEntity.status(HttpStatus.OK).body(PalautaViestitSuccessResponse( viestit.map(viesti => ViestiResponse( - lahetys.get.tunniste.toString, lahetys.get.otsikko,viesti.tunniste.toString, - viesti.sisalto, viesti.sisallonTyyppi,viesti.lahettavanVirkailijanOID.getOrElse(""), - viesti.replyTo.getOrElse(""),viesti.lahettavapalvelu.getOrElse(""),viesti.omistaja + lahetys.get.tunniste.toString, lahetys.get.lahettavaPalvelu, lahetys.get.otsikko, + viesti.tunniste.toString, viesti.sisalto, viesti.sisallonTyyppi.toString, + viesti.lahettavanVirkailijanOID.getOrElse(""), viesti.replyTo.getOrElse(""), viesti.omistaja )).asJava )) diff --git a/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala b/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala index d2cac67b..39f92514 100644 --- a/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala +++ b/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala @@ -44,9 +44,9 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { * * @return tallennettu lähetys */ - def tallennaLahetys(otsikko: String, kayttooikeusRajoitukset: Set[String], omistaja: String): Lahetys = { + def tallennaLahetys(otsikko: String, kayttooikeusRajoitukset: Set[String], omistaja: String, lahettavaPalvelu: String): Lahetys = { val lahetysTunniste = this.getUUID() - val lahetysInsertAction = sqlu"""INSERT INTO lahetykset VALUES(${lahetysTunniste.toString}::uuid, ${otsikko}, ${omistaja}, now())""" + val lahetysInsertAction = sqlu"""INSERT INTO lahetykset VALUES(${lahetysTunniste.toString}::uuid, ${otsikko}, ${lahettavaPalvelu}, ${omistaja}, now())""" val kayttooikeusInsertActions = DBIO.sequence(kayttooikeusRajoitukset.map(kayttooikeus => { val tunniste = this.getUUID() @@ -68,7 +68,7 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { def getLahetys(tunniste: UUID): Option[Lahetys] = Await.result(db.run( sql""" - SELECT tunniste, otsikko, omistaja + SELECT tunniste, otsikko, omistaja, lahettavapalvelu FROM lahetykset WHERE tunniste=${tunniste.toString}::uuid """.as[(String, String, String, String)].headOption), DB_TIMEOUT) @@ -212,7 +212,7 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { } val lahetysInsertAction = { if(lahetysTunniste.isDefined) sql"""SELECT 1""".as[Int] - else sqlu"""INSERT INTO lahetykset VALUES(${finalLahetysTunniste.toString}::uuid, ${otsikko}, ${omistaja}, now())""" + else sqlu"""INSERT INTO lahetykset VALUES(${finalLahetysTunniste.toString}::uuid, ${otsikko}, ${lahettavaPalvelu}, ${omistaja}, now())""" } val kayttooikeusInsertActions = { if(lahetysTunniste.isDefined) sql"""SELECT 1""".as[Int] @@ -232,7 +232,7 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { VALUES(${viestiTunniste.toString}::uuid, ${finalLahetysTunniste.toString}::uuid, ${otsikko}, ${sisalto}, ${sisallonTyyppi.toString}, ${kielet.contains(Kieli.FI)}, ${kielet.contains(Kieli.SV)}, ${kielet.contains(Kieli.EN)}, ${lahettavanVirkailijanOID}, - ${lahettaja.nimi}, ${lahettaja.sahkoposti}, ${replyTo}, ${lahettavaPalvelu}, ${prioriteetti.toString}::prioriteetti, ${omistaja}, + ${lahettaja.nimi}, ${lahettaja.sahkoposti}, ${replyTo}, ${prioriteetti.toString}::prioriteetti, ${omistaja}, ${Instant.now.toString}::timestamptz, ${Instant.now.plusSeconds(60*60*24*sailytysAika).toString}::timestamptz ) """ @@ -315,7 +315,7 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { }) Await.result(db.run(DBIO.sequence(Seq(lahetysInsertAction, kayttooikeusInsertActions, viestiInsertAction, metadataInsertActions, maskitInsertActions, liiteRelatedInsertActions)).transactionally), DB_TIMEOUT) - (Viesti(viestiTunniste, finalLahetysTunniste, otsikko, sisalto, sisallonTyyppi, kielet, maskit, lahettavanVirkailijanOID, lahettaja, replyTo, lahettavaPalvelu, omistaja, prioriteetti), vastaanottajaEntiteetit) + (Viesti(viestiTunniste, finalLahetysTunniste, otsikko, sisalto, sisallonTyyppi, kielet, maskit, lahettavanVirkailijanOID, lahettaja, replyTo, omistaja, prioriteetti), vastaanottajaEntiteetit) } /** @@ -363,11 +363,11 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { val viestitQuery = sql""" SELECT tunniste, lahetys_tunniste, otsikko, sisalto, sisallontyyppi, kielet_fi, kielet_sv, kielet_en, lahettavanvirkailijanoid, - lahettajannimi, lahettajansahkoposti, replyto, lahettavapalvelu, omistaja, prioriteetti + lahettajannimi, lahettajansahkoposti, replyto, omistaja, prioriteetti FROM viestit WHERE tunniste IN (#${viestiTunnisteet.map(tunniste => "'" + tunniste + "'").mkString(",")}) """ - .as[(String, String, String, String, String, Boolean, Boolean, Boolean, String, String, String, String, String, String, String)] + .as[(String, String, String, String, String, Boolean, Boolean, Boolean, String, String, String, String, String, String)] val maskitQuery = sql""" @@ -382,10 +382,10 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { Await.result(db.run(viestitQuery), DB_TIMEOUT) .map((tunniste, lahetysTunniste, otsikko, sisalto, sisallonTyyppi, kieletFi, kieletSv, kieletEn, lahettavanVirkailijanOid, - lahettajanNimi, lahettajanSahkoposti, replyTo, lahettavaPalvelu, omistaja, prioriteetti) + lahettajanNimi, lahettajanSahkoposti, replyTo, omistaja, prioriteetti) => Viesti(UUID.fromString(tunniste), UUID.fromString(lahetysTunniste), otsikko, sisalto, SisallonTyyppi.valueOf(sisallonTyyppi), toKielet(kieletFi, kieletSv, kieletEn), maskit.get(tunniste).getOrElse(Map.empty), Option.apply(lahettavanVirkailijanOid), Kontakti(Option.apply(lahettajanNimi), lahettajanSahkoposti), - Option.apply(replyTo), Option.apply(lahettavaPalvelu), omistaja, Prioriteetti.valueOf(prioriteetti))) + Option.apply(replyTo), omistaja, Prioriteetti.valueOf(prioriteetti))) def getLahetyksenViestit(lahetystunniste: UUID): Seq[Viesti] = if ("".equals(lahetystunniste)) return Seq.empty @@ -393,11 +393,11 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { val viestitQuery = sql""" SELECT tunniste, lahetys_tunniste, otsikko, sisalto, sisallontyyppi, kielet_fi, kielet_sv, kielet_en, lahettavanvirkailijanoid, - lahettajannimi, lahettajansahkoposti, replyto, lahettavapalvelu, omistaja, prioriteetti + lahettajannimi, lahettajansahkoposti, replyto, omistaja, prioriteetti FROM viestit - WHERE lahetystunniste = ${lahetystunniste.toString}::uuid + WHERE lahetys_tunniste = ${lahetystunniste.toString}::uuid """ - .as[(String, String, String, String, String, Boolean, Boolean, Boolean, String, String, String, String, String, String, String)] + .as[(String, String, String, String, String, Boolean, Boolean, Boolean, String, String, String, String, String, String)] val maskitQuery = sql""" @@ -412,10 +412,10 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { Await.result(db.run(viestitQuery), DB_TIMEOUT) .map((tunniste, lahetysTunniste, otsikko, sisalto, sisallonTyyppi, kieletFi, kieletSv, kieletEn, lahettavanVirkailijanOid, - lahettajanNimi, lahettajanSahkoposti, replyTo, lahettavaPalvelu, omistaja, prioriteetti) + lahettajanNimi, lahettajanSahkoposti, replyTo, omistaja, prioriteetti) => Viesti(UUID.fromString(tunniste), UUID.fromString(lahetysTunniste), otsikko, sisalto, SisallonTyyppi.valueOf(sisallonTyyppi), toKielet(kieletFi, kieletSv, kieletEn), maskit.get(tunniste).getOrElse(Map.empty), Option.apply(lahettavanVirkailijanOid), Kontakti(Option.apply(lahettajanNimi), lahettajanSahkoposti), - Option.apply(replyTo), Option.apply(lahettavaPalvelu), omistaja, Prioriteetti.valueOf(prioriteetti))) + Option.apply(replyTo), omistaja, Prioriteetti.valueOf(prioriteetti))) def getViestinLiitteet(viestiTunnisteet: Seq[UUID]): Map[UUID, Seq[Liite]] = if(viestiTunnisteet.isEmpty) return Map.empty