Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TOR-2099: Parempi vihje, jos massaluovutuskysely epäonnistui liian isoon tulostiedostoon #3171

Merged
merged 1 commit into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ trait MassaluovutusQueryParameters {
def priority: Int = MassaluovutusQueryPriority.normal
}

trait PartitionSupport {
def partitionFormats: Seq[String]
}

object MassaluovutusQueryPriority {
val highest = 1
val high = 3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ object QueryResponse {
startedAt = q.startedAt,
finishedAt = q.finishedAt,
files = q.filesToExternal(rootUrl),
hint = failedQueryHint(q),
hint = failedQueryHint(q, rootUrl),
error = if (session.hasGlobalReadAccess) Some(q.error) else None,
)
case q: CompleteQuery => CompleteQueryResponse(
Expand All @@ -197,9 +197,19 @@ object QueryResponse {
implicit def toOffsetDateTime(dt: Option[LocalDateTime]): Option[OffsetDateTime] =
dt.map(toOffsetDateTime)

def failedQueryHint(q: FailedQuery): Option[String] =
def failedQueryHint(q: FailedQuery, rootUrl: String): Option[String] =
if (q.error.contains("Your proposed upload exceeds the maximum allowed size")) {
Some("Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Pienennä tulosjoukon kokoa esimerkiksi rajaamalla kysely lyhyemmälle aikavälille tai käytä ositettuja tulostiedostoja, jos kysely tukee sitä.")
val suggestions = (
List("rajaa kysely lyhyemmälle aikavälille") ++
(q.query match {
case p: PartitionSupport =>
val formats = p.partitionFormats.mkString(" tai ")
val helpUrl = s"$rootUrl/dokumentaatio/rajapinnat/massaluovutus/koulutuksenjarjestajat"
List(s"käytä tulostiedostojen ositusta asettalla format-kenttään $formats (kts. tarkemmat ohjeet $helpUrl)")
case _ => List()
})
).mkString("; ")
Some(s"Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Ehdotuksia kyselyn korjaamiseksi: $suggestions")
} else {
None
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import fi.oph.koski.config.KoskiApplication
import fi.oph.koski.koskiuser.KoskiSpecificSession
import fi.oph.koski.organisaatio.MockOrganisaatiot
import fi.oph.koski.massaluovutus.MassaluovutusUtils.QueryResourceManager
import fi.oph.koski.massaluovutus.{CsvStream, QueryFormat, QueryResultWriter}
import fi.oph.koski.massaluovutus.{CsvStream, PartitionSupport, QueryFormat, QueryResultWriter}
import fi.oph.koski.raportointikanta._
import fi.oph.koski.schema.Organisaatio
import fi.oph.koski.schema.Organisaatio.Oid
Expand Down Expand Up @@ -43,7 +43,8 @@ case class MassaluovutusQueryOrganisaationOpiskeluoikeudetCsv(
eiOsasuorituksia: Option[Boolean] = None,
@Description("Jos true, ei kyselyllä luoda opiskeluoikeuden aikajaksotiedostoja")
eiAikajaksoja: Option[Boolean] = None,
) extends MassaluovutusQueryOrganisaationOpiskeluoikeudet {
) extends MassaluovutusQueryOrganisaationOpiskeluoikeudet with PartitionSupport {
def partitionFormats: Seq[String] = Seq(QueryFormat.csvPartition)

def withOrganisaatioOid(organisaatioOid: Oid): MassaluovutusQueryOrganisaationOpiskeluoikeudetCsv = copy(organisaatioOid = Some(organisaatioOid))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class MassaluovutusSpec extends AnyFreeSpec with KoskiHttpSpec with Matchers wit
KoskiApplicationForTests.massaluovutusService.addRaw(failedQuery)
getQuerySuccessfully(failedQuery.queryId, MockUsers.tornioTallentaja) { response =>
val failResponse = response.asInstanceOf[FailedQueryResponse]
failResponse.hint should equal(Some("Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Pienennä tulosjoukon kokoa esimerkiksi rajaamalla kysely lyhyemmälle aikavälille tai käytä ositettuja tulostiedostoja, jos kysely tukee sitä."))
failResponse.hint should equal(Some("Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Ehdotuksia kyselyn korjaamiseksi: rajaa kysely lyhyemmälle aikavälille; käytä tulostiedostojen ositusta asettalla format-kenttään text/x-csv-partition (kts. tarkemmat ohjeet http://localhost:7021/koski/dokumentaatio/rajapinnat/massaluovutus/koulutuksenjarjestajat)"))
failResponse.error should equal(None)
}
}
Expand Down
Loading