diff --git a/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala b/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala index 7b88948f3..b3d836e7f 100644 --- a/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala +++ b/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala @@ -23,7 +23,8 @@ import code.api.v3_0_0.JSONFactory300 import code.api.v3_0_0.JSONFactory300.createAggregateMetricJson import code.api.v2_0_0.JSONFactory200 import code.api.v3_1_0.{JSONFactory310, PostCustomerNumberJsonV310} -import code.api.v4_0_0.CallLimitPostJsonV400 +import code.api.v1_2_1.BankRoutingJsonV121 +import code.api.v4_0_0.{BankAttributeBankResponseJsonV400, CallLimitPostJsonV400} import code.api.v4_0_0.JSONFactory400.createCallsLimitJson import code.api.v5_0_0.JSONFactory500 import code.api.v5_0_0.{ViewJsonV500, ViewsJsonV500} @@ -917,6 +918,89 @@ trait APIMethods600 { } } + staticResourceDocs += ResourceDoc( + getBanks, + implementedInApiVersion, + nameOf(getBanks), + "GET", + "/banks", + "Get Banks", + """Get banks on this API instance + |Returns a list of banks supported on this server: + | + |- bank_id used as parameter in URLs + |- Short and full name of bank + |- Logo URL + |- Website + | + |User Authentication is Optional. The User need not be logged in. + |""", + EmptyBody, + BanksJsonV600(List(BankJsonV600( + bank_id = "gh.29.uk", + short_name = "short_name", + full_name = "full_name", + logo = "logo", + website = "www.openbankproject.com", + bank_routings = List(BankRoutingJsonV121("OBP", "gh.29.uk")), + attributes = Some(List(BankAttributeBankResponseJsonV400("OVERDRAFT_LIMIT", "1000"))) + ))), + List(UnknownError), + apiTagBank :: apiTagPSD2AIS :: apiTagPsd2 :: Nil + ) + + lazy val getBanks: OBPEndpoint = { + case "banks" :: Nil JsonGet _ => { cc => + implicit val ec = EndpointContext(Some(cc)) + for { + (banks, callContext) <- NewStyle.function.getBanks(cc.callContext) + } yield { + (JSONFactory600.createBanksJsonV600(banks), HttpCode.`200`(callContext)) + } + } + } + + staticResourceDocs += ResourceDoc( + getBank, + implementedInApiVersion, + nameOf(getBank), + "GET", + "/banks/BANK_ID", + "Get Bank", + """Get the bank specified by BANK_ID + |Returns information about a single bank specified by BANK_ID including: + | + |- bank_id: The unique identifier of this bank + |- Short and full name of bank + |- Logo URL + |- Website + |""", + EmptyBody, + BankJsonV600( + bank_id = "gh.29.uk", + short_name = "short_name", + full_name = "full_name", + logo = "logo", + website = "www.openbankproject.com", + bank_routings = List(BankRoutingJsonV121("OBP", "gh.29.uk")), + attributes = Some(List(BankAttributeBankResponseJsonV400("OVERDRAFT_LIMIT", "1000"))) + ), + List(UnknownError, BankNotFound), + apiTagBank :: apiTagPSD2AIS :: apiTagPsd2 :: Nil + ) + + lazy val getBank: OBPEndpoint = { + case "banks" :: BankId(bankId) :: Nil JsonGet _ => { cc => + implicit val ec = EndpointContext(Some(cc)) + for { + (bank, callContext) <- NewStyle.function.getBank(bankId, cc.callContext) + (attributes, callContext) <- NewStyle.function.getBankAttributesByBank(bankId, callContext) + } yield { + (JSONFactory600.createBankJsonV600(bank, attributes), HttpCode.`200`(callContext)) + } + } + } + lazy val getCurrentConsumer: OBPEndpoint = { case "consumers" :: "current" :: Nil JsonGet _ => { cc => { diff --git a/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala b/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala index 015873293..171c24a3b 100644 --- a/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala +++ b/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala @@ -334,6 +334,18 @@ case class StoredProcedureConnectorHealthJsonV600( error_message: Option[String] ) +case class BankJsonV600( + bank_id: String, + short_name: String, + full_name: String, + logo: String, + website: String, + bank_routings: List[BankRoutingJsonV121], + attributes: Option[List[BankAttributeBankResponseJsonV400]] +) + +case class BanksJsonV600(banks: List[BankJsonV600]) + case class PostCustomerJsonV600( legal_name: String, customer_number: Option[String] = None, @@ -1397,6 +1409,34 @@ object JSONFactory600 extends CustomJsonFormats with MdcLoggable { ) } + def createBankJsonV600(bank: Bank, attributes: List[BankAttributeTrait] = Nil): BankJsonV600 = { + val obp = BankRoutingJsonV121("OBP", bank.bankId.value) + val bic = BankRoutingJsonV121("BIC", bank.swiftBic) + val routings = bank.bankRoutingScheme match { + case "OBP" => bic :: BankRoutingJsonV121(bank.bankRoutingScheme, bank.bankRoutingAddress) :: Nil + case "BIC" => obp :: BankRoutingJsonV121(bank.bankRoutingScheme, bank.bankRoutingAddress) :: Nil + case _ => obp :: bic :: BankRoutingJsonV121(bank.bankRoutingScheme, bank.bankRoutingAddress) :: Nil + } + BankJsonV600( + bank_id = stringOrNull(bank.bankId.value), + short_name = stringOrNull(bank.shortName), + full_name = stringOrNull(bank.fullName), + logo = stringOrNull(bank.logoUrl), + website = stringOrNull(bank.websiteUrl), + bank_routings = routings.filter(a => stringOrNull(a.address) != null), + attributes = Option( + attributes.filter(_.isActive == Some(true)).map(a => BankAttributeBankResponseJsonV400( + name = a.name, + value = a.value) + ) + ) + ) + } + + def createBanksJsonV600(banks: List[Bank]): BanksJsonV600 = { + BanksJsonV600(banks.map(bank => createBankJsonV600(bank, Nil))) + } + /** * Create v6.0.0 response for GET /my/dynamic-entities *