All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticmq.rest.sqs.DeleteMessageBatchDirectives.scala Maven / Gradle / Ivy

There is a newer version: 1.6.11
Show newest version
package org.elasticmq.rest.sqs

import Constants._
import org.elasticmq.DeliveryReceipt
import org.elasticmq.msg.DeleteMessage
import org.elasticmq.actor.reply._
import org.elasticmq.rest.sqs.Action.DeleteMessageBatch
import org.elasticmq.rest.sqs.SQSException.ElasticMQErrorOps
import org.elasticmq.rest.sqs.directives.ElasticMQDirectives
import org.elasticmq.rest.sqs.model.RequestPayload
import spray.json.RootJsonFormat
import spray.json.DefaultJsonProtocol._

import scala.concurrent.Future
import scala.xml.Elem

trait DeleteMessageBatchDirectives {
  this: ElasticMQDirectives with BatchRequestsModule with ResponseMarshaller =>
  def deleteMessageBatch(p: RequestPayload)(implicit marshallerDependencies: MarshallerDependencies) = {
    p.action(DeleteMessageBatch) {

      val batch = p.as[BatchRequest[DeleteMessageBatchEntry]]

      queueActorFromUrl(batch.QueueUrl) { queueActor =>
        val resultsFuture = batchRequest(batch.Entries) { (messageData, id, _) =>
          val receiptHandle = messageData.ReceiptHandle
          val result = queueActor ? DeleteMessage(DeliveryReceipt(receiptHandle))

          result.flatMap {
            case Right(_) => Future.successful(BatchDeleteMessageResponseEntry(id))
            case Left(invalidHandle) =>
              Future.failed(invalidHandle.toSQSException)
          }
        }
        complete(resultsFuture)
      }
    }
  }
}

case class BatchDeleteMessageResponseEntry(Id: String)

object BatchDeleteMessageResponseEntry {
  implicit val jsonFormat: RootJsonFormat[BatchDeleteMessageResponseEntry] = jsonFormat1(
    BatchDeleteMessageResponseEntry.apply
  )

  implicit val entryXmlSerializer: XmlSerializer[BatchDeleteMessageResponseEntry] =
    new XmlSerializer[BatchDeleteMessageResponseEntry] {
      override def toXml(t: BatchDeleteMessageResponseEntry): Elem =
        
          {t.Id}
        
    }

  implicit def batchXmlSerializer[T](implicit successSerializer: XmlSerializer[T]): XmlSerializer[BatchResponse[T]] =
    new XmlSerializer[BatchResponse[T]] {
      override def toXml(t: BatchResponse[T]): Elem =
        
        
          {t.Successful.map(successSerializer.toXml) ++ t.Failed.toList.flatMap(_.map(XmlSerializer[Failed].toXml))}
        
        
          {EmptyRequestId}
        
      
    }
}
case class DeleteMessageBatchEntry(Id: String, ReceiptHandle: String) extends BatchEntry

object DeleteMessageBatchEntry {
  implicit val jsonFormat: RootJsonFormat[DeleteMessageBatchEntry] = jsonFormat2(DeleteMessageBatchEntry.apply)

  implicit val queryReader: BatchFlatParamsReader[DeleteMessageBatchEntry] =
    new BatchFlatParamsReader[DeleteMessageBatchEntry] {
      override def batchPrefix: String = "DeleteMessageBatchRequestEntry"

      override def read(params: Map[String, String]): DeleteMessageBatchEntry =
        DeleteMessageBatchEntry(
          requiredParameter(params)(IdSubParameter),
          requiredParameter(params)(ReceiptHandleParameter)
        )
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy