diff --git a/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala b/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala index 899e781e9..38f396481 100644 --- a/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala +++ b/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala @@ -133,10 +133,10 @@ import code.views.Views import code.views.system.{AccountAccess, ViewDefinition, ViewPermission} import code.webhook.{BankAccountNotificationWebhook, MappedAccountWebhook, SystemAccountNotificationWebhook} import code.webuiprops.WebUiProps +import code.regulatedentities.attribute.RegulatedEntityAttribute import com.openbankproject.commons.model.ErrorMessage import com.openbankproject.commons.util.Functions.Implicits._ import com.openbankproject.commons.util.{ApiVersion, Functions} - import javax.mail.internet.MimeMessage import net.liftweb.common._ import net.liftweb.db.{DB, DBLogEntry} @@ -1124,7 +1124,8 @@ object ToSchemify { MappedCustomerDependant, AttributeDefinition, CustomerAccountLink, - TransactionIdMapping + TransactionIdMapping, + RegulatedEntityAttribute, ) // start grpc server diff --git a/obp-api/src/main/scala/code/regulatedentities/attribute/MappedRegulatedEntityAttributeProvider.scala b/obp-api/src/main/scala/code/regulatedentities/attribute/MappedRegulatedEntityAttributeProvider.scala new file mode 100644 index 000000000..1a606f06b --- /dev/null +++ b/obp-api/src/main/scala/code/regulatedentities/attribute/MappedRegulatedEntityAttributeProvider.scala @@ -0,0 +1,104 @@ +package code.regulatedentities.attribute + +import code.util.{MappedUUID, UUIDString} +import com.openbankproject.commons.ExecutionContext.Implicits.global +import com.openbankproject.commons.model.enums.RegulatedEntityAttributeType +import com.openbankproject.commons.model.{RegulatedEntityAttributeTrait, RegulatedEntityId} +import net.liftweb.common.{Box, Empty, Full} +import net.liftweb.mapper.{MappedBoolean, _} +import net.liftweb.util.Helpers.tryo + +import scala.concurrent.Future + + +object RegulatedEntityAttributeProvider extends RegulatedEntityAttributeProviderTrait { + + override def getRegulatedEntityAttributesFromProvider(regulatedEntityId: RegulatedEntityId): Future[Box[List[RegulatedEntityAttribute]]] = + Future { + Box !! RegulatedEntityAttribute.findAll( + By(RegulatedEntityAttribute.RegulatedEntityId_, regulatedEntityId.value) + ) + } + + override def getRegulatedEntityAttributeById(RegulatedEntityAttributeId: String): Future[Box[RegulatedEntityAttribute]] = Future { + RegulatedEntityAttribute.find(By(RegulatedEntityAttribute.RegulatedEntityAttributeId, RegulatedEntityAttributeId)) + } + + override def createOrUpdateRegulatedEntityAttribute( + regulatedEntityId: RegulatedEntityId, + RegulatedEntityAttributeId: Option[String], + name: String, + attributeType: RegulatedEntityAttributeType.Value, + value: String, + isActive: Option[Boolean] + ): Future[Box[RegulatedEntityAttribute]] = { + RegulatedEntityAttributeId match { + case Some(id) => Future { + RegulatedEntityAttribute.find(By(RegulatedEntityAttribute.RegulatedEntityAttributeId, id)) match { + case Full(attribute) => tryo { + attribute + .RegulatedEntityId_(regulatedEntityId.value) + .Name(name) + .Type(attributeType.toString) + .`Value`(value) + .IsActive(isActive.getOrElse(true)) + .saveMe() + } + case _ => Empty + } + } + case None => Future { + Full { + RegulatedEntityAttribute.create + .RegulatedEntityId_(regulatedEntityId.value) + .Name(name) + .Type(attributeType.toString()) + .`Value`(value) + .IsActive(isActive.getOrElse(true)) + .saveMe() + } + } + } + } + + override def deleteRegulatedEntityAttribute(RegulatedEntityAttributeId: String): Future[Box[Boolean]] = Future { + tryo ( + RegulatedEntityAttribute.bulkDelete_!!(By(RegulatedEntityAttribute.RegulatedEntityAttributeId, RegulatedEntityAttributeId)) + ) + } + + override def deleteRegulatedEntityAttributesByRegulatedEntityId(regulatedEntityId: RegulatedEntityId): Future[Box[Boolean]]= Future { + tryo( + RegulatedEntityAttribute.bulkDelete_!!(By(RegulatedEntityAttribute.RegulatedEntityId_, regulatedEntityId.value)) + ) + } +} + +class RegulatedEntityAttribute extends RegulatedEntityAttributeTrait with LongKeyedMapper[RegulatedEntityAttribute] with IdPK { + + override def getSingleton = RegulatedEntityAttribute + + object RegulatedEntityId_ extends UUIDString(this) { + override def dbColumnName = "RegulatedEntityId" + } + object RegulatedEntityAttributeId extends MappedUUID(this) + object Name extends MappedString(this, 50) + object Type extends MappedString(this, 50) + object `Value` extends MappedString(this, 255) + object IsActive extends MappedBoolean(this) { + override def defaultValue = true + } + + override def regulatedEntityId: RegulatedEntityId = RegulatedEntityId(RegulatedEntityId_.get) + override def regulatedEntityAttributeId: String = RegulatedEntityAttributeId.get + override def name: String = Name.get + override def attributeType: RegulatedEntityAttributeType.Value = RegulatedEntityAttributeType.withName(Type.get) + override def value: String = `Value`.get + override def isActive: Option[Boolean] = if (IsActive.jdbcFriendly(IsActive.calcFieldName) == null) { None } else Some(IsActive.get) + +} + +object RegulatedEntityAttribute extends RegulatedEntityAttribute with LongKeyedMetaMapper[RegulatedEntityAttribute] { + override def dbIndexes: List[BaseIndex[RegulatedEntityAttribute]] = Index(RegulatedEntityId_) :: super.dbIndexes +} + diff --git a/obp-api/src/main/scala/code/regulatedentities/attribute/RegulatedEntityAttribute.scala b/obp-api/src/main/scala/code/regulatedentities/attribute/RegulatedEntityAttribute.scala new file mode 100644 index 000000000..b28647e5d --- /dev/null +++ b/obp-api/src/main/scala/code/regulatedentities/attribute/RegulatedEntityAttribute.scala @@ -0,0 +1,50 @@ +package code.regulatedentities.attribute + +/* For ProductAttribute */ + +import com.openbankproject.commons.model.{RegulatedEntityId, BankId} +import com.openbankproject.commons.model.enums.RegulatedEntityAttributeType +import net.liftweb.common.{Box, Logger} +import net.liftweb.util.SimpleInjector + +import scala.concurrent.Future + +object RegulatedEntityAttributeX extends SimpleInjector { + + val regulatedEntityAttributeProvider = new Inject(buildOne _) {} + + def buildOne: RegulatedEntityAttributeProviderTrait = RegulatedEntityAttributeProvider + + // Helper to get the count out of an option + def countOfRegulatedEntityAttribute(listOpt: Option[List[RegulatedEntityAttribute]]): Int = { + val count = listOpt match { + case Some(list) => list.size + case None => 0 + } + count + } + + +} + +trait RegulatedEntityAttributeProviderTrait { + + private val logger = Logger(classOf[RegulatedEntityAttributeProviderTrait]) + + def getRegulatedEntityAttributesFromProvider(regulatedEntityId: RegulatedEntityId): Future[Box[List[RegulatedEntityAttribute]]] + + def getRegulatedEntityAttributeById(regulatedEntityAttributeId: String): Future[Box[RegulatedEntityAttribute]] + + def createOrUpdateRegulatedEntityAttribute( + regulatedEntityId: RegulatedEntityId, + regulatedEntityAttributeId: Option[String], + name: String, + attributeType: RegulatedEntityAttributeType.Value, + value: String, + isActive: Option[Boolean]): Future[Box[RegulatedEntityAttribute]] + + def deleteRegulatedEntityAttribute(regulatedEntityAttributeId: String): Future[Box[Boolean]] + + def deleteRegulatedEntityAttributesByRegulatedEntityId(regulatedEntityId: RegulatedEntityId): Future[Box[Boolean]] + // End of Trait +} diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/model/BankingModel.scala b/obp-commons/src/main/scala/com/openbankproject/commons/model/BankingModel.scala index 356c035ab..06a1f0a0e 100644 --- a/obp-commons/src/main/scala/com/openbankproject/commons/model/BankingModel.scala +++ b/obp-commons/src/main/scala/com/openbankproject/commons/model/BankingModel.scala @@ -128,6 +128,13 @@ case class TransactionTypeId(val value : String) { object TransactionTypeId { def unapply(id : String) = Some(TransactionTypeId(id)) } +case class RegulatedEntityId(val value : String) { + override def toString = value +} + +object RegulatedEntityId { + def unapply(id : String) = Some(RegulatedEntityId(id)) +} case class AccountId(val value : String) { override def toString = value diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala index 4e0af1910..37db4361c 100644 --- a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala +++ b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala @@ -532,6 +532,15 @@ trait AtmAttributeTrait { def isActive: Option[Boolean] } +trait RegulatedEntityAttributeTrait { + def regulatedEntityId: RegulatedEntityId + def regulatedEntityAttributeId: String + def attributeType: RegulatedEntityAttributeType.Value + def name: String + def value: String + def isActive: Option[Boolean] +} + trait BankAttributeTrait { def bankId: BankId def bankAttributeId: String diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala b/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala index 0372048c8..6de788ee3 100644 --- a/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala +++ b/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala @@ -22,6 +22,13 @@ object AtmAttributeType extends OBPEnumeration[AtmAttributeType]{ object DOUBLE extends Value object DATE_WITH_DAY extends Value } +sealed trait RegulatedEntityAttributeType extends EnumValue +object RegulatedEntityAttributeType extends OBPEnumeration[RegulatedEntityAttributeType]{ + object STRING extends Value + object INTEGER extends Value + object DOUBLE extends Value + object DATE_WITH_DAY extends Value +} sealed trait BankAttributeType extends EnumValue object BankAttributeType extends OBPEnumeration[BankAttributeType]{ object STRING extends Value