Added v6.0.0 of GET bank GET banks which return bank_id rather than id

This commit is contained in:
simonredfern 2026-01-29 13:13:21 +01:00
parent dc53c9367b
commit 78229c8fa6
2 changed files with 125 additions and 1 deletions

View File

@ -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 => {

View File

@ -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
*