aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-06-27 17:13:02 -0700
committervlad <vlad@driver.xyz>2017-06-27 17:13:02 -0700
commit5832f63b84d7388441d1200f2442dc1e9de0225c (patch)
tree32f63acdc920c14effc3d0d2822c05c125ad49e4 /src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala
parent9dd50590d4c8f8b9442d7c21ddd1def9dd453d5e (diff)
downloadrest-query-5832f63b84d7388441d1200f2442dc1e9de0225c.tar.gz
rest-query-5832f63b84d7388441d1200f2442dc1e9de0225c.tar.bz2
rest-query-5832f63b84d7388441d1200f2442dc1e9de0225c.zip
All PDS UI domain models, API case classes, service traits and necessary utils moved to pdsui-commonv0.1.11
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala
new file mode 100644
index 0000000..7b5aa66
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/MedicalRecordService.scala
@@ -0,0 +1,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]
+}