Option to split the Mapped tables code into a separate scala project separated by Akka #154 - get rid of implicit foreign key references - in progress

This commit is contained in:
Marko Milic 2017-02-20 14:13:18 +01:00
parent 80f03d984f
commit 6749d3fff2
9 changed files with 144 additions and 13 deletions

View File

@ -39,6 +39,7 @@ import net.liftweb.common.{Box, Failure, Full}
import code.api.UserNotFound
import code.views.Views
import code.entitlement.Entitlement
import code.model.dataAccess.ResourceUser
import code.users.Users
case class UserId(val value : Long) {
@ -117,7 +118,19 @@ object User {
Users.users.vend.getUserByUserName(userName)
}
def findAll() = {
Users.users.vend.getAllUsers()
}
def createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) = {
Users.users.vend.createResourceUser(provider, providerId, name, email, userId)
}
def createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) = {
Users.users.vend.createUnsavedResourceUser(provider, providerId, name, email, userId)
}
def saveResourceUser(ru: ResourceUser) = {
Users.users.vend.saveResourceUser(ru)
}
}

View File

@ -91,12 +91,8 @@ class AuthUser extends MegaProtoUser[AuthUser] with Logger {
}
def createUnsavedResourceUser() : ResourceUser = {
ResourceUser.create
.name_(username)
.email(email)
.provider_(getProvider())
.providerId(username)
//code.model.User.createResourceUser(getProvider(), Some(username), Some(username), Some(email), None).get
val user = code.model.User.createUnsavedResourceUser(getProvider(), Some(username), Some(username), Some(email), None).get
user
}
def getResourceUsersByEmail(userEmail: String) : List[ResourceUser] = {

View File

@ -13,8 +13,10 @@ trait CreateAuthUsers {
def asSaveable(u : AuthUser) = new Saveable[ResourceUser] {
val value = u.createUnsavedResourceUser()
def save() = {
value.save()
u.user(value).save()
val usr = code.model.User.saveResourceUser(value)
for (uu <- usr) {
u.user(uu).save()
}
}
}

View File

@ -8,7 +8,7 @@ import code.metadata.counterparties.{Counterparties, MapperCounterparties}
import code.products.Products
import code.products.Products.{Product, ProductCode}
import code.bankconnectors.{Connector, OBPLimit, OBPOffset}
import code.model.dataAccess.{ResourceUser, MappedAccountHolder}
import code.model.dataAccess.{MappedAccountHolder, ResourceUser}
import code.model._
import code.branches.Branches.Branch
import code.atms.Atms.Atm
@ -162,6 +162,7 @@ trait OBPDataImport extends Loggable {
*/
protected def setAccountOwner(owner : AccountOwnerUsername, account: BankAccount, createdUsers: List[ResourceUser]): AnyVal = {
val resourceUserOwner = createdUsers.find(user => owner == user.name)
println("{resourceUserOwner: " + resourceUserOwner)
resourceUserOwner match {
case Some(o) => {
@ -522,7 +523,7 @@ trait OBPDataImport extends Loggable {
val us = code.model.User.findAll().getOrElse(List());
logger.info(s"importData is saving ${accountResults.size} accountResults (accounts, views and permissions)..")
accountResults.foreach {
case (account, views, accOwnerUsernames) =>
@ -531,11 +532,11 @@ trait OBPDataImport extends Loggable {
views.filterNot(_.isPublic).foreach(v => {
//grant the owner access to non-public views
//this should always find the owners as that gets verified at an earlier stage, but it's not perfect this way
val accOwners = users.map(_.value).filter(u => accOwnerUsernames.exists(name => u.name == name))
val accOwners = us.filter(u => accOwnerUsernames.exists(name => u.name == name))
accOwners.foreach(Views.views.vend.addPermission(v.uid, _))
})
accOwnerUsernames.foreach(setAccountOwner(_, account.value, users.map(_.value)))
accOwnerUsernames.foreach(setAccountOwner(_, account.value, us))
}
logger.info(s"importData is saving ${transactions.size} transactions (and loading them again)")
transactions.foreach { t =>

View File

@ -23,6 +23,10 @@ object LiftUsers extends Users {
ResourceUser.find(By(ResourceUser.name_, userName))
}
override def getAllUsers(): Box[List[ResourceUser]] = {
Full(ResourceUser.findAll())
}
override def createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]): Box[ResourceUser] = {
val ru = ResourceUser.create
ru.provider_(provider)
@ -44,5 +48,32 @@ object LiftUsers extends Users {
}
Full(ru.saveMe())
}
override def createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]): Box[ResourceUser] = {
val ru = ResourceUser.create
ru.provider_(provider)
providerId match {
case Some(v) => ru.providerId(v)
case None =>
}
name match {
case Some(v) => ru.name_(v)
case None =>
}
email match {
case Some(v) => ru.email(v)
case None =>
}
userId match {
case Some(v) => ru.userId_(v)
case None =>
}
Full(ru)
}
override def saveResourceUser(ru: ResourceUser): Box[ResourceUser] = {
val r = Full(ru.saveMe())
r
}
}

View File

@ -24,7 +24,13 @@ trait Users {
def getUserByUserName(userName: String) : Box[ResourceUser]
def getAllUsers() : Box[List[ResourceUser]]
def createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser]
def createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser]
def saveResourceUser(resourceUser: ResourceUser) : Box[ResourceUser]
}
class RemoteUserCaseClasses {
@ -32,7 +38,10 @@ class RemoteUserCaseClasses {
case class getUserByProviderId(provider : String, idGivenByProvider : String)
case class getUserByUserId(userId : String)
case class getUserByUserName(userName : String)
case class getAllUsers()
case class createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String])
case class createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String])
case class saveResourceUser(resourceUser: ResourceUser)
}
object RemoteUserCaseClasses extends RemoteUserCaseClasses

View File

@ -378,6 +378,21 @@ object AkkaMapperViews extends Views with Users {
}
res
}
def getAllUsers() : Box[List[ResourceUser]] = {
val res = try {
Full(
Await.result(
(viewsActor ? ru.getAllUsers()).mapTo[List[ResourceUser]],
TIMEOUT
)
)
}
catch {
case k: ActorKilledException => Empty ~> APIFailure(s"Users not found", 404)
case e: Throwable => throw e
}
res
}
def createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser] = {
val res = try {
Full(
@ -393,5 +408,35 @@ object AkkaMapperViews extends Views with Users {
}
res
}
def createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) : Box[ResourceUser] = {
val res = try {
Full(
Await.result(
(viewsActor ? ru.createUnsavedResourceUser(provider, providerId, name, email, userId)).mapTo[ResourceUser],
TIMEOUT
)
)
}
catch {
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
case e: Throwable => throw e
}
res
}
def saveResourceUser(resourceUser: ResourceUser) : Box[ResourceUser] = {
val res = try {
Full(
Await.result(
(viewsActor ? ru.saveResourceUser(resourceUser)).mapTo[ResourceUser],
TIMEOUT
)
)
}
catch {
case k: ActorKilledException => Empty ~> APIFailure(s"User not created", 404)
case e: Throwable => throw e
}
res
}
}

View File

@ -254,6 +254,17 @@ class AkkaMapperViewsActor extends Actor {
}
}.getOrElse( context.stop(sender) )
case ru.getAllUsers() =>
logger.info("getAllUsers()")
{
for {
res <- vu.getAllUsers()
} yield {
sender ! res
}
}.getOrElse( context.stop(sender) )
case ru.createResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) =>
logger.info("createResourceUser(" + provider + ", " + providerId.getOrElse("None") + ", " + name.getOrElse("None") + ", " + email.getOrElse("None") + ", " + userId.getOrElse("None") + ")")
@ -265,6 +276,28 @@ class AkkaMapperViewsActor extends Actor {
}
}.getOrElse( context.stop(sender) )
case ru.createUnsavedResourceUser(provider: String, providerId: Option[String], name: Option[String], email: Option[String], userId: Option[String]) =>
logger.info("createUnsavedResourceUser(" + provider + ", " + providerId.getOrElse("None") + ", " + name.getOrElse("None") + ", " + email.getOrElse("None") + ", " + userId.getOrElse("None") + ")")
{
for {
res <- vu.createUnsavedResourceUser(provider, providerId, name, email, userId)
} yield {
sender ! res.asInstanceOf[ResourceUser]
}
}.getOrElse( context.stop(sender) )
case ru.saveResourceUser(resourceUser: ResourceUser) =>
logger.info("saveResourceUser")
{
for {
res <- vu.saveResourceUser(resourceUser)
} yield {
sender ! res.asInstanceOf[ResourceUser]
}
}.getOrElse( context.stop(sender) )
case message => logger.info("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
}

View File

@ -292,7 +292,7 @@ class SandboxDataLoadingTest extends FlatSpec with SendServerRequests with Shoul
foundAccount.publicViews.size should equal(0)
}
val owner = Users.users.vend.getUserByProviderId(defaultProvider, foundAccount.owners.toList.head.name).get
val owner = code.model.User.findByProviderId(defaultProvider, foundAccount.owners.toList.head.name).get
//there should be an owner view
val views = Views.views.vend.permittedViews(owner, foundAccount)
val ownerView = views.find(v => v.viewId.value == "owner")
@ -591,6 +591,7 @@ class SandboxDataLoadingTest extends FlatSpec with SendServerRequests with Shoul
banks.foreach(verifyBankCreated)
users.foreach(verifyUserCreated)
println("accounts: " + accounts)
accounts.foreach(verifyAccountCreated)
transactions.foreach(verifyTransactionCreated(_, accounts))
}