104 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 
								 | 
							
								using FutureMailAPI.DTOs;
							 | 
						||
| 
								 | 
							
								using FutureMailAPI.Models;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace FutureMailAPI.Services
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    public class NotificationService : INotificationService
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        private readonly ILogger<NotificationService> _logger;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public NotificationService(ILogger<NotificationService> logger)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger = logger;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<NotificationDeviceResponseDto>> RegisterDeviceAsync(int userId, NotificationDeviceRequestDto request)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Registering device for user {userId}");
							 | 
						||
| 
								 | 
							
								            var response = new NotificationDeviceResponseDto
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                DeviceId = "device_" + Guid.NewGuid().ToString("N"),
							 | 
						||
| 
								 | 
							
								                DeviceType = request.DeviceType,
							 | 
						||
| 
								 | 
							
								                IsActive = true,
							 | 
						||
| 
								 | 
							
								                RegisteredAt = DateTime.UtcNow
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<NotificationDeviceResponseDto>.SuccessResult(response));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<bool>> UnregisterDeviceAsync(int userId, string deviceId)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Unregistering device {deviceId} for user {userId}");
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<bool>.SuccessResult(true));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<NotificationSettingsDto>> GetNotificationSettingsAsync(int userId)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Getting notification settings for user {userId}");
							 | 
						||
| 
								 | 
							
								            var settings = new NotificationSettingsDto
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                EmailDelivery = true,
							 | 
						||
| 
								 | 
							
								                PushNotification = true,
							 | 
						||
| 
								 | 
							
								                InAppNotification = true,
							 | 
						||
| 
								 | 
							
								                DeliveryReminder = true,
							 | 
						||
| 
								 | 
							
								                ReceivedNotification = true,
							 | 
						||
| 
								 | 
							
								                SystemUpdates = false,
							 | 
						||
| 
								 | 
							
								                QuietHoursStart = "22:00",
							 | 
						||
| 
								 | 
							
								                QuietHoursEnd = "08:00",
							 | 
						||
| 
								 | 
							
								                EnableQuietHours = false
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<NotificationSettingsDto>.SuccessResult(settings));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<bool>> UpdateNotificationSettingsAsync(int userId, NotificationSettingsDto settings)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Updating notification settings for user {userId}");
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<bool>.SuccessResult(true));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<NotificationListResponseDto>> GetNotificationsAsync(int userId, NotificationListQueryDto query)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Getting notifications for user {userId}");
							 | 
						||
| 
								 | 
							
								            var notifications = new List<NotificationMessageDto>
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                new NotificationMessageDto
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    Id = "notif_1",
							 | 
						||
| 
								 | 
							
								                    UserId = userId,
							 | 
						||
| 
								 | 
							
								                    Title = "Test Notification",
							 | 
						||
| 
								 | 
							
								                    Body = "This is a test notification",
							 | 
						||
| 
								 | 
							
								                    Type = "Info",
							 | 
						||
| 
								 | 
							
								                    RelatedEntityId = "mail_1",
							 | 
						||
| 
								 | 
							
								                    IsRead = false,
							 | 
						||
| 
								 | 
							
								                    CreatedAt = DateTime.UtcNow.AddDays(-1)
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								            var response = new NotificationListResponseDto
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                Notifications = notifications,
							 | 
						||
| 
								 | 
							
								                Total = notifications.Count,
							 | 
						||
| 
								 | 
							
								                UnreadCount = 1,
							 | 
						||
| 
								 | 
							
								                Page = query.Page,
							 | 
						||
| 
								 | 
							
								                Size = query.Size
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<NotificationListResponseDto>.SuccessResult(response));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<bool>> MarkNotificationAsReadAsync(int userId, string notificationId)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Marking notification {notificationId} as read for user {userId}");
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<bool>.SuccessResult(true));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<bool>> MarkAllNotificationsAsReadAsync(int userId)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Marking all notifications as read for user {userId}");
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<bool>.SuccessResult(true));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Task<ApiResponse<bool>> SendNotificationAsync(int userId, NotificationMessageDto notification)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            _logger.LogInformation($"Sending notification to user {userId}");
							 | 
						||
| 
								 | 
							
								            return Task.FromResult(ApiResponse<bool>.SuccessResult(true));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |