1 /*
2  *  Make.org Core API
3  *  Copyright (C) 2020 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.crmTemplates
21 
22 import cats.implicits._
23 import org.make.api.extensions.MakeDBExecutionContextComponent
24 import org.make.api.technical.ShortenedNames
25 import org.make.api.technical.DatabaseTransactions._
26 import org.make.api.technical.ScalikeSupport._
27 import org.make.core.crmTemplate.CrmLanguageTemplate
28 import org.make.core.reference.Language
29 import scalikejdbc._
30 
31 import scala.concurrent.Future
32 
33 trait DefaultPersistentCrmLanguageTemplateServiceComponent extends PersistentCrmLanguageTemplateServiceComponent {
34   this: MakeDBExecutionContextComponent =>
35 
36   override lazy val persistentCrmLanguageTemplateService: PersistentCrmLanguageTemplateService =
37     new DefaultPersistentCrmLanguageTemplateService
38 
39   class DefaultPersistentCrmLanguageTemplateService extends PersistentCrmLanguageTemplateService with ShortenedNames {
40 
41     private val templates = SQLSyntaxSupportFactory[CrmLanguageTemplate]()
42     private val t = templates.syntax
43 
44     override def persist(items: Seq[CrmLanguageTemplate]): Future[Seq[CrmLanguageTemplate]] = {
45       implicit val context: EC = writeExecutionContext
46       Future(NamedDB("WRITE").retryableTx { implicit session =>
47         items.foreach { template =>
48           withSQL { insert.into(templates).namedValues(autoNamedValues(template, templates.column)) }.update()
49         }
50       }).as(items)
51     }
52 
53     override def modify(items: Seq[CrmLanguageTemplate]): Future[Seq[CrmLanguageTemplate]] = {
54       implicit val context: EC = writeExecutionContext
55       Future(NamedDB("WRITE").retryableTx { implicit session =>
56         items.foreach { template =>
57           withSQL {
58             update(templates).set(autoNamedValues(template, templates.column, "id")).where.eq(t.id, template.id)
59           }.update()
60         }
61       }).as(items)
62     }
63 
64     override def list(language: Language): Future[Seq[CrmLanguageTemplate]] = {
65       implicit val context: EC = readExecutionContext
66       Future(NamedDB("READ").retryableTx { implicit session =>
67         withSQL { select.from(templates.as(t)).where.eq(t.language, language) }
68           .map(templates.apply(t.resultName))
69           .list()
70       })
71     }
72 
73     override def all(): Future[Seq[CrmLanguageTemplate]] = {
74       implicit val context: EC = readExecutionContext
75       Future(NamedDB("READ").retryableTx { implicit session =>
76         withSQL { select.from(templates.as(t)) }.map(templates.apply(t.resultName)).list()
77       })
78     }
79   }
80 
81 }
Line Stmt Id Pos Tree Symbol Tests Code
42 20961 1683 - 1699 Select scalikejdbc.SQLSyntaxSupportFeature.SQLSyntaxSupport.syntax org.scalatest.testsuite DefaultPersistentCrmLanguageTemplateService.this.templates.syntax
45 20020 1830 - 1851 Select org.make.api.extensions.MakeDBExecutionContextComponent.writeExecutionContext org.scalatest.testsuite DefaultPersistentCrmLanguageTemplateServiceComponent.this.writeExecutionContext
50 21559 1858 - 2091 Apply cats.Functor.Ops.as org.scalatest.testsuite cats.implicits.toFunctorOps[scala.concurrent.Future, Unit](scala.concurrent.Future.apply[Unit]({ <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 => Unit @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => items.foreach[Int](((template: org.make.core.crmTemplate.CrmLanguageTemplate) => scalikejdbc.`package`.withSQL.apply[scalikejdbc.UpdateOperation](scalikejdbc.`package`.insert.into(DefaultPersistentCrmLanguageTemplateService.this.templates).namedValues((scala.collection.immutable.Map.apply[scalikejdbc.interpolation.SQLSyntax, scalikejdbc.ParameterBinder]((DefaultPersistentCrmLanguageTemplateService.this.templates.column.field("id"): scalikejdbc.interpolation.SQLSyntax).->[org.make.core.crmTemplate.CrmLanguageTemplateId](template.id)(org.make.api.technical.ScalikeSupport.crmLanguageTemplateIdBinders), (DefaultPersistentCrmLanguageTemplateService.this.templates.column.field("kind"): scalikejdbc.interpolation.SQLSyntax).->[org.make.core.crmTemplate.CrmTemplateKind](template.kind)(org.make.api.technical.ScalikeSupport.crmTemplateKindBinders), (DefaultPersistentCrmLanguageTemplateService.this.templates.column.field("language"): scalikejdbc.interpolation.SQLSyntax).->[org.make.core.reference.Language](template.language)(org.make.api.technical.ScalikeSupport.languageBinders), (DefaultPersistentCrmLanguageTemplateService.this.templates.column.field("template"): scalikejdbc.interpolation.SQLSyntax).->[org.make.core.crmTemplate.TemplateId](template.template)(org.make.api.technical.ScalikeSupport.templateIdBinders)): Map[scalikejdbc.SQLSyntax,scalikejdbc.ParameterBinder]))).update.apply()(session)))); <artifact> val x$5: scalikejdbc.TxBoundary[Unit] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[Unit](x$4); qual$1.retryableTx[Unit](x$4)(x$5) })(context))(cats.implicits.catsStdInstancesForFuture(context)).as[Seq[org.make.core.crmTemplate.CrmLanguageTemplate]](items)
54 20657 2227 - 2248 Select org.make.api.extensions.MakeDBExecutionContextComponent.writeExecutionContext DefaultPersistentCrmLanguageTemplateServiceComponent.this.writeExecutionContext
61 20099 2255 - 2531 Apply cats.Functor.Ops.as cats.implicits.toFunctorOps[scala.concurrent.Future, Unit](scala.concurrent.Future.apply[Unit]({ <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 => Unit @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => items.foreach[Int](((template: org.make.core.crmTemplate.CrmLanguageTemplate) => scalikejdbc.`package`.withSQL.apply[scalikejdbc.UpdateOperation](scalikejdbc.`package`.update.apply(DefaultPersistentCrmLanguageTemplateService.this.templates).set((scala.collection.immutable.Map.apply[scalikejdbc.interpolation.SQLSyntax, scalikejdbc.ParameterBinder]((DefaultPersistentCrmLanguageTemplateService.this.templates.column.field("kind"): scalikejdbc.interpolation.SQLSyntax).->[org.make.core.crmTemplate.CrmTemplateKind](template.kind)(org.make.api.technical.ScalikeSupport.crmTemplateKindBinders), (DefaultPersistentCrmLanguageTemplateService.this.templates.column.field("language"): scalikejdbc.interpolation.SQLSyntax).->[org.make.core.reference.Language](template.language)(org.make.api.technical.ScalikeSupport.languageBinders), (DefaultPersistentCrmLanguageTemplateService.this.templates.column.field("template"): scalikejdbc.interpolation.SQLSyntax).->[org.make.core.crmTemplate.TemplateId](template.template)(org.make.api.technical.ScalikeSupport.templateIdBinders)): Map[scalikejdbc.SQLSyntax,scalikejdbc.ParameterBinder])).where.eq[org.make.core.crmTemplate.CrmLanguageTemplateId]((DefaultPersistentCrmLanguageTemplateService.this.t.field("id"): scalikejdbc.interpolation.SQLSyntax), template.id)(org.make.api.technical.ScalikeSupport.crmLanguageTemplateIdBinders)).update.apply()(session)))); <artifact> val x$5: scalikejdbc.TxBoundary[Unit] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[Unit](x$4); qual$1.retryableTx[Unit](x$4)(x$5) })(context))(cats.implicits.catsStdInstancesForFuture(context)).as[Seq[org.make.core.crmTemplate.CrmLanguageTemplate]](items)
65 21733 2652 - 2672 Select org.make.api.extensions.MakeDBExecutionContextComponent.readExecutionContext DefaultPersistentCrmLanguageTemplateServiceComponent.this.readExecutionContext
66 20754 2679 - 2888 ApplyToImplicitArgs scala.concurrent.Future.apply scala.concurrent.Future.apply[List[org.make.core.crmTemplate.CrmLanguageTemplate]]({ <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.core.crmTemplate.CrmLanguageTemplate] @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => { <synthetic> <stable> <artifact> val stabilizer$1: scalikejdbc.SQLToList[org.make.core.crmTemplate.CrmLanguageTemplate,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = scalikejdbc.`package`.withSQL.apply[Nothing](scalikejdbc.`package`.select.from[Nothing](DefaultPersistentCrmLanguageTemplateService.this.templates.as(DefaultPersistentCrmLanguageTemplateService.this.t)).where.eq[org.make.core.reference.Language]((DefaultPersistentCrmLanguageTemplateService.this.t.field("language"): scalikejdbc.interpolation.SQLSyntax), language)(org.make.api.technical.ScalikeSupport.languageBinders)).map[org.make.core.crmTemplate.CrmLanguageTemplate](((rs: scalikejdbc.WrappedResultSet) => DefaultPersistentCrmLanguageTemplateService.this.templates.apply(DefaultPersistentCrmLanguageTemplateService.this.t.resultName)(rs))).list; { <artifact> val x$4: scalikejdbc.DBSession = session; <artifact> val x$5: scalikejdbc.SQL[org.make.core.crmTemplate.CrmLanguageTemplate,scalikejdbc.HasExtractor] =:= scalikejdbc.SQL[org.make.core.crmTemplate.CrmLanguageTemplate,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = GeneralizedTypeConstraintsForWithExtractor.this.=:=.tpEquals[scalikejdbc.SQL[org.make.core.crmTemplate.CrmLanguageTemplate,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.core.crmTemplate.CrmLanguageTemplate]] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[List[org.make.core.crmTemplate.CrmLanguageTemplate]](x$7); qual$1.retryableTx[List[org.make.core.crmTemplate.CrmLanguageTemplate]](x$7)(x$8) })(context)
74 19816 2990 - 3010 Select org.make.api.extensions.MakeDBExecutionContextComponent.readExecutionContext org.scalatest.testsuite DefaultPersistentCrmLanguageTemplateServiceComponent.this.readExecutionContext
75 21525 3017 - 3173 ApplyToImplicitArgs scala.concurrent.Future.apply org.scalatest.testsuite scala.concurrent.Future.apply[List[org.make.core.crmTemplate.CrmLanguageTemplate]]({ <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.core.crmTemplate.CrmLanguageTemplate] @scala.reflect.internal.annotations.uncheckedBounds = ((implicit session: scalikejdbc.DBSession) => { <synthetic> <stable> <artifact> val stabilizer$1: scalikejdbc.SQLToList[org.make.core.crmTemplate.CrmLanguageTemplate,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = scalikejdbc.`package`.withSQL.apply[Nothing](scalikejdbc.`package`.select.from[Nothing](DefaultPersistentCrmLanguageTemplateService.this.templates.as(DefaultPersistentCrmLanguageTemplateService.this.t))).map[org.make.core.crmTemplate.CrmLanguageTemplate](((rs: scalikejdbc.WrappedResultSet) => DefaultPersistentCrmLanguageTemplateService.this.templates.apply(DefaultPersistentCrmLanguageTemplateService.this.t.resultName)(rs))).list; { <artifact> val x$4: scalikejdbc.DBSession = session; <artifact> val x$5: scalikejdbc.SQL[org.make.core.crmTemplate.CrmLanguageTemplate,scalikejdbc.HasExtractor] =:= scalikejdbc.SQL[org.make.core.crmTemplate.CrmLanguageTemplate,scalikejdbc.HasExtractor] @scala.reflect.internal.annotations.uncheckedBounds = GeneralizedTypeConstraintsForWithExtractor.this.=:=.tpEquals[scalikejdbc.SQL[org.make.core.crmTemplate.CrmLanguageTemplate,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.core.crmTemplate.CrmLanguageTemplate]] @scala.reflect.internal.annotations.uncheckedBounds = qual$1.retryableTx$default$2[List[org.make.core.crmTemplate.CrmLanguageTemplate]](x$7); qual$1.retryableTx[List[org.make.core.crmTemplate.CrmLanguageTemplate]](x$7)(x$8) })(context)