Spaces:
Sleeping
Sleeping
File size: 3,876 Bytes
4433399 ccc2569 313d29f ccc2569 313d29f ccc2569 4433399 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | using LibraryManagement.Shared.Models;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Backend.Features.Notification;
[ApiController]
[Route("api/notifications")]
public class NotificationsController : ControllerBase
{
private readonly INotificationService _notificationService;
public NotificationsController(INotificationService notificationService)
{
_notificationService = notificationService;
}
[HttpGet]
public async Task<IActionResult> GetUserNotifications()
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrEmpty(userIdStr) || !Guid.TryParse(userIdStr, out Guid userId))
{
return Unauthorized();
}
var notifications = await _notificationService.GetUserNotificationsAsync(userId);
return Ok(notifications);
}
[HttpGet("unread-count")]
public async Task<IActionResult> GetUnreadCount()
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrEmpty(userIdStr) || !Guid.TryParse(userIdStr, out Guid userId))
{
return Unauthorized();
}
var count = await _notificationService.GetUnreadCountAsync(userId);
return Ok(count);
}
[HttpPost("mark-read")]
public async Task<IActionResult> MarkAllAsRead()
{
var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrEmpty(userIdStr) || !Guid.TryParse(userIdStr, out Guid userId))
{
return Unauthorized();
}
await _notificationService.MarkAllAsReadAsync(userId);
return Ok();
}
[HttpPost("mark-read/{id}")]
public async Task<IActionResult> MarkAsRead(int id)
{
var success = await _notificationService.MarkAsReadAsync(id);
if (!success) return NotFound();
return Ok();
}
[HttpPost("subscription-expiry")]
public async Task<IActionResult> SendSubscriptionExpiryNotification([FromBody] SubscriptionExpiryNotificationRequest request)
{
string title = "Subscription Expiry Reminder";
string body = $"Hello {request.FullName}, your library subscription is expiring in {request.DaysRemaining} days. Please renew it to continue enjoying our services!";
bool success = await _notificationService.SendAndSaveNotificationAsync(
request.UserId,
request.FcmToken,
title,
body,
"Warning",
"/Membership",
"Renew Now");
if (success)
return Ok(new NotificationResponse { Success = true, Message = "Notification sent and saved successfully" });
return BadRequest(new NotificationResponse { Success = false, Message = "Failed to process notification" });
}
[HttpPost("return-reminder")]
public async Task<IActionResult> SendReturnReminder([FromBody] ReturnReminderNotificationRequest request)
{
string title = "Book Return Reminder";
string body = $"Hello {request.FullName}, the book '{request.BookTitle}' is due for return on {request.DueDate:MMM dd, yyyy}. Please make sure to return it on time!";
bool success = await _notificationService.SendAndSaveNotificationAsync(
request.UserId,
request.FcmToken,
title,
body,
"Warning",
"/Borrowings",
"View Loans");
if (success)
return Ok(new NotificationResponse { Success = true, Message = "Notification sent and saved successfully" });
return BadRequest(new NotificationResponse { Success = false, Message = "Failed to process notification" });
}
}
|