Skip to content

Commit

Permalink
Merge pull request #53 from Opetushallitus/OK-436
Browse files Browse the repository at this point in the history
OK-436
  • Loading branch information
marjakari committed Sep 19, 2024
2 parents 187eee0 + e92178a commit 5f95539
Show file tree
Hide file tree
Showing 34 changed files with 520 additions and 304 deletions.
2 changes: 1 addition & 1 deletion cdk/bin/viestinvalityspalvelu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { SovellusStack } from '../lib/sovellus-stack';
import {PersistenssiStack} from "../lib/persistenssi-stack";
import {LoadtestStack} from "../lib/loadtest-stack";
import {MigraatioStack} from "../lib/migraatio-stack";
import { AwsSolutionsChecks, NagSuppressions } from 'cdk-nag';
import { AwsSolutionsChecks } from 'cdk-nag';

const app = new cdk.App();
const environmentName = app.node.tryGetContext("environment");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ case class LahetyksetParams(alkaen: Optional[String],
enintaan: Optional[String],
vastaanottajanEmail: Optional[String],
organisaatio: Optional[String],
viesti: Optional[String])
viesti: Optional[String],
palvelu: Optional[String])
object LahetyksetParamValidator {

def validateAlkaenUUID(alkaen: Optional[String]): Set[String] =
Expand Down Expand Up @@ -69,7 +70,7 @@ object LahetyksetParamValidator {
.flatMap(virheet =>
if (hakusanaParam.isPresent && validatedHakusana.isEmpty) Left(virheet.incl(HAKUSANA_INVALID)) else Right(virheet))
.fold(l => l, r => r)

def validateVastaanottajatParams(params: VastaanottajatParams): Seq[String] =
Seq(
validateLahetysTunniste(params.lahetysTunniste),
Expand All @@ -86,6 +87,7 @@ object LahetyksetParamValidator {
validateEnintaan(params.enintaan, LAHETYKSET_ENINTAAN_MIN, LAHETYKSET_ENINTAAN_MAX, LAHETYKSET_ENINTAAN_INVALID),
validateEmailParam(params.vastaanottajanEmail, VASTAANOTTAJA_INVALID),
validateOrganisaatio(params.organisaatio),
validateHakusanaParam(params.viesti)
validateHakusanaParam(params.viesti),
validateHakusanaParam(params.palvelu)
).flatten
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory
import org.springframework.http.{HttpStatus, MediaType, ResponseEntity}
import org.springframework.web.bind.annotation.*
import org.springframework.web.context.request.{RequestContextHolder, ServletRequestAttributes}
import upickle.default.*

import java.util
import java.util.{Optional, UUID}
Expand Down Expand Up @@ -50,8 +51,8 @@ class LahetysResource {
@RequestParam(name = VASTAANOTTAJA_PARAM_NAME, required = false) vastaanottajanEmail: Optional[String],
@RequestParam(name = ORGANISAATIO_PARAM_NAME, required = false) organisaatio: Optional[String],
@RequestParam(name = VIESTI_SISALTO_PARAM_NAME, required = false) viesti: Optional[String],
@RequestParam(name = PALVELU_PARAM_NAME, required = false) palvelu: Optional[String],
request: HttpServletRequest): ResponseEntity[PalautaLahetyksetResponse] =
LOG.warn(s"Haetaan lähetyksiä parametreilla vastaanottaja: ${vastaanottajanEmail.toScala.getOrElse("")} viesti: ${viesti.toScala.getOrElse("")}")
val securityOperaatiot = new SecurityOperaatiot
val kantaOperaatiot = new KantaOperaatiot(DbUtil.database)
try
Expand All @@ -63,7 +64,7 @@ class LahetysResource {
else
Right(None))
.flatMap(_ =>
val virheet = LahetyksetParamValidator.validateLahetyksetParams(LahetyksetParams(alkaen, enintaan, vastaanottajanEmail, organisaatio, viesti))
val virheet = LahetyksetParamValidator.validateLahetyksetParams(LahetyksetParams(alkaen, enintaan, vastaanottajanEmail, organisaatio, viesti, palvelu))
if (!virheet.isEmpty)
Left(ResponseEntity.status(HttpStatus.BAD_REQUEST).body(PalautaLahetyksetFailureResponse(virheet.asJava)))
else
Expand All @@ -77,7 +78,8 @@ class LahetysResource {
alkaen = ParametriUtil.asUUID(alkaen),
enintaan = ParametriUtil.asInt(enintaan).getOrElse(65535),
vastaanottajaHakuLauseke = vastaanottajanEmail.toScala,
sisaltoHakuLauseke = viesti.toScala) // samalla hakusanalla haetaan otsikosta ja sisällöstä
sisaltoHakuLauseke = viesti.toScala,
lahettavaPalveluHakuLauseke = palvelu.toScala)
if (lahetykset.isEmpty)
// on ok tilanne että haku ei palauta tuloksia
Left(ResponseEntity.status(HttpStatus.OK).body(PalautaLahetyksetSuccessResponse(Seq.empty.asJava, Optional.empty)))
Expand Down Expand Up @@ -396,6 +398,28 @@ class LahetysResource {
LOG.error("Vastaanottajien lukeminen epäonnistui", e)
ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(VastaanottajatFailureResponse(Seq(RaportointiAPIConstants.VASTAANOTTAJAT_LUKEMINEN_EPAONNISTUI).asJava)))

@GetMapping(path = Array(RaportointiAPIConstants.PALVELUT_PATH), produces = Array(MediaType.APPLICATION_JSON_VALUE))
@Operation(
summary = "Palauttaa listan lähetyksiä lähettäviä palveluja",
description = "Palauttaa lähettävien palvelujen listauksen käyttöliittymän hakutoimintoa varten",
responses = Array(
new ApiResponse(responseCode = "200", description = "Palauttaa listan palvelunimiä"),
))
def getLahettavatPalvelut() = {
LOG.info("Haetaan lähettävät palvelut")
val kantaOperaatiot = new KantaOperaatiot(DbUtil.database)
try
// suodatetaan pois swagger-esimerkkirivin palvelu
val palvelut = kantaOperaatiot.getLahettavatPalvelut().filterNot(p => p.equals("Esimerkkipalvelu"))
LOG.info(s"Löytyi ${palvelut.size} palvelua")
ResponseEntity.status(HttpStatus.OK).body(write[List[String]](palvelut))
catch
case e: Exception =>
LOG.error("Lähettävien palvelujen haku epäonnistui", e)
ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(write(Map("message" -> e.getMessage)))
}


def organisaatiorajaus(organisaatio: Optional[String], kayttajanOikeudet: Set[Kayttooikeus], organisaatioClient: OrganisaatioService): Set[Kayttooikeus] =
if (organisaatio.isEmpty)
kayttajanOikeudet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ object RaportointiAPIConstants {
final val VASTAANOTTAJA_PARAM_NAME = "vastaanottaja"
final val ORGANISAATIO_PARAM_NAME = "organisaatio"
final val VIESTI_SISALTO_PARAM_NAME = "viesti"
final val PALVELU_PARAM_NAME = "palvelu"

final val VIESTI_PATH = VERSIONED_RAPORTOINTI_API_PREFIX + "/viesti"
final val VIESTITUNNISTE_PARAM_NAME = "viestiTunniste"
Expand All @@ -36,6 +37,7 @@ object RaportointiAPIConstants {
final val ORGANISAATIOT_PATH = VERSIONED_RAPORTOINTI_API_PREFIX + "/organisaatiot"
final val ORGANISAATIOT_OIKEUDET_PATH = ORGANISAATIOT_PATH + "/oikeudet"
final val OMAT_TIEDOT_PATH = VERSIONED_RAPORTOINTI_API_PREFIX + "/omattiedot"
final val PALVELUT_PATH = VERSIONED_RAPORTOINTI_API_PREFIX + "/palvelut"

/**
* Swagger-kuvauksiin liittyvät vakiot
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- lista lähettävistä palveluista muodostetaan toistaiseksi lähetyksien tiedoista, palvelu cachettaa
CREATE INDEX IF NOT EXISTS lahetykset_lahettavapalvelu_index on lahetykset (lahettavapalvelu asc);
Original file line number Diff line number Diff line change
Expand Up @@ -1116,4 +1116,19 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
maskit = maskit.get(tunniste).getOrElse(Map.empty),
omistaja = omistaja,
prioriteetti = Prioriteetti.valueOf(prioriteetti))).headOption

/**
* Hakee listan lähettävistä palveluista
*
* @return lista lähetyksille tallennetuista lähettävistä palveluista
*/
def getLahettavatPalvelut(): List[String] =

val lahettavatPalvelutQuery = sql"""
SELECT DISTINCT lahettavapalvelu
FROM lahetykset
ORDER BY lahettavapalvelu ASC
""".as[String]
Await.result(db.run(lahettavatPalvelutQuery), DB_TIMEOUT).toList

}
Original file line number Diff line number Diff line change
Expand Up @@ -1286,4 +1286,18 @@ class KantaOperaatiotTest {
kantaOperaatiot.getRaportointiViestiTunnisteella(viesti.tunniste, kayttajanKayttooikeudet).get)
// ei käyttöoikeuksia
Assertions.assertEquals(Option.empty, kantaOperaatiot.getRaportointiViestiTunnisteella(viesti2.tunniste, kayttajanKayttooikeudet))

/**
* Testataan lähettävien palvelujen listan haku
*/
@Test def testGetLahettavatPalvelut(): Unit =
// lähetyksiä eri palveluilla
val lahetys = this.tallennaLahetys(lahettavaPalvelu = "hakemuspalvelu")
val lahetys2 = this.tallennaLahetys(lahettavaPalvelu = "osoitepalvelu")
val lahetys3 = this.tallennaLahetys(lahettavaPalvelu = "jokupalvelu")
// sama palvelu
val lahetys4 = this.tallennaLahetys(lahettavaPalvelu = "hakemuspalvelu")
// Esimerkkipalvelu on alustettuna kantaan
Assertions.assertEquals(4, kantaOperaatiot.getLahettavatPalvelut().size)
Assertions.assertEquals(List("Esimerkkipalvelu", "hakemuspalvelu", "jokupalvelu", "osoitepalvelu"), kantaOperaatiot.getLahettavatPalvelut())
}
26 changes: 22 additions & 4 deletions viestinvalitys-raportointi/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion viestinvalitys-raportointi/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@
"@mui/material-nextjs": "^5.15.11",
"@mui/x-data-grid": "^6.18.7",
"@mui/x-tree-view": "^6.17.0",
"@opetushallitus/oph-design-system": "github:opetushallitus/oph-design-system#v0.0.2",
"@opetushallitus/oph-design-system": "github:opetushallitus/oph-design-system#v0.0.3",
"@tanstack/react-query": "^5.51.5",
"@tanstack/react-query-devtools": "^5.51.5",
"date-fns-tz": "^3.1.3",
"dompurify": "^3.0.11",
"i18next": "^23.11.5",
"i18next-chained-backend": "^4.6.2",
Expand Down
Loading

0 comments on commit 5f95539

Please sign in to comment.