From 39a8e013f43c484cded06aab78a0837811470344 Mon Sep 17 00:00:00 2001 From: Gunnar Velle Date: Fri, 10 Nov 2023 08:34:55 +0100 Subject: [PATCH] Add config for ai enabled --- .../no/ndla/learningpathapi/DBMigrator.scala | 6 +- .../V33__AiDefaultEnabledOrgs.scala | 76 +++++++++++++++++++ .../model/domain/config/ConfigKey.scala | 1 + .../model/domain/config/ConfigMeta.scala | 1 + 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 learningpath-api/src/main/scala/no/ndla/learningpathapi/db/migrationwithdependencies/V33__AiDefaultEnabledOrgs.scala diff --git a/learningpath-api/src/main/scala/no/ndla/learningpathapi/DBMigrator.scala b/learningpath-api/src/main/scala/no/ndla/learningpathapi/DBMigrator.scala index 2eebecc70..bedca4f93 100644 --- a/learningpath-api/src/main/scala/no/ndla/learningpathapi/DBMigrator.scala +++ b/learningpath-api/src/main/scala/no/ndla/learningpathapi/DBMigrator.scala @@ -13,7 +13,8 @@ import no.ndla.learningpathapi.db.migrationwithdependencies.{ V13__StoreNDLAStepsAsIframeTypes, V14__ConvertLanguageUnknown, V15__MergeDuplicateLanguageFields, - V31__ArenaDefaultEnabledOrgs + V31__ArenaDefaultEnabledOrgs, + V33__AiDefaultEnabledOrgs } import no.ndla.learningpathapi.integration.DataSource import org.flywaydb.core.Flyway @@ -33,7 +34,8 @@ trait DBMigrator { new V13__StoreNDLAStepsAsIframeTypes(props), new V14__ConvertLanguageUnknown(props), new V15__MergeDuplicateLanguageFields(props), - new V31__ArenaDefaultEnabledOrgs(props) + new V31__ArenaDefaultEnabledOrgs(props), + new V33__AiDefaultEnabledOrgs(props) ) .locations("no/ndla/learningpathapi/db/migration") .dataSource(dataSource) diff --git a/learningpath-api/src/main/scala/no/ndla/learningpathapi/db/migrationwithdependencies/V33__AiDefaultEnabledOrgs.scala b/learningpath-api/src/main/scala/no/ndla/learningpathapi/db/migrationwithdependencies/V33__AiDefaultEnabledOrgs.scala new file mode 100644 index 000000000..332b45d4e --- /dev/null +++ b/learningpath-api/src/main/scala/no/ndla/learningpathapi/db/migrationwithdependencies/V33__AiDefaultEnabledOrgs.scala @@ -0,0 +1,76 @@ +/* + * Part of NDLA learningpath-api + * Copyright (C) 2023 NDLA + * + * See LICENSE + */ + +package no.ndla.learningpathapi.db.migrationwithdependencies + +import io.circe.Json +import io.circe.syntax._ +import no.ndla.common.model.NDLADate +import no.ndla.learningpathapi.LearningpathApiProperties +import org.flywaydb.core.api.migration.{BaseJavaMigration, Context} +import org.postgresql.util.PGobject +import scalikejdbc.{DB, DBSession, _} + +class V33__AiDefaultEnabledOrgs(properties: LearningpathApiProperties) extends BaseJavaMigration { + + override def migrate(context: Context): Unit = DB(context.getConnection) + .autoClose(false) + .withinTx { implicit session => + insertConfig + } + + private def insertConfig(implicit session: DBSession): Unit = { + val document = Json.obj( + "key" -> Json.fromString("AI_ENABLED_ORGS"), + "value" -> Json.obj("value" -> Json.fromValues(orgs.map(Json.fromString))), + "updatedAt" -> NDLADate.now().asJson, + "updatedBy" -> Json.fromString("System") + ) + + val dataObject = new PGobject() + dataObject.setType("jsonb") + dataObject.setValue(document.noSpaces) + + val inserted = sql""" + INSERT INTO configtable(configkey, value) + VALUES ( + 'AI_ENABLED_ORGS', + $dataObject + ) + """.update.apply() + + if (inserted != 1) throw new RuntimeException("Failed to insert AI_ENABLED_ORGS") + } + + private def orgs: List[String] = properties.Environment match { + case "local" | "test" => + List( + "Agder fylkeskommune", + "Innlandet fylkeskommune", + "Møre og Romsdal fylkeskommune", + "Nordland fylkeskommune", + "Rogaland fylkeskommune", + "Troms og Finnmark fylkeskommune", + "Trøndelag fylkeskommune", + "Vestfold og Telemark fylkeskommune", + "Vestland fylkeskommune", + "Viken fylkeskommune", + "Universitetet i Rogn" + ) + case "staging" | "prod" => + List( + "Agder fylkeskommune", + "Nordland fylkeskommune", + "Rogaland fylkeskommune", + "Troms og Finnmark fylkeskommune", + "Trøndelag fylkeskommune", + "Vestland fylkeskommune" + ) + case _ => List.empty + } + +} diff --git a/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigKey.scala b/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigKey.scala index 64b694d27..431e171db 100644 --- a/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigKey.scala +++ b/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigKey.scala @@ -15,6 +15,7 @@ object ConfigKey extends Enum[ConfigKey] with CirceEnum[ConfigKey] { case object LearningpathWriteRestricted extends ConfigKey("LEARNINGPATH_WRITE_RESTRICTED") case object MyNDLAWriteRestricted extends ConfigKey("MY_NDLA_WRITE_RESTRICTED") case object ArenaEnabledOrgs extends ConfigKey("ARENA_ENABLED_ORGS") + case object AiEnabledOrgs extends ConfigKey("AI_ENABLED_ORGS") val values: IndexedSeq[ConfigKey] = findValues diff --git a/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigMeta.scala b/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigMeta.scala index 95448d387..05dc89454 100644 --- a/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigMeta.scala +++ b/learningpath-api/src/main/scala/no/ndla/learningpathapi/model/domain/config/ConfigMeta.scala @@ -91,6 +91,7 @@ case class ConfigMeta( case ConfigKey.LearningpathWriteRestricted => validateBooleanKey(ConfigKey.LearningpathWriteRestricted) case ConfigKey.MyNDLAWriteRestricted => validateBooleanKey(ConfigKey.MyNDLAWriteRestricted) case ConfigKey.ArenaEnabledOrgs => validateStringListKey(ConfigKey.ArenaEnabledOrgs) + case ConfigKey.AiEnabledOrgs => validateStringListKey(ConfigKey.AiEnabledOrgs) } }