/
githubmirror
/
nest
Обзор
Документация
Войти
/
githubmirror
/
nest
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
integration/microservices/src/redis/redis.controller.ts
78 строк
2 KB
Kamil Myśliwiec
fix(): fix rxjs breaking changes
17 май 2021, 15:04
Не верифицирован
17 май 2021, 15:04
18f66e8
Код
Авторство
О чём код?
import { Body, Controller, HttpCode, Post, Query } from '@nestjs/common'; import { Client, ClientProxy, EventPattern, MessagePattern, Transport, } from '@nestjs/microservices'; import { from, lastValueFrom, Observable, of } from 'rxjs'; import { scan } from 'rxjs/operators'; @Controller() export class RedisController { static IS_NOTIFIED = false; @Client({ transport: Transport.REDIS }) client: ClientProxy; @Post() @HttpCode(200) call(@Query('command') cmd, @Body() data: number[]): Observable<number> { return this.client.send<number>({ cmd }, data); } @Post('stream') @HttpCode(200) stream(@Body() data: number[]): Observable<number> { return this.client .send<number>({ cmd: 'streaming' }, data) .pipe(scan((a, b) => a + b)); } @Post('concurrent') @HttpCode(200) concurrent(@Body() data: number[][]): Promise<boolean> { const send = async (tab: number[]) => { const expected = tab.reduce((a, b) => a + b); const result = await lastValueFrom( this.client.send<number>({ cmd: 'sum' }, tab), ); return result === expected; }; return data .map(async tab => send(tab)) .reduce(async (a, b) => (await a) && b); } @MessagePattern({ cmd: 'sum' }) sum(data: number[]): number { return (data || []).reduce((a, b) => a + b); } @MessagePattern({ cmd: 'asyncSum' }) async asyncSum(data: number[]): Promise<number> { return (data || []).reduce((a, b) => a + b); } @MessagePattern({ cmd: 'streamSum' }) streamSum(data: number[]): Observable<number> { return of((data || []).reduce((a, b) => a + b)); } @MessagePattern({ cmd: 'streaming' }) streaming(data: number[]): Observable<number> { return from(data); } @Post('notify') async sendNotification(): Promise<any> { return this.client.emit<number>('notification', true); } @EventPattern('notification') eventHandler(data: boolean) { RedisController.IS_NOTIFIED = data; } }