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.user
21 
22 import org.make.api.operation.OperationServiceComponent
23 import org.make.api.question.QuestionServiceComponent
24 import org.make.api.technical.MakeDirectives.MakeDirectivesDependencies
25 import org.make.api.user.DefaultPersistentUserServiceComponent.PersistentUser
26 import org.make.core._
27 import org.make.core.user._
28 
29 import akka.http.scaladsl.server._
30 import io.swagger.annotations._
31 
32 import javax.ws.rs.Path
33 
34 @Api(value = "Admin Consultation Moderators")
35 @Path(value = "/admin/consultation/moderators")
36 trait AdminConsultationModeratorApi extends Directives {
37 
38   @ApiOperation(
39     value = "get-consultation-moderator",
40     httpMethod = "GET",
41     code = HttpCodes.OK,
42     authorizations = Array(
43       new Authorization(
44         value = "MakeApi",
45         scopes = Array(new AuthorizationScope(scope = "admin", description = "BO Admin"))
46       )
47     )
48   )
49   @ApiResponses(
50     value =
51       Array(new ApiResponse(code = HttpCodes.OK, message = "Ok", response = classOf[ConsultationModerator.Response]))
52   )
53   @ApiImplicitParams(
54     value = Array(
55       new ApiImplicitParam(
56         name = "moderatorId",
57         paramType = "path",
58         dataType = "string",
59         example = "11111111-2222-3333-4444-555555555555"
60       )
61     )
62   )
63   @Path(value = "/{moderatorId}")
64   def getConsultationModerator: Route
65 
66   @ApiOperation(
67     value = "get-consultation-moderators",
68     httpMethod = "GET",
69     code = HttpCodes.OK,
70     authorizations = Array(
71       new Authorization(
72         value = "MakeApi",
73         scopes = Array(new AuthorizationScope(scope = "admin", description = "BO Admin"))
74       )
75     )
76   )
77   @ApiImplicitParams(
78     value = Array(
79       new ApiImplicitParam(
80         name = "_start",
81         paramType = "query",
82         dataType = "int",
83         allowableValues = "range[0, infinity]"
84       ),
85       new ApiImplicitParam(
86         name = "_end",
87         paramType = "query",
88         dataType = "int",
89         allowableValues = "range[0, infinity]"
90       ),
91       new ApiImplicitParam(
92         name = "_sort",
93         paramType = "query",
94         dataType = "string",
95         allowableValues = PersistentUser.swaggerAllowableValues
96       ),
97       new ApiImplicitParam(
98         name = "_order",
99         paramType = "query",
100         dataType = "string",
101         allowableValues = Order.swaggerAllowableValues
102       ),
103       new ApiImplicitParam(name = "id", paramType = "query", dataType = "string", allowMultiple = true),
104       new ApiImplicitParam(name = "email", paramType = "query", dataType = "string"),
105       new ApiImplicitParam(name = "firstName", paramType = "query", dataType = "string")
106     )
107   )
108   @ApiResponses(
109     value = Array(
110       new ApiResponse(code = HttpCodes.OK, message = "Ok", response = classOf[Array[ConsultationModerator.Response]])
111     )
112   )
113   @Path(value = "/")
114   def getConsultationModerators: Route
115 
116   @ApiOperation(
117     value = "create-consultation-moderator",
118     httpMethod = "POST",
119     code = HttpCodes.Created,
120     authorizations = Array(
121       new Authorization(
122         value = "MakeApi",
123         scopes = Array(new AuthorizationScope(scope = "admin", description = "BO Admin"))
124       )
125     )
126   )
127   @ApiImplicitParams(
128     value = Array(
129       new ApiImplicitParam(
130         value = "body",
131         paramType = "body",
132         dataType = "org.make.api.user.EventScopedModerator.Request.Create"
133       )
134     )
135   )
136   @ApiResponses(
137     value = Array(
138       new ApiResponse(code = HttpCodes.Created, message = "Created", response = classOf[ConsultationModerator.Response])
139     )
140   )
141   @Path(value = "/")
142   def createConsultationModerator: Route
143 
144   @ApiOperation(
145     value = "update-consultation-moderator",
146     httpMethod = "PUT",
147     code = HttpCodes.OK,
148     authorizations = Array(
149       new Authorization(
150         value = "MakeApi",
151         scopes = Array(
152           new AuthorizationScope(scope = "admin", description = "BO Admin"),
153           new AuthorizationScope(scope = "moderator", description = "BO Moderator")
154         )
155       )
156     )
157   )
158   @ApiImplicitParams(
159     value = Array(
160       new ApiImplicitParam(name = "moderatorId", paramType = "path", dataType = "string"),
161       new ApiImplicitParam(
162         value = "body",
163         paramType = "body",
164         dataType = "org.make.api.user.EventScopedModerator.Request.Update"
165       )
166     )
167   )
168   @ApiResponses(
169     value =
170       Array(new ApiResponse(code = HttpCodes.OK, message = "Ok", response = classOf[ConsultationModerator.Response]))
171   )
172   @Path(value = "/{moderatorId}")
173   def updateConsultationModerator: Route
174 
175   def routes: Route =
176     getConsultationModerator ~ getConsultationModerators ~ createConsultationModerator ~ updateConsultationModerator
177 }
178 
179 trait AdminConsultationModeratorApiComponent {
180   def adminConsultationModeratorApi: AdminConsultationModeratorApi
181 }
182 
183 trait DefaultAdminConsultationModeratorApiComponent
184     extends AdminConsultationModeratorApiComponent
185     with DefaultEventScopedModeratorApiComponent {
186 
187   this: MakeDirectivesDependencies
188     with UserServiceComponent
189     with PersistentUserServiceComponent
190     with QuestionServiceComponent
191     with OperationServiceComponent =>
192 
193   override lazy val adminConsultationModeratorApi: AdminConsultationModeratorApi =
194     new DefaultAdminConsultationModeratorApi
195 
196   class DefaultAdminConsultationModeratorApi extends AdminConsultationModeratorApi {
197 
198     private val base: EventScopedModeratorApi =
199       new DefaultEventScopedModeratorApi(Role.RoleConsultationModerator, "consultation", "ConsultationModerator")
200 
201     override def getConsultationModerator: Route = base.getModerator
202     override def getConsultationModerators: Route = base.getModerators
203     override def createConsultationModerator: Route = base.createModerator
204     override def updateConsultationModerator: Route = base.updateModerator
205   }
206 }
207 
208 /** Alias of the shared models, mirroring `DialogueModerator`. */
209 object ConsultationModerator {
210   object Request {
211     type Create = EventScopedModerator.Request.Create
212     val Create: EventScopedModerator.Request.Create.type = EventScopedModerator.Request.Create
213 
214     type Update = EventScopedModerator.Request.Update
215     val Update: EventScopedModerator.Request.Update.type = EventScopedModerator.Request.Update
216   }
217 
218   type Response = EventScopedModerator.Response
219   val Response: EventScopedModerator.Response.type = EventScopedModerator.Response
220 }
Line Stmt Id Pos Tree Symbol Tests Code
176 44826 5328 - 5440 Apply akka.http.scaladsl.server.RouteConcatenation.RouteWithConcatenation.~ org.make.api.user.adminconsultationmoderatorapitest AdminConsultationModeratorApi.this._enhanceRouteWithConcatenation(AdminConsultationModeratorApi.this._enhanceRouteWithConcatenation(AdminConsultationModeratorApi.this._enhanceRouteWithConcatenation(AdminConsultationModeratorApi.this.getConsultationModerator).~(AdminConsultationModeratorApi.this.getConsultationModerators)).~(AdminConsultationModeratorApi.this.createConsultationModerator)).~(AdminConsultationModeratorApi.this.updateConsultationModerator)
176 38288 5355 - 5380 Select org.make.api.user.AdminConsultationModeratorApi.getConsultationModerators org.make.api.user.adminconsultationmoderatorapitest AdminConsultationModeratorApi.this.getConsultationModerators
176 42490 5383 - 5410 Select org.make.api.user.AdminConsultationModeratorApi.createConsultationModerator org.make.api.user.adminconsultationmoderatorapitest AdminConsultationModeratorApi.this.createConsultationModerator
176 31481 5413 - 5440 Select org.make.api.user.AdminConsultationModeratorApi.updateConsultationModerator org.make.api.user.adminconsultationmoderatorapitest AdminConsultationModeratorApi.this.updateConsultationModerator
176 51404 5328 - 5380 Apply akka.http.scaladsl.server.RouteConcatenation.RouteWithConcatenation.~ org.make.api.user.adminconsultationmoderatorapitest AdminConsultationModeratorApi.this._enhanceRouteWithConcatenation(AdminConsultationModeratorApi.this.getConsultationModerator).~(AdminConsultationModeratorApi.this.getConsultationModerators)
176 45883 5328 - 5352 Select org.make.api.user.AdminConsultationModeratorApi.getConsultationModerator org.make.api.user.adminconsultationmoderatorapitest AdminConsultationModeratorApi.this.getConsultationModerator
176 35385 5328 - 5410 Apply akka.http.scaladsl.server.RouteConcatenation.RouteWithConcatenation.~ org.make.api.user.adminconsultationmoderatorapitest AdminConsultationModeratorApi.this._enhanceRouteWithConcatenation(AdminConsultationModeratorApi.this._enhanceRouteWithConcatenation(AdminConsultationModeratorApi.this.getConsultationModerator).~(AdminConsultationModeratorApi.this.getConsultationModerators)).~(AdminConsultationModeratorApi.this.createConsultationModerator)
199 38042 6163 - 6270 Apply org.make.api.user.DefaultEventScopedModeratorApiComponent.DefaultEventScopedModeratorApi.<init> org.make.api.user.adminconsultationmoderatorapitest new DefaultAdminConsultationModeratorApiComponent.this.DefaultEventScopedModeratorApi(org.make.core.user.Role.RoleConsultationModerator, "consultation", "ConsultationModerator")
199 45637 6246 - 6269 Literal <nosymbol> org.make.api.user.adminconsultationmoderatorapitest "ConsultationModerator"
199 37018 6198 - 6228 Select org.make.core.user.Role.RoleConsultationModerator org.make.api.user.adminconsultationmoderatorapitest org.make.core.user.Role.RoleConsultationModerator
199 49037 6230 - 6244 Literal <nosymbol> org.make.api.user.adminconsultationmoderatorapitest "consultation"
201 50837 6323 - 6340 Select org.make.api.user.EventScopedModeratorApi.getModerator org.make.api.user.adminconsultationmoderatorapitest DefaultAdminConsultationModeratorApi.this.base.getModerator
202 43554 6393 - 6411 Select org.make.api.user.EventScopedModeratorApi.getModerators org.make.api.user.adminconsultationmoderatorapitest DefaultAdminConsultationModeratorApi.this.base.getModerators
203 35417 6466 - 6486 Select org.make.api.user.EventScopedModeratorApi.createModerator org.make.api.user.adminconsultationmoderatorapitest DefaultAdminConsultationModeratorApi.this.base.createModerator
204 31523 6541 - 6561 Select org.make.api.user.EventScopedModeratorApi.updateModerator org.make.api.user.adminconsultationmoderatorapitest DefaultAdminConsultationModeratorApi.this.base.updateModerator
212 44044 6798 - 6833 Select org.make.api.user.EventScopedModerator.Request.Create EventScopedModerator.Request.Create
215 36464 6948 - 6983 Select org.make.api.user.EventScopedModerator.Request.Update EventScopedModerator.Request.Update
219 49549 7090 - 7119 Select org.make.api.user.EventScopedModerator.Response EventScopedModerator.Response