aboutsummaryrefslogblamecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala
blob: b5955848468aee93b070a2f7756851bc5a3014a8 (plain) (tree)


























                                                                                         
                                                                                                 
























                                                                                                
package xyz.driver.pdsuidomain.services

import xyz.driver.pdsuicommon.error.DomainError
import xyz.driver.pdsuidomain.entities.ScrapedTrial

import scala.concurrent.Future

object ScrapedTrialsService {

  sealed trait GetRawTrialReply
  object GetRawTrialReply {
    type Error = GetRawTrialReply with DomainError

    case class TrialRawEntity(rawTrial: ScrapedTrial) extends GetRawTrialReply

    case object NotFoundError extends GetRawTrialReply with DomainError.NotFoundError {
      override def userMessage: String = "Raw clinical trial not found"
    }
  }

  sealed trait GetRawTrialOptReply
  object GetRawTrialOptReply {
    case class TrialRawEntity(rawTrial: Option[ScrapedTrial]) extends GetRawTrialOptReply
  }

  sealed trait GetAllRawTrialsExceptReply
  object GetAllRawTrialsExceptReply {
    case class MultipleRawTrials(rawTrials: Seq[ScrapedTrial]) extends GetAllRawTrialsExceptReply
  }

  sealed trait GetHtmlForReply
  object GetHtmlForReply {
    type TrialHtmlMap = Map[String, String]

    /**
      * @param trialHtmlMap nctId -> html
      */
    case class HtmlMap(trialHtmlMap: TrialHtmlMap) extends GetHtmlForReply
  }
}

trait ScrapedTrialsService {

  import ScrapedTrialsService._

  def getRawTrial(nctId: String): Future[GetRawTrialReply]

  def getRawTrialOpt(nctId: String): Future[GetRawTrialOptReply]

  def getAllRawTrialsExcept(nctIds: Seq[String], limit: Int): Future[GetAllRawTrialsExceptReply]

  def getHtmlFor(nctIds: Set[String]): Future[GetHtmlForReply]
}