diff --git a/src/main/scala/fi/oph/koski/opiskeluoikeus/CompositeOpiskeluoikeusRepository.scala b/src/main/scala/fi/oph/koski/opiskeluoikeus/CompositeOpiskeluoikeusRepository.scala index 985260c9f87..cb7eca6ddee 100644 --- a/src/main/scala/fi/oph/koski/opiskeluoikeus/CompositeOpiskeluoikeusRepository.scala +++ b/src/main/scala/fi/oph/koski/opiskeluoikeus/CompositeOpiskeluoikeusRepository.scala @@ -40,15 +40,20 @@ class CompositeOpiskeluoikeusRepository(main: KoskiOpiskeluoikeusRepository, vir def findByOid(oid: String)(implicit user: KoskiSpecificSession): Either[HttpStatus, KoskiOpiskeluoikeusRow] = main.findByOid(oid) + /** + * @param disableDuplicateChecks Kytkee duplikaattitarkastukset pois päältä. Älä käytä tuotannossa! + * Tämä on tarkoitettu testien alustamiseen, joissa tutkitaan jo kantaan päätyneitä viallisia datoja. + */ def createOrUpdate( oppijaOid: PossiblyUnverifiedHenkilöOid, opiskeluoikeus: KoskeenTallennettavaOpiskeluoikeus, allowUpdate: Boolean, - allowDeleteCompleted: Boolean = false + allowDeleteCompleted: Boolean = false, + disableDuplicateChecks: Boolean = false, )( implicit user: KoskiSpecificSession ): Either[HttpStatus, CreateOrUpdateResult] = - withErrorLogging(() => main.createOrUpdate(oppijaOid, opiskeluoikeus, allowUpdate, allowDeleteCompleted)) + withErrorLogging(() => main.createOrUpdate(oppijaOid, opiskeluoikeus, allowUpdate, allowDeleteCompleted, disableDuplicateChecks)) def mapFailureToVirtaUnavailable(result: Try[Seq[Opiskeluoikeus]], oid: String): Try[WithWarnings[Seq[Opiskeluoikeus]]] = { result match { diff --git a/src/main/scala/fi/oph/koski/opiskeluoikeus/KoskiOpiskeluoikeusRepository.scala b/src/main/scala/fi/oph/koski/opiskeluoikeus/KoskiOpiskeluoikeusRepository.scala index cf122e86471..b0e9d55abb8 100644 --- a/src/main/scala/fi/oph/koski/opiskeluoikeus/KoskiOpiskeluoikeusRepository.scala +++ b/src/main/scala/fi/oph/koski/opiskeluoikeus/KoskiOpiskeluoikeusRepository.scala @@ -17,7 +17,8 @@ trait KoskiOpiskeluoikeusRepository { oppijaOid: PossiblyUnverifiedHenkilöOid, opiskeluoikeus: KoskeenTallennettavaOpiskeluoikeus, allowUpdate: Boolean, - allowDeleteComplete: Boolean = false + allowDeleteComplete: Boolean = false, + disableDuplicateChecks: Boolean = false, )(implicit user: KoskiSpecificSession): Either[HttpStatus, CreateOrUpdateResult] def filterOppijat[A <: HenkilönTunnisteet](oppijat: List[A])(implicit user: KoskiSpecificSession): List[A] def findByOppijaOids(oids: List[String])(implicit user: KoskiSpecificSession): Seq[Opiskeluoikeus] diff --git a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepository.scala b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepository.scala index fee5d24a5a6..fabe888cc81 100644 --- a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepository.scala +++ b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepository.scala @@ -83,9 +83,10 @@ class PostgresKoskiOpiskeluoikeusRepository( oppijaOid: PossiblyUnverifiedHenkilöOid, opiskeluoikeus: KoskeenTallennettavaOpiskeluoikeus, allowUpdate: Boolean, - allowDeleteCompleted: Boolean = false + allowDeleteCompleted: Boolean = false, + disableDuplicateChecks: Boolean = false, )(implicit user: KoskiSpecificSession): Either[HttpStatus, CreateOrUpdateResult] = { - actions.createOrUpdate(oppijaOid, opiskeluoikeus, allowUpdate, allowDeleteCompleted) + actions.createOrUpdate(oppijaOid, opiskeluoikeus, allowUpdate, allowDeleteCompleted, disableDuplicateChecks) } def merkitseSuoritusjakoTehdyksiIlmanKäyttöoikeudenTarkastusta(oid: String): HttpStatus = { diff --git a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepositoryActions.scala b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepositoryActions.scala index 64602de66e6..28774f7810f 100644 --- a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepositoryActions.scala +++ b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresKoskiOpiskeluoikeusRepositoryActions.scala @@ -76,13 +76,16 @@ class PostgresKoskiOpiskeluoikeusRepositoryActions( oppijaOid: PossiblyUnverifiedHenkilöOid, opiskeluoikeus: KoskeenTallennettavaOpiskeluoikeus, allowUpdate: Boolean, - allowDeleteCompleted: Boolean + allowDeleteCompleted: Boolean, + disableDuplicateChecks: Boolean = false, )(implicit user: KoskiSpecificSession): DBIOAction[Either[HttpStatus, CreateOrUpdateResult], NoStream, Read with Write with Transactional] = { val identifier = OpiskeluoikeusIdentifier(oppijaOid.oppijaOid, opiskeluoikeus) findByIdentifierAction(identifier).flatMap { case Right(Nil) => createAction(oppijaOid, opiskeluoikeus) + case Right(_) if disableDuplicateChecks => + createAction(oppijaOid, opiskeluoikeus) case Right(aiemmatOpiskeluoikeudet) if allowUpdate => updateIfUnambiguousAiempiOpiskeluoikeusAction(oppijaOid, opiskeluoikeus, identifier, aiemmatOpiskeluoikeudet, allowDeleteCompleted) case Right(aiemmatOpiskeluoikeudet) if vastaavanRinnakkaisenOpiskeluoikeudenLisääminenSallittu(opiskeluoikeus, aiemmatOpiskeluoikeudet) => diff --git a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresOpiskeluoikeusRepositoryActions.scala b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresOpiskeluoikeusRepositoryActions.scala index 3488162a969..5e84a8bc415 100644 --- a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresOpiskeluoikeusRepositoryActions.scala +++ b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresOpiskeluoikeusRepositoryActions.scala @@ -68,13 +68,14 @@ trait PostgresOpiskeluoikeusRepositoryActions[OOROW <: OpiskeluoikeusRow, OOTABL oppijaOid: PossiblyUnverifiedHenkilöOid, opiskeluoikeus: KoskeenTallennettavaOpiskeluoikeus, allowUpdate: Boolean, - allowDeleteCompleted: Boolean + allowDeleteCompleted: Boolean, + disableDuplicateChecks: Boolean = false, )(implicit user: KoskiSpecificSession): Either[HttpStatus, CreateOrUpdateResult] = { def createOrUpdateWithRetry: Either[HttpStatus, CreateOrUpdateResult] = { val result = try { runDbSync { (for { - result <- createOrUpdateAction(oppijaOid, opiskeluoikeus, allowUpdate, allowDeleteCompleted) + result <- createOrUpdateAction(oppijaOid, opiskeluoikeus, allowUpdate, allowDeleteCompleted, disableDuplicateChecks) syncAction <- syncAction(oppijaOid, opiskeluoikeus, result) } yield result).transactionally } @@ -114,7 +115,8 @@ trait PostgresOpiskeluoikeusRepositoryActions[OOROW <: OpiskeluoikeusRow, OOTABL oppijaOid: PossiblyUnverifiedHenkilöOid, opiskeluoikeus: KoskeenTallennettavaOpiskeluoikeus, allowUpdate: Boolean, - allowDeleteCompleted: Boolean = false + allowDeleteCompleted: Boolean = false, + disableDuplicateChecks: Boolean = false, )(implicit user: KoskiSpecificSession): dbio.DBIOAction[Either[HttpStatus, CreateOrUpdateResult], NoStream, Read with Write with Transactional] protected def findByIdentifierAction(identifier: OpiskeluoikeusIdentifier)(implicit user: KoskiSpecificSession): dbio.DBIOAction[Either[HttpStatus, List[OOROW]], NoStream, Read] = { diff --git a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresYtrOpiskeluoikeusRepositoryActions.scala b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresYtrOpiskeluoikeusRepositoryActions.scala index c655ba51acb..e57c1bdaa60 100644 --- a/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresYtrOpiskeluoikeusRepositoryActions.scala +++ b/src/main/scala/fi/oph/koski/opiskeluoikeus/PostgresYtrOpiskeluoikeusRepositoryActions.scala @@ -47,7 +47,8 @@ class PostgresYtrOpiskeluoikeusRepositoryActions( oppijaOid: PossiblyUnverifiedHenkilöOid, opiskeluoikeus: KoskeenTallennettavaOpiskeluoikeus, allowUpdate: Boolean, - allowDeleteCompleted: Boolean + allowDeleteCompleted: Boolean, + disableDuplicateChecks: Boolean = false, )(implicit user: KoskiSpecificSession): DBIOAction[Either[HttpStatus, CreateOrUpdateResult], NoStream, Read with Write with Transactional] = { val identifier = OpiskeluoikeusIdentifier(oppijaOid.oppijaOid, opiskeluoikeus) diff --git "a/src/test/scala/fi/oph/koski/raportit/PerusopetuksenOppijam\303\244\303\244r\303\244tRaporttiSpec.scala" "b/src/test/scala/fi/oph/koski/raportit/PerusopetuksenOppijam\303\244\303\244r\303\244tRaporttiSpec.scala" index dae6ff68fb7..c4bdbce92d0 100644 --- "a/src/test/scala/fi/oph/koski/raportit/PerusopetuksenOppijam\303\244\303\244r\303\244tRaporttiSpec.scala" +++ "b/src/test/scala/fi/oph/koski/raportit/PerusopetuksenOppijam\303\244\303\244r\303\244tRaporttiSpec.scala" @@ -34,7 +34,8 @@ class PerusopetuksenOppijamäärätRaporttiSpec extends AnyFreeSpec with Matcher val createResult = application.opiskeluoikeusRepository.createOrUpdate( oppijaOid = VerifiedHenkilöOid(vuonna2005SyntynytEiOpiskeluoikeuksiaFikstuurissa), opiskeluoikeus = oo, - allowUpdate = false + allowUpdate = false, + disableDuplicateChecks = true, )(session(defaultUser)) createResult.map(_.created) should be(Right(true)) createResult.map(_.oid)