Skip to content

Commit

Permalink
OK-365 apitäydennyksiä
Browse files Browse the repository at this point in the history
  • Loading branch information
marjakari committed Jan 11, 2024
1 parent 8189723 commit b8e1258
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ object APIConstants {
final val LAHETYSTUNNISTE_PARAM_NAME = "lahetysTunniste"
final val LAHETYSTUNNISTE_PARAM_PLACEHOLDER = "{" + LAHETYSTUNNISTE_PARAM_NAME + "}"
final val GET_LAHETYS_PATH = LAHETYKSET_PATH + "/" + LAHETYSTUNNISTE_PARAM_PLACEHOLDER
final val GET_LAHETYKSET_LISTA_PATH = LAHETYKSET_PATH + "/" + "lista"

final val GET_VASTAANOTTAJAT_PATH = GET_LAHETYS_PATH + "/vastaanottajat"
final val ALKAEN_PARAM_NAME = "alkaen"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse
import io.swagger.v3.oas.annotations.tags.Tag
import io.swagger.v3.oas.annotations.{Operation, Parameter}
import jakarta.servlet.http.{HttpServletRequest, HttpServletResponse}
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.redis.core.ScanCursor
import org.springframework.http.{HttpStatus, MediaType, ResponseEntity}
Expand All @@ -27,6 +28,7 @@ import slick.jdbc.JdbcBackend.Database
import slick.lifted.TableQuery
import slick.jdbc.PostgresProfile.api.*

import java.time.Instant
import java.util
import java.util.UUID
import java.util.stream.Collectors
Expand All @@ -38,11 +40,23 @@ import scala.concurrent.Await
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration.DurationInt


class PalautaLahetyksetResponse() {}

@JsonInclude(JsonInclude.Include.NON_ABSENT)
case class PalautaLahetyksetSuccessResponse(
@BeanProperty lahetykset: java.util.List[PalautaLahetysSuccessResponse],
) extends PalautaLahetyksetResponse

case class PalautaLahetyksetFailureResponse(
@BeanProperty virhe: String,
) extends PalautaLahetyksetResponse
class PalautaLahetysResponse() {}

case class PalautaLahetysSuccessResponse(
@BeanProperty lahetysTunniste: String,
@BeanProperty otsikko: String
@BeanProperty otsikko: String,
@BeanProperty luotu: String
) extends PalautaLahetysResponse

case class PalautaLahetysFailureResponse(
Expand Down Expand Up @@ -102,6 +116,8 @@ case class VastaanottajatFailureResponse(
"liitetään luomisen yhteydessä lähetykseen, joko erikseen tai automaattisesti luotuun.")
class LahetysResource {

val LOG = LoggerFactory.getLogger(classOf[LahetysResource]);

@GetMapping(
path = Array(GET_VIESTIT_LAHETYSTUNNISTEELLA_PATH),
produces = Array(MediaType.APPLICATION_JSON_VALUE)
Expand Down Expand Up @@ -143,15 +159,43 @@ class LahetysResource {
)).asJava
))

@GetMapping(
path = Array(GET_LAHETYKSET_LISTA_PATH),
produces = Array(MediaType.APPLICATION_JSON_VALUE)
)
@Operation(
summary = "Palauttaa listan lähetysten raportointitietoja",
description = "Palauttaa lähetyksien tiedot raportointikäyttöliittymälle listauksena",
responses = Array(
new ApiResponse(responseCode = "200", description = "Palauttaa lähetykset", content = Array(new Content(schema = new Schema(implementation = classOf[PalautaLahetyksetSuccessResponse])))),
new ApiResponse(responseCode = "400", description = RESPONSE_400_DESCRIPTION, content = Array(new Content(schema = new Schema(implementation = classOf[PalautaLahetyksetFailureResponse])))),
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 lueLahetykset(): ResponseEntity[PalautaLahetyksetResponse] =
val securityOperaatiot = new SecurityOperaatiot
if (!securityOperaatiot.onOikeusKatsella())
return ResponseEntity.status(HttpStatus.FORBIDDEN).build()

val kantaOperaatiot = new KantaOperaatiot(DbUtil.database)
val lahetykset = kantaOperaatiot.getLahetykset()
if (lahetykset.isEmpty)
return ResponseEntity.status(HttpStatus.GONE).build()

// TODO tarkempi käyttöoikeusrajaus/suodatus
// TODO sivutus
ResponseEntity.status(HttpStatus.OK).body(PalautaLahetyksetSuccessResponse(
lahetykset.map(lahetys => PalautaLahetysSuccessResponse(lahetys.tunniste.toString, lahetys.otsikko, lahetys.luotu.toString)).asJava))

@GetMapping(
path = Array(GET_LAHETYS_PATH),
produces = Array(MediaType.APPLICATION_JSON_VALUE)
)
@Operation(
summary = "Palauttaa yksittäisen lähetyksen raportointitiedot",
description = "Palauttaa lähetyksen ja viestin tiedot raportointikäyttöliittymälle",
description = "Palauttaa lähetyksen tiedot raportointikäyttöliittymälle",
responses = Array(
new ApiResponse(responseCode = "200", description = "Palauttaa viestin", content = Array(new Content(schema = new Schema(implementation = classOf[PalautaLahetysSuccessResponse])))),
new ApiResponse(responseCode = "200", description = "Palauttaa lähetyksen", content = Array(new Content(schema = new Schema(implementation = classOf[PalautaLahetysSuccessResponse])))),
new ApiResponse(responseCode = "400", description = RESPONSE_400_DESCRIPTION, content = Array(new Content(schema = new Schema(implementation = classOf[PalautaLahetysFailureResponse])))),
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]))))
Expand All @@ -175,7 +219,8 @@ class LahetysResource {
if (!onLukuOikeudet)
return ResponseEntity.status(HttpStatus.FORBIDDEN).build()

ResponseEntity.status(HttpStatus.OK).body(PalautaLahetysSuccessResponse(lahetys.get.tunniste.toString, lahetys.get.otsikko))
ResponseEntity.status(HttpStatus.OK).body(PalautaLahetysSuccessResponse(
lahetys.get.tunniste.toString, lahetys.get.otsikko, lahetys.get.luotu.toString))


@GetMapping(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ enum Kieli:
enum Prioriteetti:
case NORMAALI, KORKEA

case class Lahetys(tunniste: UUID, otsikko: String, omistaja: String, lahettavaPalvelu: String)
case class Lahetys(tunniste: UUID, otsikko: String, omistaja: String, lahettavaPalvelu: String, luotu: Instant)

enum LiitteenTila:
case SKANNAUS, PUHDAS, SAASTUNUT, VIRHE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
*/
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}, ${lahettavaPalvelu}, ${omistaja}, now())"""

val luontiaika = Instant.now
val lahetysInsertAction = sqlu"""INSERT INTO lahetykset VALUES(${lahetysTunniste.toString}::uuid, ${otsikko}, ${lahettavaPalvelu}, ${omistaja}, ${luontiaika.toString}::timestamptz)"""
val kayttooikeusInsertActions = DBIO.sequence(kayttooikeusRajoitukset.map(kayttooikeus => {
val tunniste = this.getUUID()
sqlu"""
Expand All @@ -56,7 +56,7 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
}))

Await.result(db.run(DBIO.sequence(Seq(lahetysInsertAction, kayttooikeusInsertActions)).transactionally), DB_TIMEOUT)
Lahetys(lahetysTunniste, otsikko, omistaja, lahettavaPalvelu)
Lahetys(lahetysTunniste, otsikko, omistaja, lahettavaPalvelu, luontiaika)
}

/**
Expand All @@ -68,11 +68,11 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
def getLahetys(tunniste: UUID): Option[Lahetys] =
Await.result(db.run(
sql"""
SELECT tunniste, otsikko, omistaja, lahettavapalvelu
SELECT tunniste, otsikko, omistaja, lahettavapalvelu, to_json(luotu::timestamptz)#>>'{}'
FROM lahetykset
WHERE tunniste=${tunniste.toString}::uuid
""".as[(String, String, String, String)].headOption), DB_TIMEOUT)
.map((tunniste, otsikko, omistaja, lahettavapalvelu) => Lahetys(UUID.fromString(tunniste), otsikko, omistaja, lahettavapalvelu))
""".as[(String, String, String, String, String)].headOption), DB_TIMEOUT)
.map((tunniste, otsikko, omistaja, lahettavapalvelu, luotu) => Lahetys(UUID.fromString(tunniste), otsikko, omistaja, lahettavapalvelu, Instant.parse(luotu)))

/**
* Palauttaa lähetyksen katseluun vaadittavat käyttöoikeudet
Expand All @@ -90,6 +90,20 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {

Await.result(db.run(kayttooikeudetQuery), DB_TIMEOUT).toSet

/**
* Palauttaa listan lähetyksiä
*
* @return hakuehtoja (TODO) vastaavat lähetykset
*/
def getLahetykset(): Seq[Lahetys] =
Await.result(db.run(
sql"""
SELECT tunniste, otsikko, omistaja, lahettavapalvelu, to_json(luotu::timestamptz)#>>'{}'
FROM lahetykset
""".as[(String, String, String, String, String)]), DB_TIMEOUT)
.map((tunniste, otsikko, omistaja, lahettavapalvelu, luotu) => Lahetys(UUID.fromString(tunniste), otsikko, omistaja, lahettavapalvelu, Instant.parse(luotu)))


/**
* Tallentaa uuden liitteen
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,11 @@ class KantaOperaatiotTest {

// varmistetaan että luetut entiteetit sisältävät mitä tallennettiin
// HUOM! liitteiden järjestys on olennainen asia
Assertions.assertEquals(Lahetys(viesti.lahetys_tunniste, viesti.otsikko, "omistaja", "palvelu"), kantaOperaatiot.getLahetys(viesti.lahetys_tunniste).get)
val tallennettuLahetys = kantaOperaatiot.getLahetys(viesti.lahetys_tunniste).get
Assertions.assertEquals(viesti.lahetys_tunniste, tallennettuLahetys.tunniste)
Assertions.assertEquals(viesti.otsikko, tallennettuLahetys.otsikko)
Assertions.assertEquals("omistaja", tallennettuLahetys.omistaja)
Assertions.assertEquals("palvelu", tallennettuLahetys.lahettavaPalvelu)
Assertions.assertEquals(vastaanottajat, kantaOperaatiot.getVastaanottajat(vastaanottajat.map(v => v.tunniste)))
Assertions.assertEquals(viesti, kantaOperaatiot.getViestit(Seq(viesti.tunniste)).find(v => true).get)
Assertions.assertEquals(liitteet, kantaOperaatiot.getViestinLiitteet(Seq(viesti.tunniste)).get(viesti.tunniste).get)
Expand Down

0 comments on commit b8e1258

Please sign in to comment.