Skip to content

Commit

Permalink
fiksattu vastaanottajaistan sivutus, vastaanottajien suodatus tilan m…
Browse files Browse the repository at this point in the history
…ukaan
  • Loading branch information
marjakari committed Feb 15, 2024
1 parent fe746f2 commit a97d623
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,6 @@ class LahetysResource {
): ResponseEntity[VastaanottajatResponse] =
val securityOperaatiot = new SecurityOperaatiot
val kantaOperaatiot = new KantaOperaatiot(DbUtil.database)
LOG.info(vastaanottajanEmail.toString)
LogContext(lahetysTunniste = lahetysTunniste)(() =>
try
Right(None)
Expand Down Expand Up @@ -249,29 +248,22 @@ class LahetysResource {
Right(lahetys))
.flatMap(lahetys =>
val enintaanInt = ParametriUtil.asInt(enintaan).getOrElse(VASTAANOTTAJAT_ENINTAAN_DEFAULT)
// TODO tee tyylikkäämmin
// haetaan aina epäonnistuneet
val alkaenValidEmail = ParametriUtil.asValidEmail(alkaen)
val epaonnistuneet = kantaOperaatiot.haeLahetyksenVastaanottajia(lahetys.tunniste, Option.empty, Option.empty, Option.apply("epaonnistui"), securityOperaatiot.getKayttajanOikeudet(), vastaanottajanEmail.orElse(""))
var kesken: Seq[Vastaanottaja] = Seq.empty
var valmiit: Seq[Vastaanottaja] = Seq.empty
// sivutuksessa seuraavana on valmiit lähetykset, ei haeta keskeneräisiä
if (sivutustila.isPresent && sivutustila.equals("valmis"))
valmiit = kantaOperaatiot.haeLahetyksenVastaanottajia(lahetys.tunniste, alkaenValidEmail, Option.apply(enintaanInt), Option.apply("valmis"), securityOperaatiot.getKayttajanOikeudet(), vastaanottajanEmail.orElse(""))
else
kesken = kantaOperaatiot.haeLahetyksenVastaanottajia(lahetys.tunniste, alkaenValidEmail, Option.apply(enintaanInt), Option.apply("kesken"), securityOperaatiot.getKayttajanOikeudet(), vastaanottajanEmail.orElse(""))
// jos sivu ei ole täynnä keskeneräisistä, haetaan valmiita
if (kesken.size < enintaanInt)
valmiit = kantaOperaatiot.haeLahetyksenVastaanottajia(lahetys.tunniste, Option.empty, Option.apply(enintaanInt), Option.apply("valmis"), securityOperaatiot.getKayttajanOikeudet(), vastaanottajanEmail.orElse(""))
val vastaanottajat = epaonnistuneet++kesken++valmiit
if (vastaanottajat.isEmpty)
LOG.info("ei vastaanottajia")
// sivutusta varten haetaan myös jonon seuraava
val vastaanottajatJaSeuraava = vastaanottajaLista(kantaOperaatiot, securityOperaatiot.getKayttajanOikeudet(), lahetys.tunniste,
ParametriUtil.asValidEmail(alkaen), enintaanInt+1, ParametriUtil.asValidRaportointitila(sivutustila), vastaanottajanEmail, ParametriUtil.asValidRaportointitila(tila))
if (vastaanottajatJaSeuraava.isEmpty)
Left(ResponseEntity.status(HttpStatus.OK).body(VastaanottajatSuccessResponse(Seq.empty.asJava, Optional.empty, Optional.empty)))
else
val vastaanottajat = {
if (vastaanottajatJaSeuraava.length <= enintaanInt)
vastaanottajatJaSeuraava
else
vastaanottajatJaSeuraava.dropRight(1)
}
val viimeisenTila = ParametriUtil.getRaportointiTila(vastaanottajat.last.tila)
val seuraavatAlkaen = {
vastaanottajat match
case v if kantaOperaatiot.haeLahetyksenVastaanottajia(lahetys.tunniste, Option.apply(v.last.kontakti.sahkoposti), Option.apply(1), viimeisenTila,securityOperaatiot.getKayttajanOikeudet(), vastaanottajanEmail.orElse("")).isEmpty => Optional.empty
vastaanottajatJaSeuraava match
case v if v.length <= enintaanInt => Optional.empty // lista jatkuu seuraavalle sivulle
case _ => Optional.of(vastaanottajat.last.kontakti.sahkoposti)
}
Right(ResponseEntity.status(HttpStatus.OK).body(VastaanottajatSuccessResponse(
Expand All @@ -283,4 +275,73 @@ class LahetysResource {
case e: Exception =>
LOG.error("Vastaanottajien lukeminen epäonnistui", e)
ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(VastaanottajatFailureResponse(Seq(RaportointiAPIConstants.VASTAANOTTAJAT_LUKEMINEN_EPAONNISTUI).asJava)))

def vastaanottajaLista(kantaOperaatiot: KantaOperaatiot,
kayttajanOikeudet: Set[Kayttooikeus],
lahetystunniste: UUID,
alkaenValidEmail: Option[String],
enintaanInt: Int,
sivutustila: Option[String],
vastaanottajanEmail: Optional[String],
tila: Option[String]): Seq[Vastaanottaja] =
tila match
case Some(tila) =>
kantaOperaatiot.haeLahetyksenVastaanottajia(
lahetysTunniste = lahetystunniste,
alkaen = alkaenValidEmail,
enintaan = Some(enintaanInt),
raportointiTila = Some(tila),
kayttooikeudet = kayttajanOikeudet,
vastaanottajanEmail = vastaanottajanEmail.orElse("")
)
case _ =>
val epaonnistuneet: Seq[Vastaanottaja] = {
if (alkaenValidEmail.isEmpty)
// kaikki epäonnistuneet sivutuksen alkuun jos ei olla selattu eteenpäin
kantaOperaatiot.haeLahetyksenVastaanottajia(
lahetysTunniste = lahetystunniste,
alkaen = None,
enintaan = None,
raportointiTila = Some("epaonnistui"),
kayttooikeudet = kayttajanOikeudet,
vastaanottajanEmail = vastaanottajanEmail.orElse("")
)
else Seq.empty
}
sivutustila match
case Some(sivutustila) if sivutustila.equals("valmis") =>
// sivutuksessa seuraavana on valmiit lähetykset, ei haeta keskeneräisiä
Seq(epaonnistuneet,
kantaOperaatiot.haeLahetyksenVastaanottajia(
lahetysTunniste = lahetystunniste,
alkaen = alkaenValidEmail,
enintaan = Some(enintaanInt),
raportointiTila = Some("valmis"),
kayttooikeudet = kayttajanOikeudet,
vastaanottajanEmail = vastaanottajanEmail.orElse("")
)
).flatten
case _ =>
val kesken: Seq[Vastaanottaja] = kantaOperaatiot.haeLahetyksenVastaanottajia(
lahetysTunniste = lahetystunniste,
alkaen = alkaenValidEmail,
enintaan = Some(enintaanInt),
raportointiTila = Some("kesken"),
kayttooikeudet = kayttajanOikeudet,
vastaanottajanEmail = vastaanottajanEmail.orElse("")
)
if (kesken.size < enintaanInt)
// jos sivu ei ole täynnä keskeneräisistä, haetaan valmiita
val loputCount = enintaanInt - kesken.size
val loputSivulla = kantaOperaatiot.haeLahetyksenVastaanottajia(
lahetysTunniste = lahetystunniste,
alkaen = None,
enintaan = Some(loputCount),
raportointiTila = Some("valmis"),
kayttooikeudet = kayttajanOikeudet,
vastaanottajanEmail = vastaanottajanEmail.orElse("")
)
Seq(epaonnistuneet, kesken, loputSivulla).flatten
else
Seq(epaonnistuneet,kesken).flatten
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ object ParametriUtil {

def epaonnistui(p: VastaanottajanTila): Boolean =
raportointiTilat.epaonnistuneet.contains(p)

def getRaportointiTila(tila: VastaanottajanTila): Option[String] =
tila match
case t if valmis(t) => Option.apply("valmis")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,6 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
GROUP BY viestit.lahetys_tunniste, vastaanottajat.tila
ORDER BY viestit.lahetys_tunniste, vastaanottajat.tila
""".as[(String, String, Int)]
LOG.info(vastaanottajaTilatQuery.toString)

Await.result(db.run(vastaanottajaTilatQuery), DB_TIMEOUT)
.groupMap((lahetysTunniste, tila, vastaanottajalkm) => UUID.fromString(lahetysTunniste))((lahetysTunniste, tila, vastaanottajalkm) => (tila, vastaanottajalkm))
Expand All @@ -706,7 +705,7 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {

val vastaanottajatWhere = if vastaanottajanEmail.isEmpty() then ""
else s" AND vastaanottajat.sahkopostiosoite ='$vastaanottajanEmail'"
LOG.info(s" email: $vastaanottajanEmail")

val vastaanottajatQuery =
sql"""
SELECT vastaanottajat.tunniste, vastaanottajat.viesti_tunniste, vastaanottajat.nimi, vastaanottajat.sahkopostiosoite, vastaanottajat.tila, vastaanottajat.prioriteetti, vastaanottajat.ses_tunniste
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ export default function VastaanottajaHaku() {
<FormControl fullWidth>
<FormLabel>Hae vastaanottajia</FormLabel>
<TextField
id="hakusana"
variant="outlined"
id='hakusana'
variant='outlined'
placeholder={'Hae sähköpostiosoitteella'}
onChange={(e) => {
handleTypedSearch(e.target.value);
Expand All @@ -47,15 +47,15 @@ export default function VastaanottajaHaku() {
<FormLabel>Tila</FormLabel>
<Select
id='tila'
name='vastaanottotila'
name='tila'
defaultValue={''}
onChange={(e) => {
router.push(pathname + '?' + createQueryString(e.target.name, e.target.value))
}}
>
<MenuItem value={''}>Kaikki</MenuItem>
<MenuItem value={'epaonnistui'} disabled>Lähetys epäonnistui</MenuItem>
<MenuItem value={'kesken'} disabled>Lähetys kesken</MenuItem>
<MenuItem value={'epaonnistui'}>Lähetys epäonnistui</MenuItem>
<MenuItem value={'kesken'}>Lähetys kesken</MenuItem>
</Select>
</FormControl>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import VirheAlert from '@/app/components/VirheAlert';
{alkaen: searchParams?.alkaen,
sivutustila: searchParams?.sivutustila,
hakukentta: searchParams?.hakukentta,
hakusana: searchParams?.hakusana})
hakusana: searchParams?.hakusana,
tila: searchParams?.tila})
const virheet = data?.virheet
return (
<Grid container spacing={2} padding={2}>
Expand Down
3 changes: 3 additions & 0 deletions viestinvalitys-raportointi/src/app/lib/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ export async function fetchLahetykset(hakuParams: LahetysHakuParams) {
if(hakuParams?.hakukentta && hakuParams.hakusana) {
fetchParams += `&${hakuParams.hakukentta}=${hakuParams.hakusana}`
}
if(hakuParams?.tila) {
fetchParams += `&tila=${hakuParams.tila}`
}
console.log(url.concat(fetchParams))
const cookieParam = sessionCookie.name+'='+sessionCookie.value
const res = await fetch(url.concat(fetchParams),{
Expand Down

0 comments on commit a97d623

Please sign in to comment.