Как я могу создать пакетный запрос и понять ответ с помощью 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)))
}
Я хочу:
- напишите ZStream, который создает пакет идентификаторов
- каждые 1 секунду занимает 10 идентификаторов и создает запрос UsersRequest
- получает UsersInfoResponse
- использование идентификатора понимает, какая информация должна быть получена
- вернуть информацию
Чтобы я мог это сделать, я должен создать что-то подобное:
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]
}
Я не знаю, как я могу это сделать. Как создать пакет и отправить запрос, а после совпадения по идентификатору получить результат?