foyer-dsi-assure-2035/api/src/lu/foyer/contracts/ContractEventRepositoryInMemory.scala

23 lines
903 B
Scala
Raw Normal View History

2025-10-06 18:30:22 +02:00
package lu.foyer
package contracts
import zio.*
2025-10-13 15:46:22 +02:00
class ContractEventRepositoryInMemory(events: Ref[Map[String, Event[ContractEvent]]])
2025-10-06 18:30:22 +02:00
extends EventRepository[ContractEvent]
with InMemoryRepository[Event[ContractEvent]](events):
2025-10-13 15:46:22 +02:00
def fetchOne(entityId: String, eventId: String): Task[Option[Event[ContractEvent]]] =
2025-10-06 18:30:22 +02:00
events.get.map(_.get(eventId))
2025-10-13 15:46:22 +02:00
def fetchMany(entityId: String, page: Page): Task[Paged[Event[ContractEvent]]] =
2025-10-06 18:30:22 +02:00
events.get
.map(entities =>
val items = entities.values
.filter(_.entityId == entityId)
.drop(page.number.getOrElse(0) * page.size.getOrElse(50))
.take(page.size.getOrElse(50))
2025-10-13 15:46:22 +02:00
Paged(items.toList, if page.totals.getOrElse(true) then Some(entities.size) else None)
2025-10-06 18:30:22 +02:00
)
object ContractEventRepositoryInMemory:
val layer = ZLayer.fromZIO(Ref.make(Map.empty).map(ContractEventRepositoryInMemory(_)))