package lu.foyer package contracts import zio.* class ContractEventRepositoryInMemory(events: Ref[Map[String, Event[ContractEvent]]]) extends EventRepository[ContractEvent] with InMemoryRepository[Event[ContractEvent]](events): def fetchOne(entityId: String, eventId: String): Task[Option[Event[ContractEvent]]] = events.get.map(_.get(eventId)) def fetchMany(entityId: String, page: Page): Task[Paged[Event[ContractEvent]]] = 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)) Paged(items.toList, if page.totals.getOrElse(true) then Some(entities.size) else None) ) object ContractEventRepositoryInMemory: val layer = ZLayer.fromZIO(Ref.make(Map.empty).map(ContractEventRepositoryInMemory(_)))