Skip to content

Commit 3e7e5c3

Browse files
authored
Unify json parsing code in WKRemoteDataStoreController (#8557)
1 parent 2ce8551 commit 3e7e5c3

File tree

1 file changed

+24
-42
lines changed

1 file changed

+24
-42
lines changed

app/controllers/WKRemoteDataStoreController.scala

Lines changed: 24 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ import models.team.TeamDAO
2929
import models.user.{MultiUserDAO, User, UserDAO, UserService}
3030
import net.liftweb.common.Full
3131
import play.api.i18n.{Messages, MessagesProvider}
32-
import play.api.libs.json.{JsError, JsSuccess, JsValue, Json}
32+
import play.api.libs.json.Json
3333
import play.api.mvc.{Action, AnyContent, PlayBodyParsers}
3434
import security.{WebknossosBearerTokenAuthenticatorService, WkSilhouetteEnvironment}
3535
import telemetry.SlackNotificationService
3636
import utils.WkConf
3737

3838
import scala.concurrent.duration.DurationInt
3939
import javax.inject.Inject
40-
import scala.concurrent.{ExecutionContext, Future}
40+
import scala.concurrent.ExecutionContext
4141

4242
class WKRemoteDataStoreController @Inject()(
4343
datasetService: DatasetService,
@@ -175,21 +175,17 @@ class WKRemoteDataStoreController @Inject()(
175175
s"For organization: ${organization.name}. <$resultLink|Result>")
176176
} yield ()
177177

178-
def statusUpdate(name: String, key: String): Action[JsValue] = Action.async(parse.json) { implicit request =>
179-
dataStoreService.validateAccess(name, key) { _ =>
180-
request.body.validate[DataStoreStatus] match {
181-
case JsSuccess(status, _) =>
182-
logger.debug(s"Status update from data store '$name'. Status: " + status.ok)
183-
for {
184-
_ <- dataStoreDAO.updateUrlByName(name, status.url)
185-
_ <- dataStoreDAO.updateReportUsedStorageEnabledByName(name,
186-
status.reportUsedStorageEnabled.getOrElse(false))
187-
} yield Ok
188-
case e: JsError =>
189-
logger.error("Data store '$name' sent invalid update. Error: " + e)
190-
Future.successful(JsonBadRequest(JsError.toJson(e)))
178+
def statusUpdate(name: String, key: String): Action[DataStoreStatus] = Action.async(validateJson[DataStoreStatus]) {
179+
implicit request =>
180+
dataStoreService.validateAccess(name, key) { _ =>
181+
val okLabel = if (request.body.ok) "ok" else "not ok"
182+
logger.debug(s"Status update from data store '$name'. Status $okLabel")
183+
for {
184+
_ <- dataStoreDAO.updateUrlByName(name, request.body.url)
185+
_ <- dataStoreDAO.updateReportUsedStorageEnabledByName(name,
186+
request.body.reportUsedStorageEnabled.getOrElse(false))
187+
} yield Ok
191188
}
192-
}
193189
}
194190

195191
def updateAll(name: String, key: String): Action[List[InboxDataSource]] =
@@ -209,37 +205,23 @@ class WKRemoteDataStoreController @Inject()(
209205
}
210206
}
211207

212-
def updateOne(name: String, key: String): Action[JsValue] = Action.async(parse.json) { implicit request =>
213-
dataStoreService.validateAccess(name, key) { dataStore =>
214-
request.body.validate[InboxDataSource] match {
215-
case JsSuccess(dataSource, _) =>
216-
for {
217-
_ <- datasetService.updateDataSources(dataStore, List(dataSource))(GlobalAccessContext)
218-
} yield {
219-
JsonOk
220-
}
221-
case e: JsError =>
222-
logger.warn("Data store reported invalid json for data source.")
223-
Fox.successful(JsonBadRequest(JsError.toJson(e)))
208+
def updateOne(name: String, key: String): Action[InboxDataSource] =
209+
Action.async(validateJson[InboxDataSource]) { implicit request =>
210+
dataStoreService.validateAccess(name, key) { dataStore =>
211+
for {
212+
_ <- datasetService.updateDataSources(dataStore, List(request.body))(GlobalAccessContext)
213+
} yield Ok
224214
}
225215
}
226-
}
227216

228-
def updatePaths(name: String, key: String): Action[JsValue] = Action.async(parse.json) { implicit request =>
229-
dataStoreService.validateAccess(name, key) { _ =>
230-
request.body.validate[List[DataSourcePathInfo]] match {
231-
case JsSuccess(infos, _) =>
232-
for {
233-
_ <- datasetService.updateRealPaths(infos)(GlobalAccessContext)
234-
} yield {
235-
JsonOk
236-
}
237-
case e: JsError =>
238-
logger.warn("Data store reported invalid json for data source paths.")
239-
Fox.successful(JsonBadRequest(JsError.toJson(e)))
217+
def updatePaths(name: String, key: String): Action[List[DataSourcePathInfo]] =
218+
Action.async(validateJson[List[DataSourcePathInfo]]) { implicit request =>
219+
dataStoreService.validateAccess(name, key) { _ =>
220+
for {
221+
_ <- datasetService.updateRealPaths(request.body)(GlobalAccessContext)
222+
} yield Ok
240223
}
241224
}
242-
}
243225

244226
def deleteDataset(name: String, key: String): Action[DataSourceId] = Action.async(validateJson[DataSourceId]) {
245227
implicit request =>

0 commit comments

Comments
 (0)