Merge pull request #2350 from hongwei1/develop

refactor/added the pagination for getConsumers
This commit is contained in:
Simon Redfern 2023-12-06 23:52:00 +01:00 committed by GitHub
commit 6e7787b9b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 38 additions and 15 deletions

View File

@ -850,7 +850,7 @@ class Boot extends MdcLoggable {
.map[String](_.getClientId)
.collect(Collectors.toSet())
Consumers.consumers.vend.getConsumersFuture().foreach{ consumers =>
Consumers.consumers.vend.getConsumersFuture(Nil, None).foreach{ consumers =>
consumers.filter(consumer => consumer.isActive.get && !oAuth2ClientIds.contains(consumer.key.get))
.foreach(HydraUtil.createHydraClient(_))
}

View File

@ -2086,7 +2086,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
|
|Possible custom url parameters for pagination:
|
|* limit=NUMBER ==> default value: 50
|* limit=NUMBER ==> default value: ${Constant.Pagination.limit}
|* offset=NUMBER ==> default value: 0
|
|eg1:?limit=100&offset=0

View File

@ -771,6 +771,10 @@ trait APIMethods310 {
"Get Consumers",
s"""Get the all Consumers.
|
|${authenticationRequiredMessage(true)}
|
|${urlParametersDocument(true, true)}
|
|""",
EmptyBody,
consumersJson310,
@ -790,7 +794,9 @@ trait APIMethods310 {
for {
(Full(u), callContext) <- authenticatedAccess(cc)
_ <- NewStyle.function.hasEntitlement("", u.userId, ApiRole.canGetConsumers, callContext)
consumers <- Consumers.consumers.vend.getConsumersFuture()
httpParams <- NewStyle.function.extractHttpParamsFromUrl(cc.url)
(obpQueryParams, callContext) <- createQueriesByHttpParamsFuture(httpParams, callContext)
consumers <- Consumers.consumers.vend.getConsumersFuture(obpQueryParams, callContext)
users <- Users.users.vend.getUsersByUserIdsFuture(consumers.map(_.createdByUserId.get))
} yield {
(createConsumersJson(consumers, users), HttpCode.`200`(callContext))

View File

@ -1,6 +1,6 @@
package code.consumer
import code.api.util.APIUtil
import code.api.util.{APIUtil, CallContext, OBPQueryParam}
import code.model.{AppType, Consumer, MappedConsumersProvider}
import code.remotedata.RemotedataConsumers
import com.openbankproject.commons.model.{BankIdAccountId, User, View}
@ -31,7 +31,7 @@ trait ConsumersProvider {
def getConsumerByConsumerId(consumerId: String): Box[Consumer]
def getConsumerByConsumerIdFuture(consumerId: String): Future[Box[Consumer]]
def getConsumersByUserIdFuture(userId: String): Future[List[Consumer]]
def getConsumersFuture(): Future[List[Consumer]]
def getConsumersFuture(httpParams: List[OBPQueryParam], callContext: Option[CallContext]): Future[List[Consumer]]
def createConsumer(key: Option[String], secret: Option[String], isActive: Option[Boolean], name: Option[String], appType: Option[AppType], description: Option[String], developerEmail: Option[String], redirectURL: Option[String], createdByUserId: Option[String], clientCertificate: Option[String] = None, company: Option[String] = None): Box[Consumer]
def deleteConsumer(consumer: Consumer): Boolean
def updateConsumer(id: Long, key: Option[String], secret: Option[String], isActive: Option[Boolean], name: Option[String], appType: Option[AppType], description: Option[String], developerEmail: Option[String], redirectURL: Option[String], createdByUserId: Option[String]): Box[Consumer]
@ -64,7 +64,7 @@ class RemotedataConsumersCaseClasses {
case class getConsumerByConsumerId(consumerId: String)
case class getConsumerByConsumerIdFuture(consumerId: String)
case class getConsumersByUserIdFuture(userId: String)
case class getConsumersFuture()
case class getConsumersFuture(httpParams: List[OBPQueryParam], callContext: Option[CallContext])
case class createConsumer(key: Option[String], secret: Option[String], isActive: Option[Boolean], name: Option[String], appType: Option[AppType], description: Option[String], developerEmail: Option[String], redirectURL: Option[String], createdByUserId: Option[String], clientCertificate: Option[String], company: Option[String])
case class updateConsumer(id: Long, key: Option[String], secret: Option[String], isActive: Option[Boolean], name: Option[String], appType: Option[AppType], description: Option[String], developerEmail: Option[String], redirectURL: Option[String], createdByUserId: Option[String])
case class deleteConsumer(consumer: Consumer)

View File

@ -27,7 +27,7 @@ TESOBE (http://www.tesobe.com/)
package code.model
import java.util.{Collections, Date}
import code.api.util.APIUtil
import code.api.util.{APIUtil, CallContext, OBPAscending, OBPDescending, OBPFromDate, OBPLimit, OBPOffset, OBPOrdering, OBPQueryParam, OBPToDate}
import code.api.util.CommonFunctions.validUri
import code.api.util.migration.Migration.DbFunction
import code.consumer.{Consumers, ConsumersProvider}
@ -119,11 +119,26 @@ object MappedConsumersProvider extends ConsumersProvider with MdcLoggable {
Future(getConsumersByUserId(userId))
}
def getConsumers(): List[Consumer] = {
Consumer.findAll()
def getConsumers(queryParams: List[OBPQueryParam], callContext: Option[CallContext]): List[Consumer] = {
val limit = queryParams.collect { case OBPLimit(value) => MaxRows[Consumer](value) }.headOption
val offset = queryParams.collect { case OBPOffset(value) => StartAt[Consumer](value) }.headOption
val fromDate = queryParams.collect { case OBPFromDate(date) => By_>=(Consumer.createdAt, date) }.headOption
val toDate = queryParams.collect { case OBPToDate(date) => By_<=(Consumer.createdAt, date) }.headOption
val ordering = queryParams.collect {
case OBPOrdering(_, direction) =>
direction match {
case OBPAscending => OrderBy(Consumer.createdAt, Ascending)
case OBPDescending => OrderBy(Consumer.createdAt, Descending)
}
}
val mapperParams: Seq[QueryParam[Consumer]] = Seq(limit.toSeq, offset.toSeq, fromDate.toSeq, toDate.toSeq, ordering.toSeq).flatten
Consumer.findAll(mapperParams: _*)
}
override def getConsumersFuture(): Future[List[Consumer]] = {
Future(getConsumers())
override def getConsumersFuture(httpParams: List[OBPQueryParam], callContext: Option[CallContext]): Future[List[Consumer]] = {
Future(getConsumers(httpParams: List[OBPQueryParam], callContext: Option[CallContext]))
}
override def createConsumer(key: Option[String],

View File

@ -2,6 +2,7 @@ package code.remotedata
import akka.pattern.ask
import code.actorsystem.ObpActorInit
import code.api.util.{CallContext, OBPQueryParam}
import code.consumer.{ConsumersProvider, RemotedataConsumersCaseClasses}
import code.model._
import net.liftweb.common._
@ -35,8 +36,8 @@ object RemotedataConsumers extends ObpActorInit with ConsumersProvider {
def getConsumersByUserIdFuture(id: String): Future[List[Consumer]] =
(actor ? cc.getConsumersByUserIdFuture(id)).mapTo[List[Consumer]]
def getConsumersFuture(): Future[List[Consumer]] =
(actor ? cc.getConsumersFuture()).mapTo[List[Consumer]]
def getConsumersFuture(httpParams: List[OBPQueryParam], callContext: Option[CallContext]): Future[List[Consumer]] =
(actor ? cc.getConsumersFuture(httpParams: List[OBPQueryParam], callContext: Option[CallContext])).mapTo[List[Consumer]]
def createConsumer(key: Option[String], secret: Option[String], isActive: Option[Boolean], name: Option[String], appType: Option[AppType], description: Option[String], developerEmail: Option[String], redirectURL: Option[String], createdByUserId: Option[String], clientCertificate: Option[String] = None, company: Option[String] = None): Box[Consumer] = getValueFromFuture(
(actor ? cc.createConsumer(key, secret, isActive, name, appType, description, developerEmail, redirectURL, createdByUserId, clientCertificate, company)).mapTo[Box[Consumer]]

View File

@ -2,6 +2,7 @@ package code.remotedata
import akka.actor.Actor
import code.actorsystem.ObpActorHelper
import code.api.util.{CallContext, OBPQueryParam}
import code.consumer.RemotedataConsumersCaseClasses
import code.model.{MappedConsumersProvider, _}
import code.util.Helper.MdcLoggable
@ -41,9 +42,9 @@ class RemotedataConsumersActor extends Actor with ObpActorHelper with MdcLoggabl
logger.debug(s"getConsumersByUserIdFuture($id)")
sender ! (mapper.getConsumersByUserId(id))
case cc.getConsumersFuture() =>
case cc.getConsumersFuture(httpParams: List[OBPQueryParam], callContext: Option[CallContext]) =>
logger.debug(s"getConsumersFuture()")
sender ! (mapper.getConsumers())
sender ! (mapper.getConsumers(httpParams: List[OBPQueryParam], callContext: Option[CallContext]))
case cc.createConsumer(key: Option[String], secret: Option[String], isActive: Option[Boolean], name: Option[String], appType: Option[AppType], description: Option[String], developerEmail: Option[String], redirectURL: Option[String], createdByUserId: Option[String], clientCertificate: Option[String], company: Option[String]) =>
logger.debug(s"createConsumer(*****, *****, ${isActive.getOrElse("None")}, ${name.getOrElse("None")}, ${appType.getOrElse("None")}, ${description.getOrElse("None")}, ${developerEmail.getOrElse("None")}, ${redirectURL.getOrElse("None")}, ${createdByUserId.getOrElse("None")}, ${clientCertificate.getOrElse("None")}, ${company.getOrElse("None")})")