aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/pdsuidomain/storage/RequestStorage.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/storage/RequestStorage.scala')
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/storage/RequestStorage.scala52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/storage/RequestStorage.scala b/src/main/scala/xyz/driver/pdsuidomain/storage/RequestStorage.scala
new file mode 100644
index 0000000..d9651ca
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/storage/RequestStorage.scala
@@ -0,0 +1,52 @@
+package xyz.driver.pdsuidomain.storage
+
+import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
+import xyz.driver.pdsuicommon.logging._
+import xyz.driver.pdsuidomain.entities.{Arm, Patient}
+
+import scala.collection.concurrent.TrieMap
+
+object RequestStorage {
+ type Key = (UuidId[Patient], String)
+ type Value = Set[LongId[Arm]]
+}
+
+class RequestStorage extends PhiLogging {
+ import RequestStorage._
+
+ private val storage = new TrieMap[Key, Value]()
+
+ def put(patientId: UuidId[Patient],
+ disease: String,
+ ineligibleArms: Set[LongId[Arm]]): Unit = {
+ logger.debug(phi"put($patientId, ${Unsafe(disease)}, $ineligibleArms")
+ val key = (patientId, disease.toLowerCase)
+ get(patientId, disease.toLowerCase) match {
+ case Some(oldValue) =>
+ logger.trace(phi"Requested ineligible arms=$oldValue, replace it")
+ storage.replace(key, oldValue, ineligibleArms)
+ case None =>
+ logger.trace(phi"Put request into storage")
+ storage.put(key, ineligibleArms)
+ }
+ }
+
+ def get(patientId: UuidId[Patient], disease: String): Option[Value] = {
+ logger.debug(phi"get($patientId,${Unsafe(disease)}")
+ val key = (patientId, disease.toLowerCase)
+ storage.get(key)
+ }
+
+ def contains(patientId: UuidId[Patient],
+ disease: String,
+ value: Set[LongId[Arm]]): Boolean = {
+ logger.debug(phi"contains(key=($patientId,${Unsafe(disease)}),value=$value")
+ get(patientId, disease.toLowerCase).contains(value)
+ }
+
+ def remove(patientId: UuidId[Patient], disease: String): Unit = {
+ logger.debug(phi"remove($patientId,${Unsafe(disease)}")
+ val key = (patientId, disease.toLowerCase)
+ storage.remove(key)
+ }
+}