Skip to content

Commit

Permalink
toimivahko hakuapi ja validaation tuunaus
Browse files Browse the repository at this point in the history
  • Loading branch information
marjakari committed Jan 9, 2024
1 parent 5ad1c5d commit 8189723
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
)

Expand All @@ -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

Expand Down Expand Up @@ -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)
Expand All @@ -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
))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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)
Expand Down Expand Up @@ -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]
Expand All @@ -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
)
"""
Expand Down Expand Up @@ -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)
}

/**
Expand Down Expand Up @@ -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"""
Expand All @@ -382,22 +382,22 @@ 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

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"""
Expand All @@ -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
Expand Down

0 comments on commit 8189723

Please sign in to comment.