Как я могу создать пакетный запрос и понять ответ с помощью ZStream (ZIO)?

У меня есть api, который получает такой запрос:

      case class UsersRequest(ids: List[Long])

и возвращает такой ответ:

      case class UsersInfoResponse(info: List[Info])
case class Info(userId: Long, info: String)

Кроме того, у меня есть методы, которые отправляют этот запрос и создают пользователя:

      def createUser(id: Long): IO[Throwable, User] = {
 getUserInfo(id)
   .map(info => User(id, info))
}

def getUserInfo(id:Long): IO[Throwable, String] = {
   here i call grpc service
   service.getUserInfo(UsersRequest(List(id)))
}

Я хочу:

  1. напишите ZStream, который создает пакет идентификаторов
  2. каждые 1 секунду занимает 10 идентификаторов и создает запрос UsersRequest
  3. получает UsersInfoResponse
  4. использование идентификатора понимает, какая информация должна быть получена
  5. вернуть информацию

Чтобы я мог это сделать, я должен создать что-то подобное:

      def getUserInfo(id:Long): IO[Throwable, String] = {
   Stream
      .fromQueue()
      .groupedWithin(10, Duration.Zero)
      .????
      .runDrain
      .forkManaged

   AND

      p <- Promise.make[Throwable, String]
      interrupted <- Promise.make[Nothing, Unit]
      env <- ZIO.environment[R]
}

Я не знаю, как я могу это сделать. Как создать пакет и отправить запрос, а после совпадения по идентификатору получить результат?

0 ответов

Другие вопросы по тегам