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 Dialogue Moderators")
35 @Path(value = "/admin/dialogue/moderators")
36 trait AdminDialogueModeratorApi extends Directives {
37
38 @ApiOperation(
39 value = "get-dialogue-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 = Array(new ApiResponse(code = HttpCodes.OK, message = "Ok", response = classOf[DialogueModerator.Response]))
51 )
52 @ApiImplicitParams(
53 value = Array(
54 new ApiImplicitParam(
55 name = "moderatorId",
56 paramType = "path",
57 dataType = "string",
58 example = "11111111-2222-3333-4444-555555555555"
59 )
60 )
61 )
62 @Path(value = "/{moderatorId}")
63 def getDialogueModerator: Route
64
65 @ApiOperation(
66 value = "get-dialogue-moderators",
67 httpMethod = "GET",
68 code = HttpCodes.OK,
69 authorizations = Array(
70 new Authorization(
71 value = "MakeApi",
72 scopes = Array(new AuthorizationScope(scope = "admin", description = "BO Admin"))
73 )
74 )
75 )
76 @ApiImplicitParams(
77 value = Array(
78 new ApiImplicitParam(
79 name = "_start",
80 paramType = "query",
81 dataType = "int",
82 allowableValues = "range[0, infinity]"
83 ),
84 new ApiImplicitParam(
85 name = "_end",
86 paramType = "query",
87 dataType = "int",
88 allowableValues = "range[0, infinity]"
89 ),
90 new ApiImplicitParam(
91 name = "_sort",
92 paramType = "query",
93 dataType = "string",
94 allowableValues = PersistentUser.swaggerAllowableValues
95 ),
96 new ApiImplicitParam(
97 name = "_order",
98 paramType = "query",
99 dataType = "string",
100 allowableValues = Order.swaggerAllowableValues
101 ),
102 new ApiImplicitParam(name = "id", paramType = "query", dataType = "string", allowMultiple = true),
103 new ApiImplicitParam(name = "email", paramType = "query", dataType = "string"),
104 new ApiImplicitParam(name = "firstName", paramType = "query", dataType = "string")
105 )
106 )
107 @ApiResponses(
108 value =
109 Array(new ApiResponse(code = HttpCodes.OK, message = "Ok", response = classOf[Array[DialogueModerator.Response]]))
110 )
111 @Path(value = "/")
112 def getDialogueModerators: Route
113
114 @ApiOperation(
115 value = "create-dialogue-moderator",
116 httpMethod = "POST",
117 code = HttpCodes.OK,
118 authorizations = Array(
119 new Authorization(
120 value = "MakeApi",
121 scopes = Array(new AuthorizationScope(scope = "admin", description = "BO Admin"))
122 )
123 )
124 )
125 @ApiImplicitParams(
126 value = Array(
127 new ApiImplicitParam(
128 value = "body",
129 paramType = "body",
130 dataType = "org.make.api.user.EventScopedModerator.Request.Create"
131 )
132 )
133 )
134 @ApiResponses(
135 value = Array(new ApiResponse(code = HttpCodes.OK, message = "Ok", response = classOf[DialogueModerator.Response]))
136 )
137 @Path(value = "/")
138 def createDialogueModerator: Route
139
140 @ApiOperation(
141 value = "update-dialogue-moderator",
142 httpMethod = "PUT",
143 code = HttpCodes.OK,
144 authorizations = Array(
145 new Authorization(
146 value = "MakeApi",
147 scopes = Array(
148 new AuthorizationScope(scope = "admin", description = "BO Admin"),
149 new AuthorizationScope(scope = "moderator", description = "BO Moderator")
150 )
151 )
152 )
153 )
154 @ApiImplicitParams(
155 value = Array(
156 new ApiImplicitParam(name = "moderatorId", paramType = "path", dataType = "string"),
157 new ApiImplicitParam(
158 value = "body",
159 paramType = "body",
160 dataType = "org.make.api.user.EventScopedModerator.Request.Update"
161 )
162 )
163 )
164 @ApiResponses(
165 value = Array(new ApiResponse(code = HttpCodes.OK, message = "Ok", response = classOf[DialogueModerator.Response]))
166 )
167 @Path(value = "/{moderatorId}")
168 def updateDialogueModerator: Route
169
170 def routes: Route =
171 getDialogueModerator ~ getDialogueModerators ~ createDialogueModerator ~ updateDialogueModerator
172 }
173
174 trait AdminDialogueModeratorApiComponent {
175 def adminDialogueModeratorApi: AdminDialogueModeratorApi
176 }
177
178 trait DefaultAdminDialogueModeratorApiComponent
179 extends AdminDialogueModeratorApiComponent
180 with DefaultEventScopedModeratorApiComponent {
181
182 this: MakeDirectivesDependencies
183 with UserServiceComponent
184 with PersistentUserServiceComponent
185 with QuestionServiceComponent
186 with OperationServiceComponent =>
187
188 override lazy val adminDialogueModeratorApi: AdminDialogueModeratorApi = new DefaultAdminDialogueModeratorApi
189
190 class DefaultAdminDialogueModeratorApi extends AdminDialogueModeratorApi {
191
192 private val base: EventScopedModeratorApi =
193 new DefaultEventScopedModeratorApi(Role.RoleDialogueModerator, "dialogue", "DialogueModerator")
194
195 override def getDialogueModerator: Route = base.getModerator
196 override def getDialogueModerators: Route = base.getModerators
197 override def createDialogueModerator: Route = base.createModerator
198 override def updateDialogueModerator: Route = base.updateModerator
199 }
200 }
201
202 /** Kept as an alias of the shared models, so that existing imports and Swagger references keep working. */
203 object DialogueModerator {
204 object Request {
205 type Create = EventScopedModerator.Request.Create
206 val Create: EventScopedModerator.Request.Create.type = EventScopedModerator.Request.Create
207
208 type Update = EventScopedModerator.Request.Update
209 val Update: EventScopedModerator.Request.Update.type = EventScopedModerator.Request.Update
210 }
211
212 type Response = EventScopedModerator.Response
213 val Response: EventScopedModerator.Response.type = EventScopedModerator.Response
214 }