#16 moving notification functionality to a new service
This commit is contained in:
parent
d38eae4f83
commit
661b26f043
@ -1822,7 +1822,7 @@ namespace RMuseum.Controllers
|
||||
public async Task<IActionResult> GetUserNotifications()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<RUserNotification[]> res = await _artifactService.GetUserNotifications(loggedOnUserId);
|
||||
RServiceResult<RUserNotification[]> res = await _notificationService.GetUserNotifications(loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
@ -1836,7 +1836,7 @@ namespace RMuseum.Controllers
|
||||
public async Task<IActionResult> GetUnreadUserNotificationsCount()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<int> res = await _artifactService.GetUnreadUserNotificationsCount(loggedOnUserId);
|
||||
RServiceResult<int> res = await _notificationService.GetUnreadUserNotificationsCount(loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
@ -1854,7 +1854,7 @@ namespace RMuseum.Controllers
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> SwitchNotificationStatus(Guid notificationId)
|
||||
{
|
||||
RServiceResult<RUserNotification> res = await _artifactService.SwitchNotificationStatus(notificationId);
|
||||
RServiceResult<RUserNotification> res = await _notificationService.SwitchNotificationStatus(notificationId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
@ -1872,7 +1872,7 @@ namespace RMuseum.Controllers
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> DeleteNotification(Guid notificationId)
|
||||
{
|
||||
RServiceResult<bool> res = await _artifactService.DeleteNotification(notificationId);
|
||||
RServiceResult<bool> res = await _notificationService.DeleteNotification(notificationId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
@ -1886,12 +1886,14 @@ namespace RMuseum.Controllers
|
||||
/// <param name="userPermissionChecker"></param>
|
||||
/// <param name="memoryCache"></param>
|
||||
/// <param name="captchaService"></param>
|
||||
public ArtifactController(IArtifactService artifactService, IUserPermissionChecker userPermissionChecker, IMemoryCache memoryCache, ICaptchaService captchaService)
|
||||
/// <param name="notificationService"></param>
|
||||
public ArtifactController(IArtifactService artifactService, IUserPermissionChecker userPermissionChecker, IMemoryCache memoryCache, ICaptchaService captchaService, IRNotificationService notificationService)
|
||||
{
|
||||
_artifactService = artifactService;
|
||||
_userPermissionChecker = userPermissionChecker;
|
||||
_memoryCache = memoryCache;
|
||||
_captchaService = captchaService;
|
||||
_notificationService = notificationService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -1913,5 +1915,10 @@ namespace RMuseum.Controllers
|
||||
/// Captcha service
|
||||
/// </summary>
|
||||
protected readonly ICaptchaService _captchaService;
|
||||
|
||||
/// <summary>
|
||||
/// Notification Service
|
||||
/// </summary>
|
||||
protected readonly IRNotificationService _notificationService;
|
||||
}
|
||||
}
|
||||
|
||||
@ -590,7 +590,7 @@
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.ArtifactController.#ctor(RMuseum.Services.IArtifactService,RSecurityBackend.Services.IUserPermissionChecker,Microsoft.Extensions.Caching.Memory.IMemoryCache,RSecurityBackend.Services.ICaptchaService)">
|
||||
<member name="M:RMuseum.Controllers.ArtifactController.#ctor(RMuseum.Services.IArtifactService,RSecurityBackend.Services.IUserPermissionChecker,Microsoft.Extensions.Caching.Memory.IMemoryCache,RSecurityBackend.Services.ICaptchaService,RMuseum.Services.IRNotificationService)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -599,6 +599,7 @@
|
||||
<param name="userPermissionChecker"></param>
|
||||
<param name="memoryCache"></param>
|
||||
<param name="captchaService"></param>
|
||||
<param name="notificationService"></param>
|
||||
</member>
|
||||
<member name="F:RMuseum.Controllers.ArtifactController._artifactService">
|
||||
<summary>
|
||||
@ -620,6 +621,11 @@
|
||||
Captcha service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Controllers.ArtifactController._notificationService">
|
||||
<summary>
|
||||
Notification Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.AudioNarrationController.Get(RSecurityBackend.Models.Generic.PagingParameterModel,System.Boolean,RMuseum.Models.GanjoorAudio.AudioReviewStatus)">
|
||||
<summary>
|
||||
Gets audio narrations, user must have narration::moderate permission to be able to see all users narrations
|
||||
@ -3577,43 +3583,6 @@
|
||||
<param name="linkId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IArtifactService.PushNotification(System.Guid,System.String,System.String)">
|
||||
<summary>
|
||||
Add Notification
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="subject"></param>
|
||||
<param name="htmlText"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IArtifactService.GetUserNotifications(System.Guid)">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IArtifactService.GetUnreadUserNotificationsCount(System.Guid)">
|
||||
<summary>
|
||||
Get Unread User Notifications Count
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IArtifactService.SwitchNotificationStatus(System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IArtifactService.DeleteNotification(System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IArtifactService.RemoveArtifactHavingNoNoteAndBookmarks(System.Guid,System.Boolean)">
|
||||
<summary>
|
||||
an incomplete prototype for removing artifacts
|
||||
@ -4369,43 +4338,6 @@
|
||||
<param name="linkId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.PushNotification(System.Guid,System.String,System.String)">
|
||||
<summary>
|
||||
Add Notification
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="subject"></param>
|
||||
<param name="htmlText"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.SwitchNotificationStatus(System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.DeleteNotification(System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.GetUserNotifications(System.Guid)">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.GetUnreadUserNotificationsCount(System.Guid)">
|
||||
<summary>
|
||||
Get Unread User Notifications Count
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Services.Implementation.ArtifactService._context">
|
||||
<summary>
|
||||
Database Contetxt
|
||||
@ -4431,7 +4363,12 @@
|
||||
User Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RMuseum.Services.IPictureFileService,RMuseum.Services.IBackgroundTaskQueue,RSecurityBackend.Services.IAppUserService)">
|
||||
<member name="F:RMuseum.Services.Implementation.ArtifactService._notificationService">
|
||||
<summary>
|
||||
Messaging service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RMuseum.Services.IPictureFileService,RMuseum.Services.IBackgroundTaskQueue,RSecurityBackend.Services.IAppUserService,RMuseum.Services.IRNotificationService)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -4440,6 +4377,7 @@
|
||||
<param name="pictureFileService"></param>
|
||||
<param name="backgroundTaskQueue"></param>
|
||||
<param name="userService"></param>
|
||||
<param name="notificationService"></param>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.Implementation.AudioNarrationService">
|
||||
<summary>
|
||||
@ -4749,6 +4687,53 @@
|
||||
<param name="configuration"></param>
|
||||
<param name="simpleImageStorage"></param>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.Implementation.RNotificationService">
|
||||
<summary>
|
||||
Internal messaging system implementation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RNotificationService.PushNotification(System.Guid,System.String,System.String)">
|
||||
<summary>
|
||||
Add Notification
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="subject"></param>
|
||||
<param name="htmlText"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RNotificationService.SwitchNotificationStatus(System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RNotificationService.DeleteNotification(System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RNotificationService.GetUserNotifications(System.Guid)">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RNotificationService.GetUnreadUserNotificationsCount(System.Guid)">
|
||||
<summary>
|
||||
Get Unread User Notifications Count
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Services.Implementation.RNotificationService._context">
|
||||
<summary>
|
||||
Database Contetxt
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.Implementation.RoleService">
|
||||
<summary>
|
||||
Role Service Implementation
|
||||
@ -4846,6 +4831,48 @@
|
||||
Image Storage Path
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.IRNotificationService">
|
||||
<summary>
|
||||
Internal messaging system interface
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRNotificationService.PushNotification(System.Guid,System.String,System.String)">
|
||||
<summary>
|
||||
Add Notification
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="subject"></param>
|
||||
<param name="htmlText"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRNotificationService.GetUserNotifications(System.Guid)">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRNotificationService.GetUnreadUserNotificationsCount(System.Guid)">
|
||||
<summary>
|
||||
Get Unread User Notifications Count
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRNotificationService.SwitchNotificationStatus(System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRNotificationService.DeleteNotification(System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RMuseum.Swashbuckle.SecurityRequirementsOperationFilter">
|
||||
<summary>
|
||||
//https://mattfrear.com/2018/07/21/add-an-authorization-header-to-your-swagger-ui-with-swashbuckle-revisited/
|
||||
|
||||
@ -498,44 +498,6 @@ namespace RMuseum.Services
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<bool>> SynchronizeSuggestedPinterestLink(Guid linkId);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add Notification
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="subject"></param>
|
||||
/// <param name="htmlText"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<RUserNotification>> PushNotification(Guid userId, string subject, string htmlText);
|
||||
|
||||
/// <summary>
|
||||
/// Get User Notifications
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<RUserNotification[]>> GetUserNotifications(Guid userId);
|
||||
|
||||
/// <summary>
|
||||
/// Get Unread User Notifications Count
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<int>> GetUnreadUserNotificationsCount(Guid userId);
|
||||
|
||||
/// <summary>
|
||||
/// Switch Notification Status
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns>updated notification object</returns>
|
||||
Task<RServiceResult<RUserNotification>> SwitchNotificationStatus(Guid notificationId);
|
||||
|
||||
/// <summary>
|
||||
/// Delete Notification
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<bool>> DeleteNotification(Guid notificationId);
|
||||
|
||||
/// <summary>
|
||||
/// an incomplete prototype for removing artifacts
|
||||
/// </summary>
|
||||
|
||||
50
RMuseum/Services/IRNotificationService.cs
Normal file
50
RMuseum/Services/IRNotificationService.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RMuseum.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// Internal messaging system interface
|
||||
/// </summary>
|
||||
public interface IRNotificationService
|
||||
{
|
||||
/// <summary>
|
||||
/// Add Notification
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="subject"></param>
|
||||
/// <param name="htmlText"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<RUserNotification>> PushNotification(Guid userId, string subject, string htmlText);
|
||||
|
||||
/// <summary>
|
||||
/// Get User Notifications
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<RUserNotification[]>> GetUserNotifications(Guid userId);
|
||||
|
||||
/// <summary>
|
||||
/// Get Unread User Notifications Count
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<int>> GetUnreadUserNotificationsCount(Guid userId);
|
||||
|
||||
/// <summary>
|
||||
/// Switch Notification Status
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns>updated notification object</returns>
|
||||
Task<RServiceResult<RUserNotification>> SwitchNotificationStatus(Guid notificationId);
|
||||
|
||||
/// <summary>
|
||||
/// Delete Notification
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<bool>> DeleteNotification(Guid notificationId);
|
||||
}
|
||||
}
|
||||
@ -1965,7 +1965,7 @@ namespace RMuseum.Services.Implementation
|
||||
if(referenceNote.RAppUserId != userId)
|
||||
{
|
||||
RArtifactMasterRecord artificat = await _context.Artifacts.Where(a => a.Id == artifactId).SingleOrDefaultAsync();
|
||||
await PushNotification
|
||||
await _notificationService.PushNotification
|
||||
(
|
||||
referenceNote.RAppUserId,
|
||||
$"پاسخگویی {userInfo.Result.FirstName} {userInfo.Result.SureName} به یادداشت شما دربارهٔ {artificat.Name}",
|
||||
@ -2032,7 +2032,7 @@ namespace RMuseum.Services.Implementation
|
||||
{
|
||||
RArtifactItemRecord item = await _context.Items.Where(a => a.Id == itemId).SingleOrDefaultAsync();
|
||||
RArtifactMasterRecord artificat = await _context.Artifacts.Where(a => a.Id == item.RArtifactMasterRecordId).SingleOrDefaultAsync();
|
||||
await PushNotification
|
||||
await _notificationService.PushNotification
|
||||
(
|
||||
referenceNote.RAppUserId,
|
||||
$"پاسخگویی {userInfo.Result.FirstName} {userInfo.Result.SureName} به یادداشت شما دربارهٔ {artificat.Name} « {item.Name}",
|
||||
@ -3050,124 +3050,7 @@ namespace RMuseum.Services.Implementation
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add Notification
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="subject"></param>
|
||||
/// <param name="htmlText"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<RUserNotification>> PushNotification(Guid userId, string subject, string htmlText)
|
||||
{
|
||||
try
|
||||
{
|
||||
RUserNotification notification =
|
||||
new RUserNotification()
|
||||
{
|
||||
UserId = userId,
|
||||
DateTime = DateTime.Now,
|
||||
Status = NotificationStatus.Unread,
|
||||
Subject = subject,
|
||||
HtmlText = htmlText
|
||||
};
|
||||
_context.Notifications.Add(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
return new RServiceResult<RUserNotification>(notification);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<RUserNotification>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Switch Notification Status
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns>updated notification object</returns>
|
||||
public async Task<RServiceResult<RUserNotification>> SwitchNotificationStatus(Guid notificationId)
|
||||
{
|
||||
try
|
||||
{
|
||||
RUserNotification notification =
|
||||
await _context.Notifications.Where(n => n.Id == notificationId).SingleAsync();
|
||||
notification.Status = notification.Status == NotificationStatus.Unread ? NotificationStatus.Read : NotificationStatus.Unread;
|
||||
_context.Notifications.Update(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
return new RServiceResult<RUserNotification>(notification);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<RUserNotification>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Delete Notification
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<bool>> DeleteNotification(Guid notificationId)
|
||||
{
|
||||
try
|
||||
{
|
||||
RUserNotification notification =
|
||||
await _context.Notifications.Where(n => n.Id == notificationId).SingleAsync();
|
||||
_context.Notifications.Remove(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
return new RServiceResult<bool>(true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<bool>(false, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get User Notifications
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<RUserNotification[]>> GetUserNotifications(Guid userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new RServiceResult<RUserNotification[]>
|
||||
(
|
||||
await _context.Notifications
|
||||
.Where(n => n.UserId == userId)
|
||||
.OrderByDescending(n => n.DateTime)
|
||||
.ToArrayAsync()
|
||||
);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<RUserNotification[]>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Unread User Notifications Count
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<int>> GetUnreadUserNotificationsCount(Guid userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new RServiceResult<int>
|
||||
(
|
||||
await _context.Notifications
|
||||
.Where(n => n.UserId == userId && n.Status == NotificationStatus.Unread)
|
||||
.CountAsync()
|
||||
);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<int>(0, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
@ -3196,6 +3079,11 @@ namespace RMuseum.Services.Implementation
|
||||
/// </summary>
|
||||
protected readonly IAppUserService _userService;
|
||||
|
||||
/// <summary>
|
||||
/// Messaging service
|
||||
/// </summary>
|
||||
protected readonly IRNotificationService _notificationService;
|
||||
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
@ -3204,13 +3092,15 @@ namespace RMuseum.Services.Implementation
|
||||
/// <param name="pictureFileService"></param>
|
||||
/// <param name="backgroundTaskQueue"></param>
|
||||
/// <param name="userService"></param>
|
||||
public ArtifactService(RMuseumDbContext context, IConfiguration configuration, IPictureFileService pictureFileService, IBackgroundTaskQueue backgroundTaskQueue, IAppUserService userService)
|
||||
/// <param name="notificationService"></param>
|
||||
public ArtifactService(RMuseumDbContext context, IConfiguration configuration, IPictureFileService pictureFileService, IBackgroundTaskQueue backgroundTaskQueue, IAppUserService userService, IRNotificationService notificationService)
|
||||
{
|
||||
_context = context;
|
||||
_pictureFileService = pictureFileService;
|
||||
Configuration = configuration;
|
||||
_backgroundTaskQueue = backgroundTaskQueue;
|
||||
_userService = userService;
|
||||
_notificationService = notificationService;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
148
RMuseum/Services/Implementation/RNotificationService.cs
Normal file
148
RMuseum/Services/Implementation/RNotificationService.cs
Normal file
@ -0,0 +1,148 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Internal messaging system implementation
|
||||
/// </summary>
|
||||
public class RNotificationService : IRNotificationService
|
||||
{
|
||||
/// <summary>
|
||||
/// Add Notification
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="subject"></param>
|
||||
/// <param name="htmlText"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<RUserNotification>> PushNotification(Guid userId, string subject, string htmlText)
|
||||
{
|
||||
try
|
||||
{
|
||||
RUserNotification notification =
|
||||
new RUserNotification()
|
||||
{
|
||||
UserId = userId,
|
||||
DateTime = DateTime.Now,
|
||||
Status = NotificationStatus.Unread,
|
||||
Subject = subject,
|
||||
HtmlText = htmlText
|
||||
};
|
||||
_context.Notifications.Add(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
return new RServiceResult<RUserNotification>(notification);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<RUserNotification>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Switch Notification Status
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns>updated notification object</returns>
|
||||
public async Task<RServiceResult<RUserNotification>> SwitchNotificationStatus(Guid notificationId)
|
||||
{
|
||||
try
|
||||
{
|
||||
RUserNotification notification =
|
||||
await _context.Notifications.Where(n => n.Id == notificationId).SingleAsync();
|
||||
notification.Status = notification.Status == NotificationStatus.Unread ? NotificationStatus.Read : NotificationStatus.Unread;
|
||||
_context.Notifications.Update(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
return new RServiceResult<RUserNotification>(notification);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<RUserNotification>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Delete Notification
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<bool>> DeleteNotification(Guid notificationId)
|
||||
{
|
||||
try
|
||||
{
|
||||
RUserNotification notification =
|
||||
await _context.Notifications.Where(n => n.Id == notificationId).SingleAsync();
|
||||
_context.Notifications.Remove(notification);
|
||||
await _context.SaveChangesAsync();
|
||||
return new RServiceResult<bool>(true);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<bool>(false, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get User Notifications
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<RUserNotification[]>> GetUserNotifications(Guid userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new RServiceResult<RUserNotification[]>
|
||||
(
|
||||
await _context.Notifications
|
||||
.Where(n => n.UserId == userId)
|
||||
.OrderByDescending(n => n.DateTime)
|
||||
.ToArrayAsync()
|
||||
);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<RUserNotification[]>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Unread User Notifications Count
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<int>> GetUnreadUserNotificationsCount(Guid userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new RServiceResult<int>
|
||||
(
|
||||
await _context.Notifications
|
||||
.Where(n => n.UserId == userId && n.Status == NotificationStatus.Unread)
|
||||
.CountAsync()
|
||||
);
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<int>(0, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Database Contetxt
|
||||
/// </summary>
|
||||
protected readonly RMuseumDbContext _context;
|
||||
|
||||
|
||||
public RNotificationService(RMuseumDbContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -245,6 +245,9 @@ namespace RMuseum
|
||||
//picture file service
|
||||
services.AddTransient<IPictureFileService, PictureFileService>();
|
||||
|
||||
//messaging service
|
||||
services.AddTransient<IRNotificationService, RNotificationService>();
|
||||
|
||||
//artifact service
|
||||
services.AddTransient<IArtifactService, ArtifactService>();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user