metadata-editor/app/controllers/SyndicationController.scala (58 lines of code) (raw):

package controllers import com.gu.mediaservice.lib.argo.ArgoHelpers import com.gu.mediaservice.lib.auth.Authentication import com.gu.mediaservice.lib.aws.{DynamoDB, NoItemFound} import play.api.mvc.{Action, AnyContent} import com.gu.mediaservice.model._ import com.gu.mediaservice.syntax.MessageSubjects import lib._ import play.api.libs.json._ import play.api.mvc.{BaseController, ControllerComponents} import scala.concurrent.{ExecutionContext, Future} class SyndicationController(auth: Authentication, val editsStore: EditsStore, val syndicationStore: SyndicationStore, val notifications: Notifications, val config: EditsConfig, override val controllerComponents: ControllerComponents)(implicit val ec: ExecutionContext) extends BaseController with Syndication with MessageSubjects with ArgoHelpers with EditsResponse { override val metadataBaseUri: String = config.services.metadataBaseUri def getPhotoshoot(id: String) = auth.async { editsStore.jsonGet(id, Edits.Photoshoot).map(dynamoEntry => { (dynamoEntry \ Edits.Photoshoot).toOption match { case Some(photoshoot) => respond(photoshoot.as[Photoshoot]) case None => respondNotFound("No photoshoot found") } }) recover { case NoItemFound => respondNotFound("No photoshoot found") } } def setPhotoshoot(id: String) = auth.async(parse.json) { req => { (req.body \ "data").asOpt[Photoshoot].map(photoshoot => setPhotoshootAndPublish(id, photoshoot) .map(photoshoot => respond(photoshoot)) ) .getOrElse( Future.successful(respondError(BadRequest, "invalid-form-data", "Invalid form data")) ) }} def deletePhotoshoot(id: String) = auth.async { deletePhotoshootAndPublish(id).map(_ => Accepted) } def getSyndication(id: String): Action[AnyContent] = auth.async { getSyndicationForImage(id) .map { case Some(rights) => respond(rights) // If no rights, send a 404 - no syndication rights for this id. Either id is duff, or it really has none. case None => NotFound } } def setSyndication(id: String): Action[JsValue] = auth.async(parse.json) { req => { (req.body \ "data").asOpt[SyndicationRights].map(syndicationRight => { setSyndicationAndPublish(id, syndicationRight) .map(syndicationRight => respond(syndicationRight)) }).getOrElse(Future.successful(respondError(BadRequest, "invalid-form-data", "Invalid form data"))) }} def deleteSyndication(id: String): Action[AnyContent] = auth.async { deleteSyndicationAndPublish(id).map(_ => Accepted) } }