1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2018 Make.org
4  *
5  * This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Affero General Public License as
7  *  published by the Free Software Foundation, either version 3 of the
8  *  License, or (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Affero General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Affero General Public License
16  *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
17  *
18  */
19 
20 package org.make.api.technical.auth
21 
22 import java.time.ZonedDateTime
23 
24 import cats.data.NonEmptyList
25 import grizzled.slf4j.Logging
26 import org.make.api.extensions.MakeDBExecutionContextComponent
27 import org.make.api.technical.DatabaseTransactions._
28 import org.make.api.technical.PersistentServiceUtils.sortOrderQuery
29 import org.make.api.technical.auth.DefaultPersistentClientServiceComponent.{
30   GRANT_TYPE_SEPARATOR,
31   PersistentClient,
32   ROLE_SEPARATOR
33 }
34 import org.make.api.technical.{PersistentCompanion, ShortenedNames}
35 import org.make.core.DateHelper
36 import org.make.core.technical.Pagination
37 import org.make.core.auth.{Client, ClientId}
38 import org.make.core.user.{Role, UserId}
39 import scalikejdbc._
40 
41 import scala.concurrent.Future
42 
43 object DefaultPersistentClientServiceComponent {
44 
45   val GRANT_TYPE_SEPARATOR: String = ","
46   val ROLE_SEPARATOR: String = ","
47 
48   final case class PersistentClient(
49     uuid: String,
50     name: String,
51     allowedGrantTypes: String,
52     secret: Option[String],
53     scope: Option[String],
54     redirectUri: Option[String],
55     createdAt: ZonedDateTime,
56     updatedAt: ZonedDateTime,
57     defaultUserId: Option[String],
58     roles: String,
59     tokenExpirationSeconds: Int,
60     refreshExpirationSeconds: Int,
61     reconnectExpirationSeconds: Int
62   ) {
63     def toClient: Client =
64       Client(
65         clientId = ClientId(uuid),
66         name = name,
67         allowedGrantTypes = allowedGrantTypes.split(GRANT_TYPE_SEPARATOR).toIndexedSeq,
68         secret = secret,
69         scope = scope,
70         redirectUri = redirectUri,
71         createdAt = Some(createdAt),
72         updatedAt = Some(updatedAt),
73         defaultUserId = defaultUserId.map(UserId(_)),
74         roles = roles.split(ROLE_SEPARATOR).toIndexedSeq.map(Role.apply),
75         tokenExpirationSeconds = tokenExpirationSeconds,
76         refreshExpirationSeconds = refreshExpirationSeconds,
77         reconnectExpirationSeconds = reconnectExpirationSeconds
78       )
79   }
80 
81   implicit object PersistentClient
82       extends PersistentCompanion[PersistentClient, Client]
83       with ShortenedNames
84       with Logging {
85 
86     override val columnNames: Seq[String] =
87       Seq(
88         "uuid",
89         "name",
90         "secret",
91         "allowed_grant_types",
92         "scope",
93         "redirect_uri",
94         "created_at",
95         "updated_at",
96         "default_user_id",
97         "roles",
98         "token_expiration_seconds",
99         "refresh_expiration_seconds",
100         "reconnect_expiration_seconds"
101       )
102 
103     override val tableName: String = "oauth_client"
104 
105     override lazy val alias: SyntaxProvider[PersistentClient] = syntax("c")
106 
107     override lazy val defaultSortColumns: NonEmptyList[SQLSyntax] = NonEmptyList.of(alias.uuid)
108 
109     def apply(
110       clientResultName: ResultName[PersistentClient] = alias.resultName
111     )(resultSet: WrappedResultSet): PersistentClient = {
112       PersistentClient(
113         uuid = resultSet.string(clientResultName.uuid),
114         name = resultSet.string(clientResultName.name),
115         allowedGrantTypes = resultSet.string(clientResultName.allowedGrantTypes),
116         secret = resultSet.stringOpt(clientResultName.secret),
117         scope = resultSet.stringOpt(clientResultName.scope),
118         redirectUri = resultSet.stringOpt(clientResultName.redirectUri),
119         createdAt = resultSet.zonedDateTime(clientResultName.createdAt),
120         updatedAt = resultSet.zonedDateTime(clientResultName.updatedAt),
121         defaultUserId = resultSet.stringOpt(clientResultName.defaultUserId),
122         roles = resultSet.string(clientResultName.roles),
123         tokenExpirationSeconds = resultSet.int(clientResultName.tokenExpirationSeconds),
124         refreshExpirationSeconds = resultSet.int(clientResultName.refreshExpirationSeconds),
125         reconnectExpirationSeconds = resultSet.int(clientResultName.reconnectExpirationSeconds)
126       )
127     }
128   }
129 
130 }
131 
132 trait DefaultPersistentClientServiceComponent extends PersistentClientServiceComponent {
133   self: MakeDBExecutionContextComponent =>
134 
135   override lazy val persistentClientService: DefaultPersistentClientService = new DefaultPersistentClientService
136 
137   class DefaultPersistentClientService extends PersistentClientService with ShortenedNames with Logging {
138 
139     private val clientAlias = PersistentClient.alias
140     private val column = PersistentClient.column
141 
142     override def get(clientId: ClientId): Future[Option[Client]] = {
143       implicit val cxt: EC = readExecutionContext
144       val futureClient = Future(NamedDB("READ").retryableTx { implicit session =>
145         withSQL {
146           select
147             .from(PersistentClient.as(clientAlias))
148             .where(sqls.eq(clientAlias.uuid, clientId.value))
149         }.map(PersistentClient.apply()).single()
150       })
151 
152       futureClient.map(_.map(_.toClient))
153     }
154 
155     override def findByClientIdAndSecret(clientId: String, secret: Option[String]): Future[Option[Client]] = {
156       implicit val cxt: EC = readExecutionContext
157       val futurePersistentClient = Future(NamedDB("READ").retryableTx { implicit session =>
158         withSQL {
159           select
160             .from(PersistentClient.as(clientAlias))
161             .where(
162               sqls
163                 .eq(clientAlias.uuid, clientId)
164                 //TODO: Test this function with both secret value: Some(secret) || None
165                 .and(sqls.eq(clientAlias.secret, secret))
166             )
167         }.map(PersistentClient.apply()).single()
168       })
169 
170       futurePersistentClient.map(_.map(_.toClient))
171     }
172 
173     override def persist(client: Client): Future[Client] = {
174       implicit val ctx: EC = writeExecutionContext
175       val nowDate: ZonedDateTime = DateHelper.now()
176       Future(NamedDB("WRITE").retryableTx { implicit session =>
177         withSQL {
178           insert
179             .into(PersistentClient)
180             .namedValues(
181               column.uuid -> client.clientId.value,
182               column.name -> client.name,
183               column.allowedGrantTypes -> client.allowedGrantTypes.mkString(GRANT_TYPE_SEPARATOR),
184               column.secret -> client.secret,
185               column.redirectUri -> client.redirectUri,
186               column.scope -> client.scope,
187               column.createdAt -> nowDate,
188               column.updatedAt -> nowDate,
189               column.defaultUserId -> client.defaultUserId.map(_.value),
190               column.roles -> client.roles.map(_.value).mkString(ROLE_SEPARATOR),
191               column.tokenExpirationSeconds -> client.tokenExpirationSeconds,
192               column.refreshExpirationSeconds -> client.refreshExpirationSeconds,
193               column.reconnectExpirationSeconds -> client.reconnectExpirationSeconds
194             )
195         }.execute()
196       }).map(_ => client)
197     }
198 
199     override def update(client: Client): Future[Option[Client]] = {
200       implicit val ctx: EC = writeExecutionContext
201       val nowDate: ZonedDateTime = DateHelper.now()
202       Future(NamedDB("WRITE").retryableTx { implicit session =>
203         withSQL {
204           scalikejdbc
205             .update(PersistentClient)
206             .set(
207               column.name -> client.name,
208               column.allowedGrantTypes -> client.allowedGrantTypes.mkString(GRANT_TYPE_SEPARATOR),
209               column.secret -> client.secret,
210               column.redirectUri -> client.redirectUri,
211               column.scope -> client.scope,
212               column.createdAt -> nowDate,
213               column.updatedAt -> nowDate,
214               column.defaultUserId -> client.defaultUserId.map(_.value),
215               column.roles -> client.roles.map(_.value).mkString(ROLE_SEPARATOR),
216               column.tokenExpirationSeconds -> client.tokenExpirationSeconds,
217               column.refreshExpirationSeconds -> client.refreshExpirationSeconds,
218               column.reconnectExpirationSeconds -> client.reconnectExpirationSeconds
219             )
220             .where(sqls.eq(column.uuid, client.clientId.value))
221         }.executeUpdate()
222       }).map {
223         case 1 => Some(client)
224         case 0 =>
225           logger.error(s"Client '${client.clientId.value}' not found")
226           None
227       }
228     }
229 
230     override def search(
231       offset: Pagination.Offset,
232       end: Option[Pagination.End],
233       name: Option[String]
234     ): Future[Seq[Client]] = {
235       implicit val context: EC = readExecutionContext
236 
237       val futurePersistentClients: Future[List[PersistentClient]] = Future(NamedDB("READ").retryableTx {
238         implicit session =>
239           withSQL {
240 
241             val query: scalikejdbc.PagingSQLBuilder[PersistentClient] =
242               select
243                 .from(PersistentClient.as(clientAlias))
244                 .where(
245                   sqls.toAndConditionOpt(
246                     name
247                       .map(n => sqls.like(sqls"lower(${clientAlias.name})", s"%${n.toLowerCase.replace("%", "\\%")}%"))
248                   )
249                 )
250 
251             sortOrderQuery(offset, end, None, None, query)
252           }.map(PersistentClient.apply()).list()
253       })
254 
255       futurePersistentClients.map(_.map(_.toClient))
256     }
257 
258     override def count(name: Option[String]): Future[Int] = {
259       implicit val context: EC = readExecutionContext
260 
261       Future(NamedDB("READ").retryableTx { implicit session =>
262         withSQL {
263 
264           select(sqls.count)
265             .from(PersistentClient.as(clientAlias))
266             .where(
267               sqls.toAndConditionOpt(
268                 name
269                   .map(n => sqls.like(sqls"lower(${clientAlias.name})", s"%${n.toLowerCase.replace("%", "\\%")}%"))
270               )
271             )
272         }.map(_.int(1)).single().getOrElse(0)
273       })
274     }
275   }
276 }
Line Stmt Id Pos Tree Symbol Tests Code
45 20029 1567 - 1570 Literal <nosymbol> ","
46 21579 1602 - 1605 Literal <nosymbol> ","
64 19834 2056 - 2682 Apply org.make.core.auth.Client.apply org.make.core.auth.Client.apply(org.make.core.auth.ClientId.apply(PersistentClient.this.uuid), PersistentClient.this.name, scala.Predef.refArrayOps[String](PersistentClient.this.allowedGrantTypes.split(DefaultPersistentClientServiceComponent.this.GRANT_TYPE_SEPARATOR)).toIndexedSeq, PersistentClient.this.secret, PersistentClient.this.scope, PersistentClient.this.redirectUri, scala.Some.apply[java.time.ZonedDateTime](PersistentClient.this.createdAt), scala.Some.apply[java.time.ZonedDateTime](PersistentClient.this.updatedAt), PersistentClient.this.defaultUserId.map[org.make.core.user.UserId](((x$1: String) => org.make.core.user.UserId.apply(x$1))), scala.Predef.refArrayOps[String](PersistentClient.this.roles.split(DefaultPersistentClientServiceComponent.this.ROLE_SEPARATOR)).toIndexedSeq.map[org.make.core.user.Role](((value: String) => org.make.core.user.Role.apply(value))), PersistentClient.this.tokenExpirationSeconds, PersistentClient.this.refreshExpirationSeconds, PersistentClient.this.reconnectExpirationSeconds)
65 19633 2083 - 2097 Apply org.make.core.auth.ClientId.apply org.make.core.auth.ClientId.apply(PersistentClient.this.uuid)
65 20714 2092 - 2096 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.uuid PersistentClient.this.uuid
66 21237 2114 - 2118 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.name PersistentClient.this.name
67 20844 2172 - 2192 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.GRANT_TYPE_SEPARATOR DefaultPersistentClientServiceComponent.this.GRANT_TYPE_SEPARATOR
67 21501 2148 - 2206 Select scala.collection.ArrayOps.toIndexedSeq scala.Predef.refArrayOps[String](PersistentClient.this.allowedGrantTypes.split(DefaultPersistentClientServiceComponent.this.GRANT_TYPE_SEPARATOR)).toIndexedSeq
67 19840 2148 - 2193 Apply java.lang.String.split PersistentClient.this.allowedGrantTypes.split(DefaultPersistentClientServiceComponent.this.GRANT_TYPE_SEPARATOR)
68 20428 2225 - 2231 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.secret PersistentClient.this.secret
69 20038 2249 - 2254 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.scope PersistentClient.this.scope
70 21654 2278 - 2289 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.redirectUri PersistentClient.this.redirectUri
71 20717 2316 - 2325 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.createdAt PersistentClient.this.createdAt
71 19639 2311 - 2326 Apply scala.Some.apply scala.Some.apply[java.time.ZonedDateTime](PersistentClient.this.createdAt)
72 20853 2348 - 2363 Apply scala.Some.apply scala.Some.apply[java.time.ZonedDateTime](PersistentClient.this.updatedAt)
72 21311 2353 - 2362 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.updatedAt PersistentClient.this.updatedAt
73 19827 2407 - 2416 Apply org.make.core.user.UserId.apply org.make.core.user.UserId.apply(x$1)
73 21504 2389 - 2417 Apply scala.Option.map PersistentClient.this.defaultUserId.map[org.make.core.user.UserId](((x$1: String) => org.make.core.user.UserId.apply(x$1)))
74 20434 2447 - 2461 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.ROLE_SEPARATOR DefaultPersistentClientServiceComponent.this.ROLE_SEPARATOR
74 21660 2480 - 2490 Apply org.make.core.technical.enumeratum.FallbackingCirceEnum.apply org.make.core.user.Role.apply(value)
74 20667 2435 - 2491 Apply scala.collection.IndexedSeqOps.map scala.Predef.refArrayOps[String](PersistentClient.this.roles.split(DefaultPersistentClientServiceComponent.this.ROLE_SEPARATOR)).toIndexedSeq.map[org.make.core.user.Role](((value: String) => org.make.core.user.Role.apply(value)))
74 19988 2435 - 2462 Apply java.lang.String.split PersistentClient.this.roles.split(DefaultPersistentClientServiceComponent.this.ROLE_SEPARATOR)
75 19753 2526 - 2548 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.tokenExpirationSeconds PersistentClient.this.tokenExpirationSeconds
76 21320 2585 - 2609 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.refreshExpirationSeconds PersistentClient.this.refreshExpirationSeconds
77 20800 2648 - 2674 Select org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.reconnectExpirationSeconds PersistentClient.this.reconnectExpirationSeconds
87 21449 2881 - 3216 Apply scala.collection.SeqFactory.Delegate.apply org.scalatest.testsuite scala.`package`.Seq.apply[String]("uuid", "name", "secret", "allowed_grant_types", "scope", "redirect_uri", "created_at", "updated_at", "default_user_id", "roles", "token_expiration_seconds", "refresh_expiration_seconds", "reconnect_expiration_seconds")
103 20469 3255 - 3269 Literal <nosymbol> org.scalatest.testsuite "oauth_client"
112 20554 3595 - 4570 Apply org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.apply DefaultPersistentClientServiceComponent.this.PersistentClient.apply(resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("uuid"): scalikejdbc.interpolation.SQLSyntax))), resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("name"): scalikejdbc.interpolation.SQLSyntax))), resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("allowedGrantTypes"): scalikejdbc.interpolation.SQLSyntax))), resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("secret"): scalikejdbc.interpolation.SQLSyntax))), resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("scope"): scalikejdbc.interpolation.SQLSyntax))), resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("redirectUri"): scalikejdbc.interpolation.SQLSyntax))), resultSet.zonedDateTime(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("createdAt"): scalikejdbc.interpolation.SQLSyntax))), resultSet.zonedDateTime(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("updatedAt"): scalikejdbc.interpolation.SQLSyntax))), resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("defaultUserId"): scalikejdbc.interpolation.SQLSyntax))), resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("roles"): scalikejdbc.interpolation.SQLSyntax))), resultSet.int(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("tokenExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax))), resultSet.int(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("refreshExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax))), resultSet.int(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("reconnectExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax))))
113 19580 3645 - 3666 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("uuid"): scalikejdbc.interpolation.SQLSyntax))
113 21541 3628 - 3667 Apply scalikejdbc.WrappedResultSet.string resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("uuid"): scalikejdbc.interpolation.SQLSyntax)))
114 19679 3684 - 3723 Apply scalikejdbc.WrappedResultSet.string resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("name"): scalikejdbc.interpolation.SQLSyntax)))
114 20639 3701 - 3722 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("name"): scalikejdbc.interpolation.SQLSyntax))
115 20810 3753 - 3805 Apply scalikejdbc.WrappedResultSet.string resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("allowedGrantTypes"): scalikejdbc.interpolation.SQLSyntax)))
115 21276 3770 - 3804 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("allowedGrantTypes"): scalikejdbc.interpolation.SQLSyntax))
116 19839 3844 - 3867 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("secret"): scalikejdbc.interpolation.SQLSyntax))
116 21434 3824 - 3868 Apply scalikejdbc.WrappedResultSet.stringOpt resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("secret"): scalikejdbc.interpolation.SQLSyntax)))
117 20427 3906 - 3928 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("scope"): scalikejdbc.interpolation.SQLSyntax))
117 19538 3886 - 3929 Apply scalikejdbc.WrappedResultSet.stringOpt resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("scope"): scalikejdbc.interpolation.SQLSyntax)))
118 21545 3973 - 4001 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("redirectUri"): scalikejdbc.interpolation.SQLSyntax))
118 20644 3953 - 4002 Apply scalikejdbc.WrappedResultSet.stringOpt resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("redirectUri"): scalikejdbc.interpolation.SQLSyntax)))
119 19746 4048 - 4074 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("createdAt"): scalikejdbc.interpolation.SQLSyntax))
119 21222 4024 - 4075 Apply scalikejdbc.WrappedResultSet.zonedDateTime resultSet.zonedDateTime(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("createdAt"): scalikejdbc.interpolation.SQLSyntax)))
120 20817 4121 - 4147 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("updatedAt"): scalikejdbc.interpolation.SQLSyntax))
120 19797 4097 - 4148 Apply scalikejdbc.WrappedResultSet.zonedDateTime resultSet.zonedDateTime(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("updatedAt"): scalikejdbc.interpolation.SQLSyntax)))
121 21436 4194 - 4224 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("defaultUserId"): scalikejdbc.interpolation.SQLSyntax))
121 20550 4174 - 4225 Apply scalikejdbc.WrappedResultSet.stringOpt resultSet.stringOpt(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("defaultUserId"): scalikejdbc.interpolation.SQLSyntax)))
122 19462 4260 - 4282 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("roles"): scalikejdbc.interpolation.SQLSyntax))
122 21548 4243 - 4283 Apply scalikejdbc.WrappedResultSet.string resultSet.string(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("roles"): scalikejdbc.interpolation.SQLSyntax)))
123 19751 4318 - 4372 Apply scalikejdbc.WrappedResultSet.int resultSet.int(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("tokenExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax)))
123 20603 4332 - 4371 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("tokenExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax))
124 20389 4409 - 4465 Apply scalikejdbc.WrappedResultSet.int resultSet.int(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("refreshExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax)))
124 21356 4423 - 4464 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("refreshExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax))
125 21472 4504 - 4562 Apply scalikejdbc.WrappedResultSet.int resultSet.int(scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("reconnectExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax)))
125 19802 4518 - 4561 ApplyImplicitView scalikejdbc.interpolation.Implicits.scalikejdbcSQLSyntaxToStringImplicitDef scalikejdbc.`package`.scalikejdbcSQLSyntaxToStringImplicitDef((clientResultName.field("reconnectExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax))
140 19464 5017 - 5040 Select scalikejdbc.SQLSyntaxSupportFeature.SQLSyntaxSupport.column org.scalatest.testsuite org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.column
143 21620 5140 - 5160 Select org.make.api.extensions.MakeDBExecutionContextComponent.readExecutionContext DefaultPersistentClientServiceComponent.this.readExecutionContext
144 20611 5186 - 5449 ApplyToImplicitArgs scala.concurrent.Future.apply scala.concurrent.Future.apply[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]]({ <artifact> val qual$1: org.make.api.technical.DatabaseTransactions.RichDatabase = org.make.api.technical.DatabaseTransactions.RichDatabase({ <artifact> val x$1: String("READ") = "READ"; <artifact> val x$2: scalikejdbc.SettingsProvider = scalikejdbc.NamedDB.apply$default$2; <artifact> val x$3: scalikejdbc.ConnectionPoolContext = scalikejdbc.NamedDB.apply$default$3("READ", x$2); scalikejdbc.NamedDB.apply("READ", x$2)(x$3) }); <artifact> val x$7: scalikejdbc.DBSession => Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient] @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => { <synthetic> <stable> <artifact> val stabilizer$1: scalikejdbc.SQLToOption[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = scalikejdbc.`package`.withSQL.apply[Nothing](scalikejdbc.`package`.select.from[Nothing](org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.as(DefaultPersistentClientService.this.clientAlias)).where(scalikejdbc.`package`.sqls.eq[String]((DefaultPersistentClientService.this.clientAlias.field("uuid"): scalikejdbc.interpolation.SQLSyntax), clientId.value)(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory))).map[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]({ <synthetic> val eta$0$1: scalikejdbc.ResultName[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient] = org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.apply$default$1; ((resultSet: scalikejdbc.WrappedResultSet) => org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.apply(eta$0$1)(resultSet)) }).single; { <artifact> val x$4: scalikejdbc.DBSession = session; <artifact> val x$5: scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] =:= scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = GeneralizedTypeConstraintsForWithExtractor.this.=:=.tpEquals[scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor]]; <artifact> val x$6: scalikejdbc.ConnectionPoolContext = stabilizer$1.apply$default$2(); stabilizer$1.apply()(x$4, x$6, x$5) } }); <artifact> val x$8: scalikejdbc.TxBoundary[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]](x$7); qual$1.retryableTx[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]](x$7)(x$8) })(cxt)
152 19707 5457 - 5492 ApplyToImplicitArgs scala.concurrent.Future.map futureClient.map[Option[org.make.core.auth.Client]](((x$2: Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]) => x$2.map[org.make.core.auth.Client](((x$3: org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient) => x$3.toClient))))(cxt)
156 21360 5640 - 5660 Select org.make.api.extensions.MakeDBExecutionContextComponent.readExecutionContext DefaultPersistentClientServiceComponent.this.readExecutionContext
157 20393 5696 - 6144 ApplyToImplicitArgs scala.concurrent.Future.apply scala.concurrent.Future.apply[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]]({ <artifact> val qual$1: org.make.api.technical.DatabaseTransactions.RichDatabase = org.make.api.technical.DatabaseTransactions.RichDatabase({ <artifact> val x$1: String("READ") = "READ"; <artifact> val x$2: scalikejdbc.SettingsProvider = scalikejdbc.NamedDB.apply$default$2; <artifact> val x$3: scalikejdbc.ConnectionPoolContext = scalikejdbc.NamedDB.apply$default$3("READ", x$2); scalikejdbc.NamedDB.apply("READ", x$2)(x$3) }); <artifact> val x$7: scalikejdbc.DBSession => Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient] @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => { <synthetic> <stable> <artifact> val stabilizer$1: scalikejdbc.SQLToOption[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = scalikejdbc.`package`.withSQL.apply[Nothing](scalikejdbc.`package`.select.from[Nothing](org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.as(DefaultPersistentClientService.this.clientAlias)).where(scalikejdbc.`package`.sqls.eq[String]((DefaultPersistentClientService.this.clientAlias.field("uuid"): scalikejdbc.interpolation.SQLSyntax), clientId)(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory).and(scalikejdbc.`package`.sqls.eq[Option[String]]((DefaultPersistentClientService.this.clientAlias.field("secret"): scalikejdbc.interpolation.SQLSyntax), secret)(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory))))).map[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]({ <synthetic> val eta$0$1: scalikejdbc.ResultName[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient] = org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.apply$default$1; ((resultSet: scalikejdbc.WrappedResultSet) => org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.apply(eta$0$1)(resultSet)) }).single; { <artifact> val x$4: scalikejdbc.DBSession = session; <artifact> val x$5: scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] =:= scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = GeneralizedTypeConstraintsForWithExtractor.this.=:=.tpEquals[scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor]]; <artifact> val x$6: scalikejdbc.ConnectionPoolContext = stabilizer$1.apply$default$2(); stabilizer$1.apply()(x$4, x$6, x$5) } }); <artifact> val x$8: scalikejdbc.TxBoundary[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]](x$7); qual$1.retryableTx[Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]](x$7)(x$8) })(cxt)
170 19880 6152 - 6197 ApplyToImplicitArgs scala.concurrent.Future.map futurePersistentClient.map[Option[org.make.core.auth.Client]](((x$4: Option[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]) => x$4.map[org.make.core.auth.Client](((x$5: org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient) => x$5.toClient))))(cxt)
174 21474 6295 - 6316 Select org.make.api.extensions.MakeDBExecutionContextComponent.writeExecutionContext org.scalatest.testsuite DefaultPersistentClientServiceComponent.this.writeExecutionContext
175 20513 6352 - 6368 Apply org.make.core.DefaultDateHelper.now org.scalatest.testsuite org.make.core.DateHelper.now()
196 19536 6375 - 7414 ApplyToImplicitArgs scala.concurrent.Future.map org.scalatest.testsuite scala.concurrent.Future.apply[Boolean]({ <artifact> val qual$1: org.make.api.technical.DatabaseTransactions.RichDatabase = org.make.api.technical.DatabaseTransactions.RichDatabase({ <artifact> val x$1: String("WRITE") = "WRITE"; <artifact> val x$2: scalikejdbc.SettingsProvider = scalikejdbc.NamedDB.apply$default$2; <artifact> val x$3: scalikejdbc.ConnectionPoolContext = scalikejdbc.NamedDB.apply$default$3("WRITE", x$2); scalikejdbc.NamedDB.apply("WRITE", x$2)(x$3) }); <artifact> val x$4: scalikejdbc.DBSession => Boolean @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => scalikejdbc.`package`.withSQL.apply[scalikejdbc.UpdateOperation](scalikejdbc.`package`.insert.into(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient).namedValues((DefaultPersistentClientService.this.column.field("uuid"): scalikejdbc.interpolation.SQLSyntax).->[String](client.clientId.value)(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory), (DefaultPersistentClientService.this.column.field("name"): scalikejdbc.interpolation.SQLSyntax).->[String](client.name)(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory), (DefaultPersistentClientService.this.column.field("allowedGrantTypes"): scalikejdbc.interpolation.SQLSyntax).->[String](client.allowedGrantTypes.mkString(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.GRANT_TYPE_SEPARATOR))(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory), (DefaultPersistentClientService.this.column.field("secret"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.secret)(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("redirectUri"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.redirectUri)(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("scope"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.scope)(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("createdAt"): scalikejdbc.interpolation.SQLSyntax).->[java.time.ZonedDateTime](nowDate)(scalikejdbc.this.ParameterBinderFactory.javaTimeZonedDateTimeParameterBinderFactory), (DefaultPersistentClientService.this.column.field("updatedAt"): scalikejdbc.interpolation.SQLSyntax).->[java.time.ZonedDateTime](nowDate)(scalikejdbc.this.ParameterBinderFactory.javaTimeZonedDateTimeParameterBinderFactory), (DefaultPersistentClientService.this.column.field("defaultUserId"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.defaultUserId.map[String](((x$6: org.make.core.user.UserId) => x$6.value)))(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("roles"): scalikejdbc.interpolation.SQLSyntax).->[String](client.roles.map[String](((x$7: org.make.core.user.Role) => x$7.value)).mkString(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.ROLE_SEPARATOR))(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory), (DefaultPersistentClientService.this.column.field("tokenExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax).->[Int](client.tokenExpirationSeconds)(scalikejdbc.this.ParameterBinderFactory.intParameterBinderFactory), (DefaultPersistentClientService.this.column.field("refreshExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax).->[Int](client.refreshExpirationSeconds)(scalikejdbc.this.ParameterBinderFactory.intParameterBinderFactory), (DefaultPersistentClientService.this.column.field("reconnectExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax).->[Int](client.reconnectExpirationSeconds)(scalikejdbc.this.ParameterBinderFactory.intParameterBinderFactory))).execute.apply()(session)); <artifact> val x$5: scalikejdbc.TxBoundary[Boolean] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[Boolean](x$4); qual$1.retryableTx[Boolean](x$4)(x$5) })(ctx).map[org.make.core.auth.Client](((x$8: Boolean) => client))(ctx)
200 21194 7519 - 7540 Select org.make.api.extensions.MakeDBExecutionContextComponent.writeExecutionContext DefaultPersistentClientServiceComponent.this.writeExecutionContext
201 20595 7576 - 7592 Apply org.make.core.DefaultDateHelper.now org.make.core.DateHelper.now()
222 19710 7599 - 8787 ApplyToImplicitArgs scala.concurrent.Future.map scala.concurrent.Future.apply[Int]({ <artifact> val qual$1: org.make.api.technical.DatabaseTransactions.RichDatabase = org.make.api.technical.DatabaseTransactions.RichDatabase({ <artifact> val x$1: String("WRITE") = "WRITE"; <artifact> val x$2: scalikejdbc.SettingsProvider = scalikejdbc.NamedDB.apply$default$2; <artifact> val x$3: scalikejdbc.ConnectionPoolContext = scalikejdbc.NamedDB.apply$default$3("WRITE", x$2); scalikejdbc.NamedDB.apply("WRITE", x$2)(x$3) }); <artifact> val x$4: scalikejdbc.DBSession => Int @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => scalikejdbc.`package`.withSQL.apply[scalikejdbc.UpdateOperation](scalikejdbc.`package`.update.apply(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient).set((DefaultPersistentClientService.this.column.field("name"): scalikejdbc.interpolation.SQLSyntax).->[String](client.name)(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory), (DefaultPersistentClientService.this.column.field("allowedGrantTypes"): scalikejdbc.interpolation.SQLSyntax).->[String](client.allowedGrantTypes.mkString(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.GRANT_TYPE_SEPARATOR))(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory), (DefaultPersistentClientService.this.column.field("secret"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.secret)(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("redirectUri"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.redirectUri)(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("scope"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.scope)(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("createdAt"): scalikejdbc.interpolation.SQLSyntax).->[java.time.ZonedDateTime](nowDate)(scalikejdbc.this.ParameterBinderFactory.javaTimeZonedDateTimeParameterBinderFactory), (DefaultPersistentClientService.this.column.field("updatedAt"): scalikejdbc.interpolation.SQLSyntax).->[java.time.ZonedDateTime](nowDate)(scalikejdbc.this.ParameterBinderFactory.javaTimeZonedDateTimeParameterBinderFactory), (DefaultPersistentClientService.this.column.field("defaultUserId"): scalikejdbc.interpolation.SQLSyntax).->[Option[String]](client.defaultUserId.map[String](((x$9: org.make.core.user.UserId) => x$9.value)))(scalikejdbc.this.ParameterBinderFactory.optionalParameterBinderFactory[String](scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory)), (DefaultPersistentClientService.this.column.field("roles"): scalikejdbc.interpolation.SQLSyntax).->[String](client.roles.map[String](((x$10: org.make.core.user.Role) => x$10.value)).mkString(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.ROLE_SEPARATOR))(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory), (DefaultPersistentClientService.this.column.field("tokenExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax).->[Int](client.tokenExpirationSeconds)(scalikejdbc.this.ParameterBinderFactory.intParameterBinderFactory), (DefaultPersistentClientService.this.column.field("refreshExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax).->[Int](client.refreshExpirationSeconds)(scalikejdbc.this.ParameterBinderFactory.intParameterBinderFactory), (DefaultPersistentClientService.this.column.field("reconnectExpirationSeconds"): scalikejdbc.interpolation.SQLSyntax).->[Int](client.reconnectExpirationSeconds)(scalikejdbc.this.ParameterBinderFactory.intParameterBinderFactory)).where(scalikejdbc.`package`.sqls.eq[String]((DefaultPersistentClientService.this.column.field("uuid"): scalikejdbc.interpolation.SQLSyntax), client.clientId.value)(scalikejdbc.this.ParameterBinderFactory.stringParameterBinderFactory))).executeUpdate.apply()(session)); <artifact> val x$5: scalikejdbc.TxBoundary[Int] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[Int](x$4); qual$1.retryableTx[Int](x$4)(x$5) })(ctx).map[Option[org.make.core.auth.Client]](((x0$1: Int) => x0$1 match { case 1 => scala.Some.apply[org.make.core.auth.Client](client) case 0 => { DefaultPersistentClientService.this.logger.error(("Client \'".+(client.clientId.value).+("\' not found"): String)); scala.None } }))(ctx)
235 21365 8979 - 8999 Select org.make.api.extensions.MakeDBExecutionContextComponent.readExecutionContext DefaultPersistentClientServiceComponent.this.readExecutionContext
237 20354 9069 - 9670 ApplyToImplicitArgs scala.concurrent.Future.apply scala.concurrent.Future.apply[List[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]]({ <artifact> val qual$1: org.make.api.technical.DatabaseTransactions.RichDatabase = org.make.api.technical.DatabaseTransactions.RichDatabase({ <artifact> val x$1: String("READ") = "READ"; <artifact> val x$2: scalikejdbc.SettingsProvider = scalikejdbc.NamedDB.apply$default$2; <artifact> val x$3: scalikejdbc.ConnectionPoolContext = scalikejdbc.NamedDB.apply$default$3("READ", x$2); scalikejdbc.NamedDB.apply("READ", x$2)(x$3) }); <artifact> val x$7: scalikejdbc.DBSession => List[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient] @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => { <synthetic> <stable> <artifact> val stabilizer$1: scalikejdbc.SQLToList[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = scalikejdbc.`package`.withSQL.apply[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]({ val query: scalikejdbc.PagingSQLBuilder[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient] = scalikejdbc.`package`.select.from[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient](org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.as(DefaultPersistentClientService.this.clientAlias)).where(scalikejdbc.`package`.sqls.toAndConditionOpt(name.map[scalikejdbc.interpolation.SQLSyntax](((n: String) => scalikejdbc.`package`.sqls.like(scalikejdbc.`package`.scalikejdbcSQLInterpolationImplicitDef(scala.StringContext.apply("lower(", ")")).sqls((DefaultPersistentClientService.this.clientAlias.field("name"): scalikejdbc.interpolation.SQLSyntax)), ("%".+(n.toLowerCase().replace("%", "\\%")).+("%"): String)))))); org.make.api.technical.PersistentServiceUtils.sortOrderQuery[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient, org.make.core.auth.Client](offset, end, scala.None, scala.None, query)(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient) }).map[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]({ <synthetic> val eta$0$1: scalikejdbc.ResultName[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient] = org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.apply$default$1; ((resultSet: scalikejdbc.WrappedResultSet) => org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.apply(eta$0$1)(resultSet)) }).list; { <artifact> val x$4: scalikejdbc.DBSession = session; <artifact> val x$5: scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] =:= scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = GeneralizedTypeConstraintsForWithExtractor.this.=:=.tpEquals[scalikejdbc.SQL[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient,scalikejdbc.HasExtractor]]; <artifact> val x$6: scalikejdbc.ConnectionPoolContext = stabilizer$1.apply$default$2(); stabilizer$1.apply()(x$4, x$6, x$5) } }); <artifact> val x$8: scalikejdbc.TxBoundary[List[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[List[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]](x$7); qual$1.retryableTx[List[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]](x$7)(x$8) })(context)
255 19887 9678 - 9724 ApplyToImplicitArgs scala.concurrent.Future.map futurePersistentClients.map[List[org.make.core.auth.Client]](((x$11: List[org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient]) => x$11.map[org.make.core.auth.Client](((x$12: org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient) => x$12.toClient))))(context)
259 21397 9827 - 9847 Select org.make.api.extensions.MakeDBExecutionContextComponent.readExecutionContext DefaultPersistentClientServiceComponent.this.readExecutionContext
261 20516 9855 - 10291 ApplyToImplicitArgs scala.concurrent.Future.apply scala.concurrent.Future.apply[Int]({ <artifact> val qual$1: org.make.api.technical.DatabaseTransactions.RichDatabase = org.make.api.technical.DatabaseTransactions.RichDatabase({ <artifact> val x$1: String("READ") = "READ"; <artifact> val x$2: scalikejdbc.SettingsProvider = scalikejdbc.NamedDB.apply$default$2; <artifact> val x$3: scalikejdbc.ConnectionPoolContext = scalikejdbc.NamedDB.apply$default$3("READ", x$2); scalikejdbc.NamedDB.apply("READ", x$2)(x$3) }); <artifact> val x$7: scalikejdbc.DBSession => Int @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => { <synthetic> <stable> <artifact> val stabilizer$1: scalikejdbc.SQLToOption[Int,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = scalikejdbc.`package`.withSQL.apply[Nothing](scalikejdbc.`package`.select.apply[Nothing](scalikejdbc.`package`.sqls.count).from(org.make.api.technical.auth.DefaultPersistentClientServiceComponent.PersistentClient.as(DefaultPersistentClientService.this.clientAlias)).where(scalikejdbc.`package`.sqls.toAndConditionOpt(name.map[scalikejdbc.interpolation.SQLSyntax](((n: String) => scalikejdbc.`package`.sqls.like(scalikejdbc.`package`.scalikejdbcSQLInterpolationImplicitDef(scala.StringContext.apply("lower(", ")")).sqls((DefaultPersistentClientService.this.clientAlias.field("name"): scalikejdbc.interpolation.SQLSyntax)), ("%".+(n.toLowerCase().replace("%", "\\%")).+("%"): String))))))).map[Int](((x$13: scalikejdbc.WrappedResultSet) => x$13.int(1))).single; { <artifact> val x$4: scalikejdbc.DBSession = session; <artifact> val x$5: scalikejdbc.SQL[Int,scalikejdbc.HasExtractor] =:= scalikejdbc.SQL[Int,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = GeneralizedTypeConstraintsForWithExtractor.this.=:=.tpEquals[scalikejdbc.SQL[Int,scalikejdbc.HasExtractor]]; <artifact> val x$6: scalikejdbc.ConnectionPoolContext = stabilizer$1.apply$default$2(); stabilizer$1.apply()(x$4, x$6, x$5) }.getOrElse[Int](0) }); <artifact> val x$8: scalikejdbc.TxBoundary[Int] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[Int](x$7); qual$1.retryableTx[Int](x$7)(x$8) })(context)