blob: 7b5aa66aa867e47fd3358dedd94271f46694a0b4 (
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
129
130
131
132
133
134
135
136
137
|
package xyz.driver.pdsuidomain.services
import java.time.LocalDateTime
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuicommon.error._
import xyz.driver.pdsuidomain.entities.MedicalRecord.PdfSource
import xyz.driver.pdsuidomain.entities._
import scala.concurrent.Future
object MedicalRecordService {
type PdfSourceFetcher = (String, String) => Future[PdfSource]
trait DefaultNotFoundError {
def userMessage: String = "Medical record hasn't been found"
}
trait DefaultAccessDeniedError {
def userMessage: String = "Access denied"
}
sealed trait GetByIdReply
object GetByIdReply {
case class Entity(x: MedicalRecord) extends GetByIdReply
type Error = GetByIdReply with DomainError
case object NotFoundError extends GetByIdReply
with DomainError.NotFoundError with DefaultNotFoundError
case class CommonError(userMessage: String) extends GetByIdReply
with DomainError
case object AuthorizationError extends GetByIdReply
with DomainError.AuthorizationError with DefaultAccessDeniedError
}
sealed trait GetPdfSourceReply
object GetPdfSourceReply {
type Error = GetPdfSourceReply with DomainError
case class Entity(x: PdfSource.Channel) extends GetPdfSourceReply
case object AuthorizationError
extends GetPdfSourceReply with DomainError.AuthorizationError with DefaultAccessDeniedError
case object NotFoundError
extends GetPdfSourceReply with DomainError.NotFoundError {
def userMessage: String = "Medical record PDF hasn't been found"
}
case object RecordNotFoundError
extends GetPdfSourceReply with DomainError.NotFoundError with DefaultNotFoundError
case class CommonError(userMessage: String)
extends GetPdfSourceReply with DomainError
}
sealed trait GetListReply
object GetListReply {
case class EntityList(xs: Seq[MedicalRecord], totalFound: Int, lastUpdate: Option[LocalDateTime])
extends GetListReply
case object AuthorizationError
extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
}
sealed trait CreateReply
object CreateReply {
case class Created(x: MedicalRecord) extends CreateReply
}
sealed trait UpdateReply
object UpdateReply {
type Error = UpdateReply with DomainError
case class Updated(updated: MedicalRecord) extends UpdateReply
case object NotFoundError
extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
case object AuthorizationError
extends UpdateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
case class CommonError(userMessage: String)
extends UpdateReply with DomainError
}
case class Settings(pdfSourceBucket: String)
}
trait MedicalRecordService {
import MedicalRecordService._
def getById(recordId: LongId[MedicalRecord])
(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
def getPdfSource(recordId: LongId[MedicalRecord])
(implicit requestContext: AuthenticatedRequestContext): Future[GetPdfSourceReply]
def getAll(filter: SearchFilterExpr = SearchFilterExpr.Empty,
sorting: Option[Sorting] = None,
pagination: Option[Pagination] = None)
(implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
def create(draft: MedicalRecord): Future[CreateReply]
def update(origRecord: MedicalRecord,
draftRecord: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def start(orig: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def submit(orig: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def restart(orig: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def flag(orig: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def resolve(orig: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def unassign(orig: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def archive(orig: MedicalRecord)
(implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
}
|