using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using FutureMailAPI.Services; using FutureMailAPI.DTOs; using System.Security.Claims; namespace FutureMailAPI.Controllers { [ApiController] [Route("api/v1/notification")] public class NotificationController : BaseController { private readonly INotificationService _notificationService; private readonly ILogger _logger; public NotificationController(INotificationService notificationService, ILogger logger) { _notificationService = notificationService; _logger = logger; } /// /// 注册设备 /// /// 设备注册请求 /// 注册结果 [HttpPost("device")] public async Task RegisterDevice([FromBody] NotificationDeviceRequestDto request) { try { var userId = GetCurrentUserId(); if (userId <= 0) { return Unauthorized(ApiResponse.ErrorResult("无效的用户令牌")); } if (string.IsNullOrEmpty(request.DeviceType) || string.IsNullOrEmpty(request.DeviceToken)) { return BadRequest(ApiResponse.ErrorResult("设备类型和设备令牌不能为空")); } var result = await _notificationService.RegisterDeviceAsync(userId, request); if (result.Success) { return Ok(result); } return BadRequest(result); } catch (Exception ex) { _logger.LogError(ex, "注册设备时发生错误"); return StatusCode(500, ApiResponse.ErrorResult("服务器内部错误")); } } /// /// 获取通知设置 /// /// 通知设置 [HttpGet("settings")] public async Task GetNotificationSettings() { try { var userId = GetCurrentUserId(); if (userId <= 0) { return Unauthorized(ApiResponse.ErrorResult("无效的用户令牌")); } var result = await _notificationService.GetNotificationSettingsAsync(userId); if (result.Success) { return Ok(result); } return BadRequest(result); } catch (Exception ex) { _logger.LogError(ex, "获取通知设置时发生错误"); return StatusCode(500, ApiResponse.ErrorResult("服务器内部错误")); } } } }