feat: 支持 push
This commit is contained in:
85
src/push-notifications/push-notifications.controller.ts
Normal file
85
src/push-notifications/push-notifications.controller.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
import { Controller, Post, Put, Delete, Body, Param, Get, Query, UseGuards } from '@nestjs/common';
|
||||
import { ApiTags, ApiOperation, ApiResponse, ApiParam, ApiQuery } from '@nestjs/swagger';
|
||||
import { PushNotificationsService } from './push-notifications.service';
|
||||
import { RegisterDeviceTokenDto } from './dto/register-device-token.dto';
|
||||
import { UpdateDeviceTokenDto } from './dto/update-device-token.dto';
|
||||
import { SendPushNotificationDto } from './dto/send-push-notification.dto';
|
||||
import { SendPushByTemplateDto } from './dto/send-push-by-template.dto';
|
||||
import { PushResponseDto, BatchPushResponseDto, RegisterTokenResponseDto, UpdateTokenResponseDto, UnregisterTokenResponseDto } from './dto/push-response.dto';
|
||||
import { CurrentUser } from '../common/decorators/current-user.decorator';
|
||||
import { AccessTokenPayload } from '../users/services/apple-auth.service';
|
||||
import { JwtAuthGuard } from '../common/guards/jwt-auth.guard';
|
||||
import { Public } from '../common/decorators/public.decorator';
|
||||
|
||||
@ApiTags('推送通知')
|
||||
@Controller('push-notifications')
|
||||
@UseGuards(JwtAuthGuard)
|
||||
export class PushNotificationsController {
|
||||
constructor(private readonly pushNotificationsService: PushNotificationsService) { }
|
||||
|
||||
@Post('register-token')
|
||||
@ApiOperation({ summary: '注册设备推送令牌' })
|
||||
@ApiResponse({ status: 200, description: '注册成功', type: RegisterTokenResponseDto })
|
||||
async registerToken(
|
||||
@CurrentUser() user: AccessTokenPayload,
|
||||
@Body() registerTokenDto: RegisterDeviceTokenDto,
|
||||
): Promise<RegisterTokenResponseDto> {
|
||||
return this.pushNotificationsService.registerToken(user.sub, registerTokenDto);
|
||||
}
|
||||
|
||||
@Put('update-token')
|
||||
@ApiOperation({ summary: '更新设备推送令牌' })
|
||||
@ApiResponse({ status: 200, description: '更新成功', type: UpdateTokenResponseDto })
|
||||
async updateToken(
|
||||
@CurrentUser() user: AccessTokenPayload,
|
||||
@Body() updateTokenDto: UpdateDeviceTokenDto,
|
||||
): Promise<UpdateTokenResponseDto> {
|
||||
return this.pushNotificationsService.updateToken(user.sub, updateTokenDto);
|
||||
}
|
||||
|
||||
@Delete('unregister-token')
|
||||
@ApiOperation({ summary: '注销设备推送令牌' })
|
||||
@ApiResponse({ status: 200, description: '注销成功', type: UnregisterTokenResponseDto })
|
||||
async unregisterToken(
|
||||
@CurrentUser() user: AccessTokenPayload,
|
||||
@Body() body: { deviceToken: string },
|
||||
): Promise<UnregisterTokenResponseDto> {
|
||||
return this.pushNotificationsService.unregisterToken(user.sub, body.deviceToken);
|
||||
}
|
||||
|
||||
@Post('send')
|
||||
@ApiOperation({ summary: '发送推送通知' })
|
||||
@ApiResponse({ status: 200, description: '发送成功', type: PushResponseDto })
|
||||
async sendNotification(
|
||||
@Body() sendNotificationDto: SendPushNotificationDto,
|
||||
): Promise<PushResponseDto> {
|
||||
return this.pushNotificationsService.sendNotification(sendNotificationDto);
|
||||
}
|
||||
|
||||
@Post('send-by-template')
|
||||
@ApiOperation({ summary: '使用模板发送推送' })
|
||||
@ApiResponse({ status: 200, description: '发送成功', type: PushResponseDto })
|
||||
async sendNotificationByTemplate(
|
||||
@Body() sendByTemplateDto: SendPushByTemplateDto,
|
||||
): Promise<PushResponseDto> {
|
||||
return this.pushNotificationsService.sendNotificationByTemplate(sendByTemplateDto);
|
||||
}
|
||||
|
||||
@Post('send-batch')
|
||||
@ApiOperation({ summary: '批量发送推送' })
|
||||
@ApiResponse({ status: 200, description: '发送成功', type: BatchPushResponseDto })
|
||||
async sendBatchNotifications(
|
||||
@Body() sendBatchDto: SendPushNotificationDto,
|
||||
): Promise<BatchPushResponseDto> {
|
||||
return this.pushNotificationsService.sendBatchNotifications(sendBatchDto);
|
||||
}
|
||||
|
||||
@Post('send-silent')
|
||||
@ApiOperation({ summary: '发送静默推送' })
|
||||
@ApiResponse({ status: 200, description: '发送成功', type: PushResponseDto })
|
||||
async sendSilentNotification(
|
||||
@Body() body: { userId: string; payload: any },
|
||||
): Promise<PushResponseDto> {
|
||||
return this.pushNotificationsService.sendSilentNotification(body.userId, body.payload);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user