app/services/CompositeUserService.scala (20 lines of code) (raw):
package services
import model.User
import scala.concurrent.{ExecutionContext, Future}
class CompositeUserService(okta: OktaUserService, identityDb: LegacyIdentityDbUserService)(implicit
ctx: ExecutionContext
) extends UserService {
def healthCheck(): Future[Unit] = for {
_ <- okta.healthCheck()
_ <- identityDb.healthCheck()
} yield ()
override def fetchUserByOktaId(oktaId: String): Future[Option[User]] = for {
optOktaUser <- okta.fetchUserByOktaId(oktaId)
optLegacyUser <- optOktaUser
.map(oktaUser => identityDb.fetchUserByIdentityId(oktaUser.legacyIdentityId))
.getOrElse(Future.successful(None))
} yield for {
oktaUser <- optOktaUser
legacyUser <- optLegacyUser
} yield oktaUser.copy(userName = legacyUser.userName, permissions = legacyUser.permissions)
}