app/services/LegacyIdentityDbUserService.scala (43 lines of code) (raw):

package services import model.Permission import play.api.Logging import play.api.libs.json.{JsArray, JsValue, Json, Reads} import slick.basic.DatabaseConfig import slick.jdbc.JdbcProfile import scala.concurrent.{ExecutionContext, Future} import scala.util.Failure import scala.util.chaining.* class LegacyIdentityDbUserService(val dbConfig: DatabaseConfig[JdbcProfile])(implicit ctx: ExecutionContext) extends Logging { import dbConfig.profile.api.* private val db = dbConfig.db def healthCheck(): Future[Unit] = db.run(sql"SELECT 1".as[Int]) .map(_ => ()) .tap(_.onComplete { case Failure(exception) => logger.error(s"Health check failed: ${exception.getMessage}") case _ => () }) def fetchUserByIdentityId(id: String): Future[Option[LegacyUser]] = db.run( sql"SELECT id, okta_id, braze_uuid, jdoc->'publicFields'->>'username', jdoc->'consents' FROM users WHERE id = $id LIMIT 1" .as[(String, Option[String], Option[String], Option[String], String)] ).map(_.map { case (identityId, oktaId, brazeId, userName, permissionsJsonStr) => LegacyUser(identityId, oktaId, brazeId, userName, toPermissions(permissionsJsonStr)) }.headOption) private def toPermissions(jsonStr: String): Seq[Permission] = { def toPermission(json: JsValue) = Permission(id = (json \ "id").as[String], permitted = (json \ "consented").as[Boolean]) (Json.parse(jsonStr) match { case JsArray(jsons) => jsons case _ => Nil }).map(toPermission).toList } } case class LegacyUser( identityId: String, oktaId: Option[String], brazeId: Option[String], userName: Option[String], permissions: Seq[Permission] )