package com.github.j5ik2o.dddbase.redis import cats.data.ReaderT import com.github.j5ik2o.dddbase.{ AggregateNotFoundException, AggregateSingleReader } import com.github.j5ik2o.reactive.redis.RedisConnection import monix.eval.Task trait AggregateSingleReadFeature extends AggregateSingleReader[ReaderT[Task, RedisConnection, ?]] with AggregateBaseReadFeature { override def resolveById(id: IdType): ReaderT[Task, RedisConnection, AggregateType] = for { record <- ReaderT[Task, RedisConnection, RecordType] { con => dao.get(id.value.toString).run(con).flatMap { case Some(v) => Task.pure(v) case None => Task.raiseError(AggregateNotFoundException(id)) } } aggregate <- convertToAggregate(record) } yield aggregate }