Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth

val resourceDocs = requestedApiVersion match {
case ApiVersion.v7_0_0 => code.api.v7_0_0.Http4s700.allResourceDocs // Use aggregated docs for v7.0.0
case ConstantsBG.`berlinGroupVersion1` => code.api.berlin.group.v1_3.Http4sBGv13.resourceDocs
case ConstantsBG.`berlinGroupVersion2` => code.api.berlin.group.v2.Http4sBGv2.resourceDocs
case ApiVersion.v6_0_0 => OBPAPI6_0_0.allResourceDocs
case ApiVersion.v5_1_0 => OBPAPI5_1_0.allResourceDocs
Expand All @@ -146,6 +147,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth

val versionRoutes = requestedApiVersion match {
case ApiVersion.v7_0_0 => Nil
case ConstantsBG.`berlinGroupVersion1` => Nil
case ConstantsBG.`berlinGroupVersion2` => Nil
case ApiVersion.v6_0_0 => OBPAPI6_0_0.routes
case ApiVersion.v5_1_0 => OBPAPI5_1_0.routes
Expand Down Expand Up @@ -175,6 +177,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
// Only return the resource docs that have available routes
val activeResourceDocs = requestedApiVersion match {
case ApiVersion.v7_0_0 => resourceDocs
case ConstantsBG.`berlinGroupVersion1` => resourceDocs // fully on http4s — no Lift route filter
case ConstantsBG.`berlinGroupVersion2` => resourceDocs
case ApiVersion.v1_2_1 => resourceDocs
case ApiVersion.v6_0_0 => resourceDocs // fully on http4s — no Lift route filter
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,114 +1,114 @@
package code.api.builder.ConfirmationOfFundsServicePIISApi

import scala.language.implicitConversions
import code.api.berlin.group.ConstantsBG
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3._
import code.api.berlin.group.v1_3.{JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
import code.api.util.APIUtil._
import code.api.util.ApiTag._
import code.api.util.ErrorMessages._
import code.api.util.{ApiTag, NewStyle}
import code.fx.fx
import code.util.Helper
import com.github.dwickern.macros.NameOf.nameOf
import com.openbankproject.commons.ExecutionContext.Implicits.global
import com.openbankproject.commons.util.ApiVersion
import net.liftweb.common.Full
import net.liftweb.http.rest.RestHelper
import net.liftweb.json
import net.liftweb.json._

import scala.collection.immutable.Nil
import scala.collection.mutable.ArrayBuffer

object APIMethods_ConfirmationOfFundsServicePIISApi extends RestHelper {
val apiVersion = ConstantsBG.berlinGroupVersion1
val resourceDocs = ArrayBuffer[ResourceDoc]()
val apiRelations = ArrayBuffer[ApiRelation]()
protected implicit def JvalueToSuper(what: JValue): JvalueCaseClass = JvalueCaseClass(what)

val endpoints =
checkAvailabilityOfFunds ::
Nil


resourceDocs += ResourceDoc(
checkAvailabilityOfFunds,
apiVersion,
nameOf(checkAvailabilityOfFunds),
"POST",
"/funds-confirmations",
"Confirmation of Funds Request",
s""" ${mockedDataText(false)}
Creates a confirmation of funds request at the ASPSP. Checks whether a specific amount is available at point
of time of the request on an account linked to a given tuple card issuer(TPP)/card number, or addressed by
IBAN and TPP respectively. If the related extended services are used a conditional Consent-ID is contained
in the header. This field is contained but commented out in this specification. """,
json.parse(
"""{
"instructedAmount" : {
"amount" : "123",
"currency" : "EUR"
},
"account" : {
"iban" : "GR12 1234 5123 4511 3981 4475 477",
}
}"""),
json.parse(
"""{
"fundsAvailable" : true
}"""),
List(AuthenticatedUserIsRequired, UnknownError),
ApiTag("Confirmation of Funds Service (PIIS)") :: apiTagBerlinGroupM :: Nil
)

lazy val checkAvailabilityOfFunds : OBPEndpoint = {
case "funds-confirmations" :: Nil JsonPost json -> _ => {
cc =>
for {
(Full(u), callContext) <- authenticatedAccess(cc)
_ <- passesPsd2Aisp(callContext)
checkAvailabilityOfFundsJson <- NewStyle.function.tryons(s"$InvalidJsonFormat The Json body should be the $CheckAvailabilityOfFundsJson ", 400, callContext) {
json.extract[CheckAvailabilityOfFundsJson]
}

requestAccountAmount <- NewStyle.function.tryons(s"$InvalidNumber Current input is ${checkAvailabilityOfFundsJson.instructedAmount.amount} ", 400, callContext) {
BigDecimal(checkAvailabilityOfFundsJson.instructedAmount.amount)
}

requestAccountCurrency = checkAvailabilityOfFundsJson.instructedAmount.currency

_ <- Helper.booleanToFuture(s"${InvalidISOCurrencyCode} Current input is: '${ requestAccountCurrency}'", cc=callContext) {
isValidCurrencyISOCode(requestAccountCurrency)
}

requestAccountIban = checkAvailabilityOfFundsJson.account.iban
(bankAccount, callContext) <- NewStyle.function.getBankAccountByIban(requestAccountIban, callContext)
currentAccountCurrency = bankAccount.currency
currentAccountBalance = bankAccount.balance


//From change from requestAccount Currency to currentBankAccount Currency
rate = fx.exchangeRate(requestAccountCurrency, currentAccountCurrency, Some(bankAccount.bankId.value), callContext)

_ <- Helper.booleanToFuture(s"$InvalidCurrency The requested currency conversion (${requestAccountCurrency} to ${currentAccountCurrency}) is not supported.", cc=callContext) {
rate.isDefined
}

requestChangedCurrencyAmount = fx.convert(requestAccountAmount, rate)

fundsAvailable = (currentAccountBalance >= requestChangedCurrencyAmount)

} yield {
(net.liftweb.json.parse(s"""{
"fundsAvailable" : $fundsAvailable
}"""),
callContext)
}
}
}

}



//package code.api.builder.ConfirmationOfFundsServicePIISApi
//
//import scala.language.implicitConversions
//import code.api.berlin.group.ConstantsBG
//import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3._
//import code.api.berlin.group.v1_3.{JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
//import code.api.util.APIUtil._
//import code.api.util.ApiTag._
//import code.api.util.ErrorMessages._
//import code.api.util.{ApiTag, NewStyle}
//import code.fx.fx
//import code.util.Helper
//import com.github.dwickern.macros.NameOf.nameOf
//import com.openbankproject.commons.ExecutionContext.Implicits.global
//import com.openbankproject.commons.util.ApiVersion
//import net.liftweb.common.Full
//import net.liftweb.http.rest.RestHelper
//import net.liftweb.json
//import net.liftweb.json._
//
//import scala.collection.immutable.Nil
//import scala.collection.mutable.ArrayBuffer
//
//object APIMethods_ConfirmationOfFundsServicePIISApi extends RestHelper {
// val apiVersion = ConstantsBG.berlinGroupVersion1
// val resourceDocs = ArrayBuffer[ResourceDoc]()
// val apiRelations = ArrayBuffer[ApiRelation]()
// protected implicit def JvalueToSuper(what: JValue): JvalueCaseClass = JvalueCaseClass(what)
//
// val endpoints =
// checkAvailabilityOfFunds ::
// Nil
//
//
// resourceDocs += ResourceDoc(
// checkAvailabilityOfFunds,
// apiVersion,
// nameOf(checkAvailabilityOfFunds),
// "POST",
// "/funds-confirmations",
// "Confirmation of Funds Request",
// s""" ${mockedDataText(false)}
//Creates a confirmation of funds request at the ASPSP. Checks whether a specific amount is available at point
//of time of the request on an account linked to a given tuple card issuer(TPP)/card number, or addressed by
//IBAN and TPP respectively. If the related extended services are used a conditional Consent-ID is contained
//in the header. This field is contained but commented out in this specification. """,
// json.parse(
// """{
// "instructedAmount" : {
// "amount" : "123",
// "currency" : "EUR"
// },
// "account" : {
// "iban" : "GR12 1234 5123 4511 3981 4475 477",
// }
// }"""),
// json.parse(
// """{
// "fundsAvailable" : true
// }"""),
// List(AuthenticatedUserIsRequired, UnknownError),
// ApiTag("Confirmation of Funds Service (PIIS)") :: apiTagBerlinGroupM :: Nil
// )
//
// lazy val checkAvailabilityOfFunds : OBPEndpoint = {
// case "funds-confirmations" :: Nil JsonPost json -> _ => {
// cc =>
// for {
// (Full(u), callContext) <- authenticatedAccess(cc)
// _ <- passesPsd2Aisp(callContext)
// checkAvailabilityOfFundsJson <- NewStyle.function.tryons(s"$InvalidJsonFormat The Json body should be the $CheckAvailabilityOfFundsJson ", 400, callContext) {
// json.extract[CheckAvailabilityOfFundsJson]
// }
//
// requestAccountAmount <- NewStyle.function.tryons(s"$InvalidNumber Current input is ${checkAvailabilityOfFundsJson.instructedAmount.amount} ", 400, callContext) {
// BigDecimal(checkAvailabilityOfFundsJson.instructedAmount.amount)
// }
//
// requestAccountCurrency = checkAvailabilityOfFundsJson.instructedAmount.currency
//
// _ <- Helper.booleanToFuture(s"${InvalidISOCurrencyCode} Current input is: '${ requestAccountCurrency}'", cc=callContext) {
// isValidCurrencyISOCode(requestAccountCurrency)
// }
//
// requestAccountIban = checkAvailabilityOfFundsJson.account.iban
// (bankAccount, callContext) <- NewStyle.function.getBankAccountByIban(requestAccountIban, callContext)
// currentAccountCurrency = bankAccount.currency
// currentAccountBalance = bankAccount.balance
//
//
// //From change from requestAccount Currency to currentBankAccount Currency
// rate = fx.exchangeRate(requestAccountCurrency, currentAccountCurrency, Some(bankAccount.bankId.value), callContext)
//
// _ <- Helper.booleanToFuture(s"$InvalidCurrency The requested currency conversion (${requestAccountCurrency} to ${currentAccountCurrency}) is not supported.", cc=callContext) {
// rate.isDefined
// }
//
// requestChangedCurrencyAmount = fx.convert(requestAccountAmount, rate)
//
// fundsAvailable = (currentAccountBalance >= requestChangedCurrencyAmount)
//
// } yield {
// (net.liftweb.json.parse(s"""{
// "fundsAvailable" : $fundsAvailable
// }"""),
// callContext)
// }
// }
// }
//
//}
//
//
//
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package code.api.berlin.group.v1_3

import cats.data.{Kleisli, OptionT}
import cats.effect._
import code.api.berlin.group.ConstantsBG
import code.api.util.APIUtil.ResourceDoc
import code.api.util.http4s.ResourceDocMiddleware
import code.util.Helper.MdcLoggable
import org.http4s._

import scala.collection.mutable.ArrayBuffer

/**
* Native http4s aggregator for Berlin Group v1.3, replacing the Lift
* `OBP_BERLIN_GROUP_1_3` statelessDispatch registration. Mirrors `Http4sBGv2`.
*
* Groups: AIS / PIS / SigningBaskets / PIIS. Added incrementally.
*/
object Http4sBGv13 extends MdcLoggable {

type HttpF[A] = OptionT[IO, A]

val implementedInApiVersion = ConstantsBG.berlinGroupVersion1

val resourceDocs: ArrayBuffer[ResourceDoc] =
Http4sBGv13AIS.resourceDocs ++
Http4sBGv13PIS.resourceDocs ++
Http4sBGv13PIIS.resourceDocs ++
Http4sBGv13SigningBaskets.resourceDocs

val allRoutes: HttpRoutes[IO] = Kleisli[HttpF, Request[IO], Response[IO]] { req =>
Http4sBGv13AIS.routes(req)
.orElse(Http4sBGv13PIS.routes(req))
.orElse(Http4sBGv13PIIS.routes(req))
.orElse(Http4sBGv13SigningBaskets.routes(req))
}

val wrappedRoutes: HttpRoutes[IO] = ResourceDocMiddleware.apply(resourceDocs)(allRoutes)
}
Loading
Loading