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
|
package xyz.driver.pdsuidomain.services
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.error.DomainError
import xyz.driver.pdsuicommon.logging._
import xyz.driver.pdsuidomain.entities._
import scala.concurrent.Future
object PatientLabelService {
trait DefaultNotFoundError {
def userMessage: String = "Patient label not found"
}
trait DefaultPatientNotFoundError {
def userMessage: String = "Patient not found"
}
trait DefaultAccessDeniedError {
def userMessage: String = "Access denied"
}
sealed trait GetListReply
object GetListReply {
case class EntityList(xs: Seq[(PatientLabel, Boolean)], totalFound: Int)
extends GetListReply
case object AuthorizationError
extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
case object PatientNotFoundError
extends GetListReply with DefaultPatientNotFoundError with DomainError.NotFoundError
case class CommonError(userMessage: String) extends GetListReply with DomainError
}
sealed trait GetDefiningCriteriaListReply
object GetDefiningCriteriaListReply {
case class EntityList(xs: Seq[PatientLabel], totalFound: Int)
extends GetDefiningCriteriaListReply
case object AuthorizationError
extends GetDefiningCriteriaListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
case object PatientNotFoundError
extends GetDefiningCriteriaListReply with DefaultPatientNotFoundError with DomainError.NotFoundError
case class CommonError(userMessage: String) extends GetDefiningCriteriaListReply with DomainError
}
sealed trait GetByLabelIdReply
object GetByLabelIdReply {
case class Entity(x: PatientLabel, isVerified: Boolean) extends GetByLabelIdReply
type Error = GetByLabelIdReply with DomainError
case object NotFoundError
extends GetByLabelIdReply with DefaultNotFoundError with DomainError.NotFoundError
case object PatientNotFoundError
extends GetByLabelIdReply with DefaultPatientNotFoundError with DomainError.NotFoundError
case object AuthorizationError
extends GetByLabelIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
case class CommonError(userMessage: String) extends GetByLabelIdReply with DomainError
implicit def toPhiString(reply: GetByLabelIdReply): PhiString = reply match {
case x: DomainError => phi"GetByIdReply.Error($x)"
case Entity(x, y) => phi"GetByIdReply.Entity($x, $y)"
}
}
sealed trait UpdateReply
object UpdateReply {
type Error = UpdateReply with DomainError
case class Updated(updated: PatientLabel, isVerified: Boolean) extends UpdateReply
case object NotFoundError
extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
case object PatientNotFoundError
extends UpdateReply with DefaultPatientNotFoundError with DomainError.NotFoundError
case object AuthorizationError
extends UpdateReply with DomainError.AuthorizationError with DefaultAccessDeniedError
case class CommonError(userMessage: String)
extends UpdateReply with DomainError
implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
case Updated(x, y) => phi"Updated($x, $y)"
case x: Error => DomainError.toPhiString(x)
}
}
}
trait PatientLabelService {
import PatientLabelService._
def getAll(patientId: UuidId[Patient],
filter: SearchFilterExpr = SearchFilterExpr.Empty,
sorting: Option[Sorting] = None,
pagination: Option[Pagination] = None)
(implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
def getDefiningCriteriaList(patientId: UuidId[Patient],
hypothesisId: UuidId[Hypothesis],
pagination: Option[Pagination] = None)
(implicit requestContext: AuthenticatedRequestContext): Future[GetDefiningCriteriaListReply]
def getByLabelIdOfPatient(patientId: UuidId[Patient],
labelId: LongId[Label])
(implicit requestContext: AuthenticatedRequestContext): Future[GetByLabelIdReply]
def update(origPatientLabel: PatientLabel,
draftPatientLabel: PatientLabel)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
}
|