notification

This commit is contained in:
2025-12-08 22:04:01 +03:30
parent 060570f847
commit 9c93feee68
19 changed files with 2603 additions and 88 deletions
@@ -0,0 +1,41 @@
import { IsString, IsNotEmpty, IsOptional, IsArray, IsObject } from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
export class CreateNotificationDto {
@ApiProperty({ description: 'Notification title' })
@IsString()
@IsNotEmpty()
title: string;
@ApiProperty({ description: 'Notification message' })
@IsString()
@IsNotEmpty()
message: string;
@ApiProperty({ description: 'Notification type' })
@IsString()
@IsNotEmpty()
type: string;
@ApiPropertyOptional({ description: 'User ID' })
@IsString()
@IsOptional()
userId?: string;
@ApiPropertyOptional({ description: 'Phone number for SMS' })
@IsString()
@IsOptional()
phoneNumber?: string;
@ApiPropertyOptional({ description: 'Push notification tokens', type: [String] })
@IsArray()
@IsString({ each: true })
@IsOptional()
pushTokens?: string[];
@ApiPropertyOptional({ description: 'Additional data' })
@IsObject()
@IsOptional()
data?: Record<string, any>;
}
@@ -0,0 +1,35 @@
import { IsString, IsNotEmpty, IsBoolean, IsObject, IsOptional, ValidateNested } from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { Type } from 'class-transformer';
class ChannelsDto {
@ApiPropertyOptional({ description: 'Enable SMS channel' })
@IsBoolean()
@IsOptional()
sms?: boolean;
@ApiPropertyOptional({ description: 'Enable push notification channel' })
@IsBoolean()
@IsOptional()
push?: boolean;
}
export class CreateNotificationPreferenceDto {
@ApiProperty({ description: 'Notification type (e.g., ORDER_CONFIRMED, PAYMENT_FAILED)' })
@IsString()
@IsNotEmpty()
notificationType: string;
@ApiProperty({ description: 'Notification channels configuration', type: ChannelsDto })
@ValidateNested()
@Type(() => ChannelsDto)
@IsObject()
@IsNotEmpty()
channels: ChannelsDto;
@ApiPropertyOptional({ description: 'Whether the preference is enabled', default: true })
@IsBoolean()
@IsOptional()
enabled?: boolean;
}
@@ -0,0 +1,38 @@
import { IsString, IsNotEmpty, IsOptional, IsObject } from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
export class SendNotificationDto {
@ApiProperty({ description: 'Restaurant ID (ULID)' })
@IsString()
@IsNotEmpty()
restaurantId: string;
@ApiPropertyOptional({ description: 'User ID (ULID)' })
@IsString()
@IsOptional()
userId?: string;
@ApiProperty({ description: 'Notification type (e.g., ORDER_CONFIRMED, PAYMENT_FAILED)' })
@IsString()
@IsNotEmpty()
notificationType: string;
@ApiProperty({ description: 'Notification payload' })
@IsObject()
@IsNotEmpty()
payload: {
title?: string;
message: string;
body?: string;
phoneNumber?: string;
pushToken?: string;
data?: Record<string, any>;
templateId?: string;
parameters?: Array<{ name: string; value: string }>;
};
@ApiPropertyOptional({ description: 'Idempotency key to prevent duplicates' })
@IsString()
@IsOptional()
idempotencyKey?: string;
}