Skip to content

Commit

Permalink
Merge pull request #860 from luechtdiode/fix/performance-improvements
Browse files Browse the repository at this point in the history
optimize performance of registration teams route
  • Loading branch information
luechtdiode authored Mar 30, 2024
2 parents 4972b5a + ab52762 commit 7dbc652
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,7 @@ export class BackendService extends WebsocketService {
error: this.standardErrorHandler
});

return this.clubRegistrations;
return loader;
}

loadRegistrationSyncActions(): Observable<SyncAction[]> {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@

<body>
<app-root></app-root>
<script src="runtime.2fa1a1a355f54015.js" type="module"></script><script src="polyfills.04266a2a1c92f89b.js" type="module"></script><script src="main.90253aff127136dc.js" type="module"></script></body>
<script src="runtime.2fa1a1a355f54015.js" type="module"></script><script src="polyfills.04266a2a1c92f89b.js" type="module"></script><script src="main.3ecdff4a68093fe9.js" type="module"></script></body>

</html>
1 change: 1 addition & 0 deletions src/main/resources/app/main.3ecdff4a68093fe9.js

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion src/main/resources/app/main.90253aff127136dc.js

This file was deleted.

33 changes: 20 additions & 13 deletions src/main/scala/ch/seidel/kutu/domain/TeamRegel.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,24 @@ package ch.seidel.kutu.domain
object TeamRegel {
val defaultRegel = TeamRegelList(List(), Some("Keine Teams"))

val vereinGesamt = "VereinGesamt"
val vereinGeraet = "VereinGerät"
val verbandGesamt = "VerbandGesamt"
val verbandGeraet = "VerbandGerät"
val vereinRegeln = Set(vereinGesamt, vereinGeraet)
val verbandRegeln = Set(verbandGesamt, verbandGeraet)

val predefined = Map(
("Keine Teams" -> "")
, ("Aus Verein, drei Bestnoten pro Gerät, mit unbeschränkter Anzahl Mitglieder" -> "VereinGerät(3/*)")
, ("Aus Verein, drei Bestnoten pro Gerät, mit max vier Mitglieder" -> "VereinGerät(3/4)")
, ("Aus Verein, drei Gesamt-Bestnoten, mit unbeschränkter Anzahl Mitglieder" -> "VereinGesamt(3/*)")
, ("Aus Verein, drei Gesamt-Bestnoten, mit max vier Mitglieder" -> "VereinGesamt(3/4)")
, ("Aus Verband, drei Bestnoten pro Gerät, mit unbeschränkter Anzahl Mitglieder" -> "VerbandGerät(3/*)")
, ("Aus Verband, drei Bestnoten pro Gerät, mit max vier Mitglieder" -> "VerbandGerät(3/4)")
, ("Aus Verband, drei Gesamt-Bestnoten, mit unbeschränkter Anzahl Mitglieder" -> "VerbandGesamt(3/*)")
, ("Aus Verband, drei Gesamt-Bestnoten, mit max vier Mitglieder" -> "VerbandGesamt(3/4)")
, ("Individuell" -> "VereinGesamt(<min>/<max>/<extrateam1>+<extrateam2>), VerbandGesamt(<min>/<max>), VereinGerät(<min>/<max>), VerbandGerät(<min>/<max>)")
, ("Aus Verein, drei Bestnoten pro Gerät, mit unbeschränkter Anzahl Mitglieder" -> s"$vereinGeraet(3/*)")
, ("Aus Verein, drei Bestnoten pro Gerät, mit max vier Mitglieder" -> s"$vereinGeraet(3/4)")
, ("Aus Verein, drei Gesamt-Bestnoten, mit unbeschränkter Anzahl Mitglieder" -> s"$vereinGesamt(3/*)")
, ("Aus Verein, drei Gesamt-Bestnoten, mit max vier Mitglieder" -> s"$vereinGesamt(3/4)")
, ("Aus Verband, drei Bestnoten pro Gerät, mit unbeschränkter Anzahl Mitglieder" -> s"$verbandGeraet(3/*)")
, ("Aus Verband, drei Bestnoten pro Gerät, mit max vier Mitglieder" -> s"$verbandGeraet(3/4)")
, ("Aus Verband, drei Gesamt-Bestnoten, mit unbeschränkter Anzahl Mitglieder" -> s"$verbandGesamt(3/*)")
, ("Aus Verband, drei Gesamt-Bestnoten, mit max vier Mitglieder" -> s"$verbandGesamt(3/4)")
, ("Individuell" -> s"$vereinGesamt(<min>/<max>/<extrateam1>+<extrateam2>), $verbandGesamt(<min>/<max>), VereinGerät(<min>/<max>), $vereinGeraet(<min>/<max>)")
)
private val rangePattern = "([\\S]+)\\(([0-9]+)\\/([0-9,\\*]*)(\\/[\\S\\s\\/0-9+]*)?\\)".r

Expand All @@ -24,10 +31,10 @@ object TeamRegel {
case rangePattern(rulename, min, max, extrateams) =>
val extraTeamsDef = if (extrateams == null) "" else extrateams
rulename match {
case "VereinGesamt" => Some(TeamRegelVereinGesamt(min, defaultMax(max), extraTeamsDef))
case "VerbandGesamt" => Some(TeamRegelVerbandGesamt(min, defaultMax(max), extraTeamsDef))
case "VereinGerät" => Some(TeamRegelVereinGeraet(min, defaultMax(max), extraTeamsDef))
case "VerbandGerät" => Some(TeamRegelVerbandGeraet(min, defaultMax(max), extraTeamsDef))
case `vereinGesamt` => Some(TeamRegelVereinGesamt(min, defaultMax(max), extraTeamsDef))
case `verbandGesamt` => Some(TeamRegelVerbandGesamt(min, defaultMax(max), extraTeamsDef))
case `vereinGeraet` => Some(TeamRegelVereinGeraet(min, defaultMax(max), extraTeamsDef))
case `verbandGeraet` => Some(TeamRegelVerbandGeraet(min, defaultMax(max), extraTeamsDef))
case _ => None
}
case "Keine Teams" =>None
Expand Down
4 changes: 3 additions & 1 deletion src/main/scala/ch/seidel/kutu/domain/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -727,7 +727,9 @@ package object domain {

override def easyprint = f"$titel am $datum%td.$datum%tm.$datum%tY"

lazy val extraTeams: List[String] = teamrule.map(TeamRegel(_).getExtrateams).toList.flatten
lazy val teamRegeln: Option[TeamRegel] = teamrule.map(TeamRegel(_))
lazy val extraTeams: List[String] = teamRegeln.map(_.getExtrateams).toList.flatten
lazy val hasTeams: Boolean = teamRegeln.exists(_.teamsAllowed)

def toView(programm: ProgrammView): WettkampfView = {
WettkampfView(id, uuid, datum, titel, programm, auszeichnung, auszeichnungendnote, notificationEMail, altersklassen.getOrElse(""), jahrgangsklassen.getOrElse(""), punktegleichstandsregel.getOrElse(""), rotation.getOrElse(""), teamrule.getOrElse(""))
Expand Down
43 changes: 25 additions & 18 deletions src/main/scala/ch/seidel/kutu/http/RegistrationRoutes.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import ch.seidel.kutu.{Config, domain}
import ch.seidel.kutu.Config.remoteAdminBaseUrl
import ch.seidel.kutu.akka._
import ch.seidel.kutu.data.RegistrationAdmin.adjustWertungRiegen
import ch.seidel.kutu.domain.{AthletRegistration, AthletView, JudgeRegistration, KutuService, NewRegistration, ProgrammRaw, Registration, RegistrationResetPW, TeamItem, Verein, Wettkampf, dateToExportedStr, encodeFileName, str2SQLDate}
import ch.seidel.kutu.domain.{AthletRegistration, AthletView, JudgeRegistration, KutuService, NewRegistration, ProgrammRaw, Registration, RegistrationResetPW, TeamItem, TeamRegel, Verein, Wettkampf, dateToExportedStr, encodeFileName, str2SQLDate}
import ch.seidel.kutu.http.AuthSupport.OPTION_LOGINRESET
import ch.seidel.kutu.renderer.MailTemplates.createPasswordResetMail
import ch.seidel.kutu.renderer.{CompetitionsClubsToHtmlRenderer, CompetitionsJudgeToHtmlRenderer, PrintUtil}
Expand Down Expand Up @@ -169,11 +169,13 @@ trait RegistrationRoutes extends SprayJsonSupport with JwtSupport with JsonSuppo
CompetitionRegistrationClientActor.publish(ApproveEMail(wettkampf.uuid.get, mail), clientId).map{
case EMailApproved(message, success) =>
s"${wettkampf.easyprint}: $message"
case _ =>
"unable to approve - unexpected behavior"
}
}
case _ =>
complete {Future {
""
"unable to approve without mail"
}}
}
}
Expand Down Expand Up @@ -375,24 +377,29 @@ trait RegistrationRoutes extends SprayJsonSupport with JwtSupport with JsonSuppo
pathEndOrSingleSlash {
get {
complete {
val registration = selectRegistration(registrationId)
val (teamname, teamNumbers) = if (wettkampf.teamrule.exists(r => r.contains("VereinGe")))
(s"${registration.toVerein.extendedprint}", selectAthletRegistrations(registrationId)
.flatMap(_.team)
.filter(_ > 0).distinct.sorted)
else
(s"${registration.verband}", selectRegistrations()
.filter(_.verband.equalsIgnoreCase(registration.verband))
.flatMap(vereinsReg => selectAthletRegistrations(vereinsReg.id))
.flatMap(_.team)
.filter(_ > 0).distinct.sorted)
if (wettkampf.hasTeams) {
val registration = selectRegistration(registrationId)
val (teamname, teamNumbers) = if (wettkampf.teamrule.exists(r => TeamRegel.vereinRegeln.exists(p => r.contains(p))))
(s"${registration.toVerein.extendedprint}", selectAthletRegistrations(registrationId)
.flatMap(_.team)
.filter(_ > 0).distinct.sorted)
else if (wettkampf.teamrule.exists(r => TeamRegel.verbandRegeln.exists(p => r.contains(p))))
(s"${registration.verband}", selectRegistrations()
.filter(_.verband.equalsIgnoreCase(registration.verband))
.flatMap(vereinsReg => selectAthletRegistrations(vereinsReg.id))
.flatMap(_.team)
.filter(_ > 0).distinct.sorted)
else (s"${registration.toVerein.extendedprint}", List.empty)

val nextTeamNumber = if (teamNumbers.isEmpty) 1 else teamNumbers.max + 1
val nextTeamNumber = if (teamNumbers.isEmpty) 1 else teamNumbers.max + 1

(1 to nextTeamNumber).toList.map(idx => TeamItem(idx, teamname)) :::
wettkampf.extraTeams
.filter(_.nonEmpty)
.zipWithIndex.map(item => TeamItem(item._2 * -1 - 1, item._1))
(1 to nextTeamNumber).toList.map(idx => TeamItem(idx, teamname)) :::
wettkampf.extraTeams
.filter(_.nonEmpty)
.zipWithIndex.map(item => TeamItem(item._2 * -1 - 1, item._1))
} else {
List[TeamItem]()
}
}
}
}
Expand Down

0 comments on commit 7dbc652

Please sign in to comment.