aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services/ScrapedTrialsService.scala
blob: 233495ec8f47fb4e7213f603a75ff780ce36be19 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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

    final 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 {
    final case class TrialRawEntity(rawTrial: Option[ScrapedTrial]) extends GetRawTrialOptReply
  }

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

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

    /**
      * @param trialHtmlMap nctId -> html
      */
    final 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]
}