def getContentItem()

in usage/app/lib/CrierEventProcessor.scala [119:178]


  def getContentItem(content: Content, time: DateTime): ContentContainer


  private def processEvent(event: Event): Unit = {
    implicit val logMarker: LogMarker = MarkerMap(
      "payloadId" -> event.payloadId,
      "requestId" -> UUID.randomUUID().toString
    )

    Try {
      val dateTime: DateTime = new DateTime(event.dateTime)

      event.eventType match {
        case EventType.Update =>

          event.payload match {
            case Some(content: EventPayload.Content) =>
              getContentItem(content.content, dateTime)
                .emitAsUsageGroup(CrierUsageStream.observable, usageGroupOps)
            case _ =>
              logger.warn(logMarker, s"Received crier update for ${event.payloadId} without payload")
          }
        case EventType.Delete =>
        //TODO: how do we deal with a piece of content that has been deleted?
        case EventType.RetrievableUpdate =>

          event.payload match {
            case Some(retrievableContent: EventPayload.RetrievableContent) =>
              val capiUrl = retrievableContent.retrievableContent.capiUrl

              val query = contentApiClient.usageQuery(retrievableContent.retrievableContent.id)

              logger.info(logMarker, s"retrieving content event at $capiUrl parsed to id ${query.toString}")

              contentApiClient.getResponse(query).map(response => {
                response.content match {
                  case Some(content) =>
                    getContentItem(content, dateTime)
                      .emitAsUsageGroup(CrierUsageStream.observable, usageGroupOps)
                  case _ =>
                    logger.debug(
                      logMarker,
                      s"Received retrievable update for ${retrievableContent.retrievableContent.id} without content"
                    )
                }
              }).recover {
                case e: ContentApiError =>
                  logger.error(logMarker, s"CAPI error when fetching content update for ${event.payloadId}: ${e.httpStatus} ${e.httpMessage} ${e.errorResponse}", e)
                case e =>
                  logger.error(logMarker, s"Failed to fetch or process content update for ${event.payloadId}", e)
              }
            case _ => logger.warn(logMarker, s"Received crier update for ${event.payloadId} without payload")
          }

        case _ => logger.warn(logMarker, s"Unsupported event type $EventType")
      }
    }.recover {
      case e => logger.error(logMarker, s"Failed to process event ${event.payloadId}", e)
    }
  }