aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
blob: 7d44309e57fdacea71c18eef03ec476d76895e92 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package xyz.driver.pdsuidomain.services.fake

import java.time.LocalDateTime

import akka.NotUsed
import akka.stream.scaladsl.Source
import akka.util.ByteString
import xyz.driver.core.generators
import xyz.driver.core.rest.AuthorizedServiceRequestContext
import xyz.driver.entities.labels.Label
import xyz.driver.entities.patient.CancerType
import xyz.driver.entities.users.AuthUserInfo
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
import xyz.driver.pdsuidomain.entities.{Criterion, EligibilityArm, Trial}
import xyz.driver.pdsuidomain.services.TrialService

import scala.concurrent.Future

class FakeTrialService extends TrialService {

  import TrialService._

  private val trial = Trial(
    id = StringId(""),
    externalId = UuidId(),
    status = Trial.Status.New,
    assignee = None,
    previousStatus = None,
    previousAssignee = None,
    lastActiveUserId = None,
    lastUpdate = LocalDateTime.now(),
    phase = "",
    hypothesisId = None,
    studyDesignId = None,
    originalStudyDesign = None,
    isPartner = false,
    overview = None,
    overviewTemplate = "",
    isUpdated = false,
    title = "",
    originalTitle = ""
  )

  def getById(id: StringId[Trial])(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetByIdReply] =
    Future.successful(
      GetByIdReply.Entity(trial)
    )

  def getPdfSource(trialId: StringId[Trial])(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]
  ): Future[Source[ByteString, NotUsed]] =
    Future.failed(new NotImplementedError("fake pdf download is not implemented"))

  def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
             sorting: Option[Sorting] = None,
             pagination: Option[Pagination] = None)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetListReply] =
    Future.successful(GetListReply.EntityList(Seq(trial), 1, None))

  override def getTrialWithLabels(trialId: StringId[Trial], cancerType: CancerType)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetTrialWithLabelsReply] =
    Future.successful(GetTrialWithLabelsReply.Entity(nextExportTrialWithLabels()))

  override def getTrialsWithLabels(cancerType: CancerType)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[GetTrialsWithLabelsReply] =
    Future.successful(GetTrialsWithLabelsReply.EntityList(generators.seqOf(nextExportTrialWithLabels())))

  private def nextExportTrialWithLabels() =
    ExportTrialWithLabels(
      StringId[Trial]("NCT" + generators.nextInt(999999).toString),
      UuidId[Trial](generators.nextUuid()),
      LocalDateTime.now(),
      labelVersion = 1L,
      generators.listOf(
        new ExportTrialArm(
          LongId[EligibilityArm](generators.nextInt(999999).toLong),
          generators.nextName().value,
          generators.listOf(generators.oneOf("adenocarcinoma", "breast", "prostate"))
        )),
      generators.listOf(
        new ExportTrialLabelCriterion(
          LongId[Criterion](generators.nextInt(999999).toLong),
          generators.nextOption(generators.nextBoolean()),
          LongId[Label](generators.nextInt(999999).toLong),
          generators.setOf(LongId[EligibilityArm](generators.nextInt(999999).toLong)),
          generators.nextName().value,
          generators.nextBoolean(),
          generators.nextBoolean(),
          generators.nextOption(generators.nextBoolean())
        ))
    )

  def update(origTrial: Trial, draftTrial: Trial)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    Future.successful(UpdateReply.Updated(draftTrial))

  def start(origTrial: Trial)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    update(origTrial, origTrial)

  def submit(origTrial: Trial)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    update(origTrial, origTrial)

  def restart(origTrial: Trial)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    update(origTrial, origTrial)

  def flag(origTrial: Trial)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    update(origTrial, origTrial)

  def resolve(origTrial: Trial)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    update(origTrial, origTrial)

  def archive(origTrial: Trial, comment: Option[String])(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    update(origTrial, origTrial)

  def unassign(origTrial: Trial)(
          implicit requestContext: AuthorizedServiceRequestContext[AuthUserInfo]): Future[UpdateReply] =
    update(origTrial, origTrial)

}