moving some reusable and basic services to RSecuirityBackend and some code improvements
This commit is contained in:
parent
7438c7129f
commit
df53fa3042
@ -1,154 +1,22 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using RMuseum.Models.Notification;
|
||||
using RMuseum.Models.Notification.ViewModels;
|
||||
using RMuseum.Services;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using RSecurityBackend.Controllers;
|
||||
using RSecurityBackend.Services;
|
||||
|
||||
namespace RMuseum.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// Notifications controller
|
||||
/// </summary>
|
||||
[Produces("application/json")]
|
||||
[Route("api/notifications")]
|
||||
public class NoificationController : Controller
|
||||
public class NoificationController : NoificationControllerBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Get User Notifications
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(RUserNotificationViewModel[]))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> GetUserNotifications()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<RUserNotificationViewModel[]> res = await _notificationService.GetUserNotifications(loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("unread/count")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(int))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> GetUnreadUserNotificationsCount()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<int> res = await _notificationService.GetUnreadUserNotificationsCount(loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Switch Notification Status
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[Route("{notificationId}")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(RUserNotificationViewModel))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> SwitchNotificationStatus(Guid notificationId)
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<RUserNotificationViewModel> res = await _notificationService.SwitchNotificationStatus(notificationId, loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set All User Notifications Status Read
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[Route("allread")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> SetAllNotificationsStatusRead()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.SetAllNotificationsStatus(loggedOnUserId, NotificationStatus.Read);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set All User Notifications Status Unread
|
||||
/// </summary>
|
||||
[HttpPut]
|
||||
[Route("allunread")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> SetAllNotificationsStatusUnread()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.SetAllNotificationsStatus(loggedOnUserId, NotificationStatus.Unread);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete Notification
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpDelete]
|
||||
[Route("{notificationId}")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> DeleteNotification(Guid notificationId)
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.DeleteNotification(notificationId, loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete All Read Notifications
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpDelete]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> DeleteAllReadNotification()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.DeleteNotification(Guid.Empty, loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notification Service
|
||||
/// </summary>
|
||||
protected readonly IRNotificationService _notificationService;
|
||||
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
/// <param name="notificationService"></param>
|
||||
public NoificationController(IRNotificationService notificationService)
|
||||
public NoificationController(IRNotificationService notificationService) : base(notificationService)
|
||||
{
|
||||
_notificationService = notificationService;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,6 @@ using RMuseum.Models.UploadSession;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.DbContext;
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using System;
|
||||
@ -139,10 +138,7 @@ namespace RMuseum.DbContext
|
||||
/// </summary>
|
||||
public DbSet<GanjoorLink> GanjoorLinks { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Notifications
|
||||
/// </summary>
|
||||
public DbSet<RUserNotification> Notifications { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Pinterest Links
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
namespace RMuseum.Models.Notification
|
||||
{
|
||||
/// <summary>
|
||||
/// Notifaction Status
|
||||
/// </summary>
|
||||
public enum NotificationStatus
|
||||
{
|
||||
Unread = 0,
|
||||
Read = 1,
|
||||
Archived = 2,
|
||||
Deleted = 3
|
||||
}
|
||||
}
|
||||
@ -572,7 +572,7 @@
|
||||
<param name="linkId"></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,RMuseum.Services.IRNotificationService)">
|
||||
<member name="M:RMuseum.Controllers.ArtifactController.#ctor(RMuseum.Services.IArtifactService,RSecurityBackend.Services.IUserPermissionChecker,Microsoft.Extensions.Caching.Memory.IMemoryCache,RSecurityBackend.Services.ICaptchaService,RSecurityBackend.Services.IRNotificationService)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -781,49 +781,12 @@
|
||||
Artifact Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.NoificationController.GetUserNotifications">
|
||||
<member name="T:RMuseum.Controllers.NoificationController">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.NoificationController.SwitchNotificationStatus(System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.NoificationController.SetAllNotificationsStatusRead">
|
||||
<summary>
|
||||
Set All User Notifications Status Read
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.NoificationController.SetAllNotificationsStatusUnread">
|
||||
<summary>
|
||||
Set All User Notifications Status Unread
|
||||
Notifications controller
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.NoificationController.DeleteNotification(System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.NoificationController.DeleteAllReadNotification">
|
||||
<summary>
|
||||
Delete All Read Notifications
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Controllers.NoificationController._notificationService">
|
||||
<summary>
|
||||
Notification Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.NoificationController.#ctor(RMuseum.Services.IRNotificationService)">
|
||||
<member name="M:RMuseum.Controllers.NoificationController.#ctor(RSecurityBackend.Services.IRNotificationService)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -1161,11 +1124,6 @@
|
||||
Ganjoor Links
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.Notifications">
|
||||
<summary>
|
||||
Notifications
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.PinterestLinks">
|
||||
<summary>
|
||||
Pinterest Links
|
||||
@ -4765,87 +4723,6 @@
|
||||
It os set only in certain cases
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Notification.NotificationStatus">
|
||||
<summary>
|
||||
Notifaction Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Notification.RUserNotification">
|
||||
<summary>
|
||||
User Notification
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.RUserNotification.Id">
|
||||
<summary>
|
||||
Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.RUserNotification.UserId">
|
||||
<summary>
|
||||
User Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.RUserNotification.User">
|
||||
<summary>
|
||||
User
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.RUserNotification.DateTime">
|
||||
<summary>
|
||||
DateTime
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.RUserNotification.Status">
|
||||
<summary>
|
||||
Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.RUserNotification.Subject">
|
||||
<summary>
|
||||
Subject
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.RUserNotification.HtmlText">
|
||||
<summary>
|
||||
Text
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Notification.ViewModels.RUserNotificationViewModel">
|
||||
<summary>
|
||||
User Notification
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Models.Notification.ViewModels.RUserNotificationViewModel.#ctor(RMuseum.Models.Notification.RUserNotification)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
<param name="src"></param>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.ViewModels.RUserNotificationViewModel.Id">
|
||||
<summary>
|
||||
Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.ViewModels.RUserNotificationViewModel.DateTime">
|
||||
<summary>
|
||||
DateTime
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.ViewModels.RUserNotificationViewModel.Status">
|
||||
<summary>
|
||||
Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.ViewModels.RUserNotificationViewModel.Subject">
|
||||
<summary>
|
||||
Subject
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Notification.ViewModels.RUserNotificationViewModel.HtmlText">
|
||||
<summary>
|
||||
Text
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.UploadSession.UploadSession">
|
||||
<summary>
|
||||
Upload Session
|
||||
@ -6317,7 +6194,7 @@
|
||||
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)">
|
||||
<member name="M:RMuseum.Services.Implementation.ArtifactService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RMuseum.Services.IPictureFileService,RSecurityBackend.Services.IBackgroundTaskQueue,RSecurityBackend.Services.IAppUserService,RSecurityBackend.Services.IRNotificationService)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -6482,7 +6359,7 @@
|
||||
Background Task Queue Instance
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RMuseum.Services.IBackgroundTaskQueue)">
|
||||
<member name="M:RMuseum.Services.Implementation.GanjoorService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RSecurityBackend.Services.IBackgroundTaskQueue)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -6706,63 +6583,6 @@
|
||||
<param name="recitations"></param>
|
||||
<returns></returns>
|
||||
</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,System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<param name="userId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RNotificationService.SetAllNotificationsStatus(System.Guid,RMuseum.Models.Notification.NotificationStatus)">
|
||||
<summary>
|
||||
Set All User Notifications Status
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="status"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.RNotificationService.DeleteNotification(System.Guid,System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId">if empty deletes all read notifications</param>
|
||||
<param name="userId"></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
|
||||
@ -7018,7 +6838,7 @@
|
||||
Users service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RMuseum.Services.IBackgroundTaskQueue,RMuseum.Services.IRNotificationService,RSecurityBackend.Services.IAppUserService)">
|
||||
<member name="M:RMuseum.Services.Implementationa.RecitationService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RSecurityBackend.Services.IBackgroundTaskQueue,RSecurityBackend.Services.IRNotificationService,RSecurityBackend.Services.IAppUserService)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
@ -7308,58 +7128,6 @@
|
||||
Upload Enabled (temporary switch off/on for upload)
|
||||
</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,System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<param name="userId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRNotificationService.SetAllNotificationsStatus(System.Guid,RMuseum.Models.Notification.NotificationStatus)">
|
||||
<summary>
|
||||
Set All User Notifications Status
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="status"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IRNotificationService.DeleteNotification(System.Guid,System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId">if empty deletes all read notifications</param>
|
||||
<param name="userId"></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/
|
||||
|
||||
@ -8,7 +8,6 @@ using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
@ -1,16 +0,0 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RMuseum.Services
|
||||
{
|
||||
public interface IBackgroundTaskQueue
|
||||
{
|
||||
void QueueBackgroundWorkItem(Func<CancellationToken, Task> workItem);
|
||||
|
||||
Task<Func<CancellationToken, Task>> DequeueAsync(
|
||||
CancellationToken cancellationToken);
|
||||
|
||||
int Count { get; }
|
||||
}
|
||||
}
|
||||
@ -1,35 +1,12 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
@ -1,33 +1,16 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
|
||||
@ -12,7 +12,6 @@ using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
|
||||
@ -1,35 +1,16 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
@ -1,35 +1,17 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
@ -1,22 +1,8 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
@ -24,12 +10,9 @@ using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
@ -1,35 +1,16 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
@ -1,35 +1,13 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
@ -1,35 +1,17 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RMuseum.Models.Bookmark;
|
||||
using RMuseum.Models.Bookmark.ViewModels;
|
||||
using RMuseum.Models.GanjoorIntegration;
|
||||
using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Services.Implementation;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
{
|
||||
|
||||
@ -12,7 +12,6 @@ using RMuseum.Models.GanjoorIntegration.ViewModels;
|
||||
using RMuseum.Models.ImportJob;
|
||||
using RMuseum.Models.Note;
|
||||
using RMuseum.Models.Note.ViewModels;
|
||||
using RMuseum.Models.Notification;
|
||||
using RSecurityBackend.Models.Auth.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using RSecurityBackend.Services;
|
||||
|
||||
161
RSecurityBackend/Controllers/NoificationControllerBase.cs
Normal file
161
RSecurityBackend/Controllers/NoificationControllerBase.cs
Normal file
@ -0,0 +1,161 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using RSecurityBackend.Models.Notification;
|
||||
using RSecurityBackend.Models.Notification.ViewModels;
|
||||
using RSecurityBackend.Services;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace RSecurityBackend.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// Notifications controller
|
||||
/// </summary>
|
||||
[Produces("application/json")]
|
||||
[Route("api/notifications")]
|
||||
public abstract class NoificationControllerBase : Controller
|
||||
{
|
||||
/// <summary>
|
||||
/// Get User Notifications
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(RUserNotificationViewModel[]))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> GetUserNotifications()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<RUserNotificationViewModel[]> res = await _notificationService.GetUserNotifications(loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get unread user notifications count
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[Route("unread/count")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(int))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> GetUnreadUserNotificationsCount()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<int> res = await _notificationService.GetUnreadUserNotificationsCount(loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Switch Notification Status
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[Route("{notificationId}")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(RUserNotificationViewModel))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> SwitchNotificationStatus(Guid notificationId)
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<RUserNotificationViewModel> res = await _notificationService.SwitchNotificationStatus(notificationId, loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok(res.Result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set All User Notifications Status Read
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[Route("allread")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> SetAllNotificationsStatusRead()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.SetAllNotificationsStatus(loggedOnUserId, NotificationStatus.Read);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set All User Notifications Status Unread
|
||||
/// </summary>
|
||||
[HttpPut]
|
||||
[Route("allunread")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> SetAllNotificationsStatusUnread()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.SetAllNotificationsStatus(loggedOnUserId, NotificationStatus.Unread);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete Notification
|
||||
/// </summary>
|
||||
/// <param name="notificationId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpDelete]
|
||||
[Route("{notificationId}")]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> DeleteNotification(Guid notificationId)
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.DeleteNotification(notificationId, loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete All Read Notifications
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpDelete]
|
||||
[Authorize]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
public async Task<IActionResult> DeleteAllReadNotification()
|
||||
{
|
||||
Guid loggedOnUserId = new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
|
||||
RServiceResult<bool> res = await _notificationService.DeleteNotification(Guid.Empty, loggedOnUserId);
|
||||
if (!string.IsNullOrEmpty(res.ExceptionString))
|
||||
return BadRequest(res.ExceptionString);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notification Service
|
||||
/// </summary>
|
||||
protected readonly IRNotificationService _notificationService;
|
||||
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
/// <param name="notificationService"></param>
|
||||
public NoificationControllerBase(IRNotificationService notificationService)
|
||||
{
|
||||
_notificationService = notificationService;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@ using RSecurityBackend.Models.Audit.Db;
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using RSecurityBackend.Models.Generic.Db;
|
||||
using RSecurityBackend.Models.Image;
|
||||
using RSecurityBackend.Models.Notification;
|
||||
using System;
|
||||
|
||||
namespace RSecurityBackend.DbContext
|
||||
@ -90,5 +91,12 @@ namespace RSecurityBackend.DbContext
|
||||
/// </summary>
|
||||
public DbSet<RLongRunningJobStatus> LongRunningJobs { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Notifications
|
||||
/// <summary>
|
||||
/// Notifications
|
||||
/// </summary>
|
||||
public DbSet<RUserNotification> Notifications { get; set; }
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
25
RSecurityBackend/Models/Notification/NotificationStatus.cs
Normal file
25
RSecurityBackend/Models/Notification/NotificationStatus.cs
Normal file
@ -0,0 +1,25 @@
|
||||
namespace RSecurityBackend.Models.Notification
|
||||
{
|
||||
/// <summary>
|
||||
/// Notifaction Status
|
||||
/// </summary>
|
||||
public enum NotificationStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// Unread
|
||||
/// </summary>
|
||||
Unread = 0,
|
||||
/// <summary>
|
||||
/// Read
|
||||
/// </summary>
|
||||
Read = 1,
|
||||
/// <summary>
|
||||
/// Archived
|
||||
/// </summary>
|
||||
Archived = 2,
|
||||
/// <summary>
|
||||
/// Deleted
|
||||
/// </summary>
|
||||
Deleted = 3
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.Notification
|
||||
namespace RSecurityBackend.Models.Notification
|
||||
{
|
||||
/// <summary>
|
||||
/// User Notification
|
||||
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace RMuseum.Models.Notification.ViewModels
|
||||
namespace RSecurityBackend.Models.Notification.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// User Notification
|
||||
@ -349,6 +349,65 @@
|
||||
Artifact Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Controllers.NoificationControllerBase">
|
||||
<summary>
|
||||
Notifications controller
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.GetUserNotifications">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.GetUnreadUserNotificationsCount">
|
||||
<summary>
|
||||
Get unread user notifications count
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.SwitchNotificationStatus(System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.SetAllNotificationsStatusRead">
|
||||
<summary>
|
||||
Set All User Notifications Status Read
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.SetAllNotificationsStatusUnread">
|
||||
<summary>
|
||||
Set All User Notifications Status Unread
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.DeleteNotification(System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.DeleteAllReadNotification">
|
||||
<summary>
|
||||
Delete All Read Notifications
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RSecurityBackend.Controllers.NoificationControllerBase._notificationService">
|
||||
<summary>
|
||||
Notification Service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Controllers.NoificationControllerBase.#ctor(RSecurityBackend.Services.IRNotificationService)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
<param name="notificationService"></param>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Controllers.RImageControllerBase">
|
||||
<summary>
|
||||
Generic Image Provider
|
||||
@ -576,6 +635,11 @@
|
||||
long running jobs
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.DbContext.RSecurityDbContext`3.Notifications">
|
||||
<summary>
|
||||
Notifications
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Models.Audit.Db.REvent">
|
||||
<summary>
|
||||
Audit Event
|
||||
@ -1892,6 +1956,107 @@
|
||||
use ssl
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Models.Notification.NotificationStatus">
|
||||
<summary>
|
||||
Notifaction Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RSecurityBackend.Models.Notification.NotificationStatus.Unread">
|
||||
<summary>
|
||||
Unread
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RSecurityBackend.Models.Notification.NotificationStatus.Read">
|
||||
<summary>
|
||||
Read
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RSecurityBackend.Models.Notification.NotificationStatus.Archived">
|
||||
<summary>
|
||||
Archived
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RSecurityBackend.Models.Notification.NotificationStatus.Deleted">
|
||||
<summary>
|
||||
Deleted
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Models.Notification.RUserNotification">
|
||||
<summary>
|
||||
User Notification
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.RUserNotification.Id">
|
||||
<summary>
|
||||
Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.RUserNotification.UserId">
|
||||
<summary>
|
||||
User Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.RUserNotification.User">
|
||||
<summary>
|
||||
User
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.RUserNotification.DateTime">
|
||||
<summary>
|
||||
DateTime
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.RUserNotification.Status">
|
||||
<summary>
|
||||
Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.RUserNotification.Subject">
|
||||
<summary>
|
||||
Subject
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.RUserNotification.HtmlText">
|
||||
<summary>
|
||||
Text
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Models.Notification.ViewModels.RUserNotificationViewModel">
|
||||
<summary>
|
||||
User Notification
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Models.Notification.ViewModels.RUserNotificationViewModel.#ctor(RSecurityBackend.Models.Notification.RUserNotification)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
<param name="src"></param>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.ViewModels.RUserNotificationViewModel.Id">
|
||||
<summary>
|
||||
Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.ViewModels.RUserNotificationViewModel.DateTime">
|
||||
<summary>
|
||||
DateTime
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.ViewModels.RUserNotificationViewModel.Status">
|
||||
<summary>
|
||||
Status
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.ViewModels.RUserNotificationViewModel.Subject">
|
||||
<summary>
|
||||
Subject
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Models.Notification.ViewModels.RUserNotificationViewModel.HtmlText">
|
||||
<summary>
|
||||
Text
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.IAppUserService">
|
||||
<summary>
|
||||
Authentication Service
|
||||
@ -2154,6 +2319,29 @@
|
||||
<param name="orderByTimeDescending"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.IBackgroundTaskQueue">
|
||||
<summary>
|
||||
background task queue
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.IBackgroundTaskQueue.QueueBackgroundWorkItem(System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task})">
|
||||
<summary>
|
||||
queue new task
|
||||
</summary>
|
||||
<param name="workItem"></param>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.IBackgroundTaskQueue.DequeueAsync(System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
get task from que
|
||||
</summary>
|
||||
<param name="cancellationToken"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Services.IBackgroundTaskQueue.Count">
|
||||
<summary>
|
||||
number of tasks
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.ICaptchaService">
|
||||
<summary>
|
||||
Captcha Service
|
||||
@ -2645,6 +2833,29 @@
|
||||
</summary>
|
||||
<param name="context"></param>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.Implementation.BackgroundTaskQueue">
|
||||
<summary>
|
||||
IBackgroundTaskQueue implementation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.BackgroundTaskQueue.QueueBackgroundWorkItem(System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task})">
|
||||
<summary>
|
||||
new task
|
||||
</summary>
|
||||
<param name="workItem"></param>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.BackgroundTaskQueue.DequeueAsync(System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
dequeue task
|
||||
</summary>
|
||||
<param name="cancellationToken"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Services.Implementation.BackgroundTaskQueue.Count">
|
||||
<summary>
|
||||
task count
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.Implementation.CaptchaServiceEF">
|
||||
<summary>
|
||||
Captcha Service
|
||||
@ -2869,6 +3080,29 @@
|
||||
<param name="paging"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.Implementation.QueuedHostedService">
|
||||
<summary>
|
||||
BackgroundService implementation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.QueuedHostedService.#ctor(RSecurityBackend.Services.IBackgroundTaskQueue)">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
<param name="taskQueue"></param>
|
||||
</member>
|
||||
<member name="P:RSecurityBackend.Services.Implementation.QueuedHostedService.TaskQueue">
|
||||
<summary>
|
||||
task queue
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.QueuedHostedService.ExecuteAsync(System.Threading.CancellationToken)">
|
||||
<summary>
|
||||
execute
|
||||
</summary>
|
||||
<param name="cancellationToken"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.Implementation.RAuditDataProvider">
|
||||
<summary>
|
||||
Custom Audit Data Provider
|
||||
@ -2946,6 +3180,69 @@
|
||||
</summary>
|
||||
<param name="connectionString"></param>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.Implementation.RNotificationService">
|
||||
<summary>
|
||||
Internal messaging system implementation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.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:RSecurityBackend.Services.Implementation.RNotificationService.SwitchNotificationStatus(System.Guid,System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<param name="userId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.RNotificationService.SetAllNotificationsStatus(System.Guid,RSecurityBackend.Models.Notification.NotificationStatus)">
|
||||
<summary>
|
||||
Set All User Notifications Status
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="status"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.RNotificationService.DeleteNotification(System.Guid,System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId">if empty deletes all read notifications</param>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.RNotificationService.GetUserNotifications(System.Guid)">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.RNotificationService.GetUnreadUserNotificationsCount(System.Guid)">
|
||||
<summary>
|
||||
Get Unread User Notifications Count
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RSecurityBackend.Services.Implementation.RNotificationService._context">
|
||||
<summary>
|
||||
Database Contetxt
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.Implementation.RNotificationService.#ctor(RSecurityBackend.DbContext.RSecurityDbContext{RSecurityBackend.Models.Auth.Db.RAppUser,RSecurityBackend.Models.Auth.Db.RAppRole,System.Guid})">
|
||||
<summary>
|
||||
constructor
|
||||
</summary>
|
||||
<param name="context"></param>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.Implementation.RoleServiceBase">
|
||||
<summary>
|
||||
User Roles Service Implementation
|
||||
@ -3077,6 +3374,58 @@
|
||||
</summary>
|
||||
<param name="appUserService"></param>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.IRNotificationService">
|
||||
<summary>
|
||||
Internal messaging system interface
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.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:RSecurityBackend.Services.IRNotificationService.GetUserNotifications(System.Guid)">
|
||||
<summary>
|
||||
Get User Notifications
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.IRNotificationService.GetUnreadUserNotificationsCount(System.Guid)">
|
||||
<summary>
|
||||
Get Unread User Notifications Count
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.IRNotificationService.SwitchNotificationStatus(System.Guid,System.Guid)">
|
||||
<summary>
|
||||
Switch Notification Status
|
||||
</summary>
|
||||
<param name="notificationId"></param>
|
||||
<param name="userId"></param>
|
||||
<returns>updated notification object</returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.IRNotificationService.SetAllNotificationsStatus(System.Guid,RSecurityBackend.Models.Notification.NotificationStatus)">
|
||||
<summary>
|
||||
Set All User Notifications Status
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="status"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Services.IRNotificationService.DeleteNotification(System.Guid,System.Guid)">
|
||||
<summary>
|
||||
Delete Notification
|
||||
</summary>
|
||||
<param name="notificationId">if empty deletes all read notifications</param>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Services.ISecretGenerator">
|
||||
<summary>
|
||||
Secret Generator
|
||||
@ -3205,6 +3554,153 @@
|
||||
<param name="memberSerialization"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RSecurityBackend.Utilities.PersianIdentityErrorDescriber">
|
||||
<summary>
|
||||
PersianIdentityErrorDescriber
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.DefaultError">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.ConcurrencyFailure">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.PasswordMismatch">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.InvalidToken">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.LoginAlreadyAssociated">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.InvalidUserName(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="userName"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.InvalidEmail(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="email"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.DuplicateUserName(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="userName"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.DuplicateEmail(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="email"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.InvalidRoleName(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="role"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.DuplicateRoleName(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="role"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.UserAlreadyHasPassword">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.UserLockoutNotEnabled">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.UserAlreadyInRole(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="role"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.UserNotInRole(System.String)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="role"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.PasswordTooShort(System.Int32)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="length"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.PasswordRequiresNonAlphanumeric">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.PasswordRequiresDigit">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.PasswordRequiresLower">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.PasswordRequiresUpper">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.RecoveryCodeRedemptionFailed">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RSecurityBackend.Utilities.PersianIdentityErrorDescriber.PasswordRequiresUniqueChars(System.Int32)">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="uniqueChars"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RBilling.Models.Tenant.Db.RChargableFeatureType">
|
||||
<summary>
|
||||
Chargable Feature For Tenant Type
|
||||
|
||||
31
RSecurityBackend/Services/IBackgroundTaskQueue.cs
Normal file
31
RSecurityBackend/Services/IBackgroundTaskQueue.cs
Normal file
@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RSecurityBackend.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// background task queue
|
||||
/// </summary>
|
||||
public interface IBackgroundTaskQueue
|
||||
{
|
||||
/// <summary>
|
||||
/// queue new task
|
||||
/// </summary>
|
||||
/// <param name="workItem"></param>
|
||||
void QueueBackgroundWorkItem(Func<CancellationToken, Task> workItem);
|
||||
|
||||
/// <summary>
|
||||
/// get task from que
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
Task<Func<CancellationToken, Task>> DequeueAsync(
|
||||
CancellationToken cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// number of tasks
|
||||
/// </summary>
|
||||
int Count { get; }
|
||||
}
|
||||
}
|
||||
@ -1,10 +1,10 @@
|
||||
using RMuseum.Models.Notification;
|
||||
using RMuseum.Models.Notification.ViewModels;
|
||||
using RSecurityBackend.Models.Notification;
|
||||
using RSecurityBackend.Models.Notification.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RMuseum.Services
|
||||
namespace RSecurityBackend.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// Internal messaging system interface
|
||||
@ -3,14 +3,21 @@ using System.Collections.Concurrent;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
namespace RSecurityBackend.Services.Implementation
|
||||
{
|
||||
internal class BackgroundTaskQueue : IBackgroundTaskQueue
|
||||
/// <summary>
|
||||
/// IBackgroundTaskQueue implementation
|
||||
/// </summary>
|
||||
public class BackgroundTaskQueue : IBackgroundTaskQueue
|
||||
{
|
||||
private ConcurrentQueue<Func<CancellationToken, Task>> _workItems =
|
||||
new ConcurrentQueue<Func<CancellationToken, Task>>();
|
||||
private SemaphoreSlim _signal = new SemaphoreSlim(0);
|
||||
|
||||
/// <summary>
|
||||
/// new task
|
||||
/// </summary>
|
||||
/// <param name="workItem"></param>
|
||||
public void QueueBackgroundWorkItem(
|
||||
Func<CancellationToken, Task> workItem)
|
||||
{
|
||||
@ -23,6 +30,11 @@ namespace RMuseum.Services.Implementation
|
||||
_signal.Release();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// dequeue task
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<Func<CancellationToken, Task>> DequeueAsync(
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
@ -32,6 +44,9 @@ namespace RMuseum.Services.Implementation
|
||||
return workItem;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// task count
|
||||
/// </summary>
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
@ -5,17 +5,32 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
namespace RSecurityBackend.Services.Implementation
|
||||
{
|
||||
internal class QueuedHostedService : BackgroundService
|
||||
/// <summary>
|
||||
/// BackgroundService implementation
|
||||
/// </summary>
|
||||
public class QueuedHostedService : BackgroundService
|
||||
{
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
/// <param name="taskQueue"></param>
|
||||
public QueuedHostedService(IBackgroundTaskQueue taskQueue)
|
||||
{
|
||||
TaskQueue = taskQueue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// task queue
|
||||
/// </summary>
|
||||
public IBackgroundTaskQueue TaskQueue { get; }
|
||||
|
||||
/// <summary>
|
||||
/// execute
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken"></param>
|
||||
/// <returns></returns>
|
||||
protected async override Task ExecuteAsync(
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
@ -1,13 +1,14 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using RMuseum.DbContext;
|
||||
using RMuseum.Models.Notification;
|
||||
using RMuseum.Models.Notification.ViewModels;
|
||||
using RSecurityBackend.DbContext;
|
||||
using RSecurityBackend.Models.Notification;
|
||||
using RSecurityBackend.Models.Notification.ViewModels;
|
||||
using RSecurityBackend.Models.Generic;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using RSecurityBackend.Models.Auth.Db;
|
||||
|
||||
namespace RMuseum.Services.Implementation
|
||||
namespace RSecurityBackend.Services.Implementation
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
@ -175,10 +176,14 @@ namespace RMuseum.Services.Implementation
|
||||
/// <summary>
|
||||
/// Database Contetxt
|
||||
/// </summary>
|
||||
protected readonly RMuseumDbContext _context;
|
||||
protected readonly RSecurityDbContext<RAppUser, RAppRole, Guid> _context;
|
||||
|
||||
|
||||
public RNotificationService(RMuseumDbContext context)
|
||||
/// <summary>
|
||||
/// constructor
|
||||
/// </summary>
|
||||
/// <param name="context"></param>
|
||||
public RNotificationService(RSecurityDbContext<RAppUser, RAppRole, Guid> context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
@ -1,33 +1,135 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace RSecurityBackend.Utilities
|
||||
{
|
||||
/// <summary>
|
||||
/// PersianIdentityErrorDescriber
|
||||
/// </summary>
|
||||
public class PersianIdentityErrorDescriber : IdentityErrorDescriber
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError DefaultError() => new IdentityError { Code = nameof(DefaultError), Description = $"یک خطای ناشناخته رخ داده است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError ConcurrencyFailure() => new IdentityError { Code = nameof(ConcurrencyFailure), Description = "رکورد جاری پیشتر ویرایش شدهاست و تغییرات شما آنرا بازنویسی خواهد کرد." };
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError PasswordMismatch() => new IdentityError { Code = nameof(PasswordMismatch), Description = "کلمه عبور نادرست است." };
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError InvalidToken() => new IdentityError { Code = nameof(InvalidToken), Description = "کلمه عبور نامعتبر است." };
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError LoginAlreadyAssociated() => new IdentityError { Code = nameof(LoginAlreadyAssociated), Description = "این کاربر قبلأ اضافه شدهاست." };
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError InvalidUserName(string userName) => new IdentityError { Code = nameof(InvalidUserName), Description = $"نام کاربری '{userName}' نامعتبر است، فقط می تواند حاوی حروف ویا اعداد باشد." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="email"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError InvalidEmail(string email) => new IdentityError { Code = nameof(InvalidEmail), Description = $"ایمیل '{email}' نامعتبر است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError DuplicateUserName(string userName) => new IdentityError { Code = nameof(DuplicateUserName), Description = $"این نام کاربری '{userName}' به کاربر دیگری اختصاص یافته است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="email"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError DuplicateEmail(string email) => new IdentityError { Code = nameof(DuplicateEmail), Description = $"ایمیل '{email}' به کاربر دیگری اختصاص یافته است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="role"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError InvalidRoleName(string role) => new IdentityError { Code = nameof(InvalidRoleName), Description = $"نام نقش '{role}' نامعتبر است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="role"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError DuplicateRoleName(string role) => new IdentityError { Code = nameof(DuplicateRoleName), Description = $"این نام نقش '{role}' به کاربر دیگری اختصاص یافته است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError UserAlreadyHasPassword() => new IdentityError { Code = nameof(UserAlreadyHasPassword), Description = "کلمهی عبور کاربر قبلأ تنظیم شدهاست." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError UserLockoutNotEnabled() => new IdentityError { Code = nameof(UserLockoutNotEnabled), Description = "این کاربر فعال است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="role"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError UserAlreadyInRole(string role) => new IdentityError { Code = nameof(UserAlreadyInRole), Description = $"این نقش '{role}' قبلأ به این کاربر اختصاص یافته است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="role"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError UserNotInRole(string role) => new IdentityError { Code = nameof(UserNotInRole), Description = $"این نقش '{role}' قبلأ به این کاربر اختصاص نیافته است." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError PasswordTooShort(int length) => new IdentityError { Code = nameof(PasswordTooShort), Description = $"کلمه عبور باید حداقل {length} کاراکتر باشد." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError PasswordRequiresNonAlphanumeric() => new IdentityError { Code = nameof(PasswordRequiresNonAlphanumeric), Description = "کلمه عبور باید حداقل یک کاراکتر غیر از حروف الفبا داشته باشد." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError PasswordRequiresDigit() => new IdentityError { Code = nameof(PasswordRequiresDigit), Description = "کلمه عبور باید حداقل یک عدد داشته باشد." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError PasswordRequiresLower() => new IdentityError { Code = nameof(PasswordRequiresLower), Description = "کلمه عبور باید حداقل یک حرف کوچک داشته باشد." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError PasswordRequiresUpper() => new IdentityError { Code = nameof(PasswordRequiresUpper), Description = "کلمه عبور باید حداقل یک حرف بزرگ داشته باشد." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override IdentityError RecoveryCodeRedemptionFailed() => new IdentityError { Code = nameof(RecoveryCodeRedemptionFailed), Description = "بازیابی ناموفق بود." };
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="uniqueChars"></param>
|
||||
/// <returns></returns>
|
||||
public override IdentityError PasswordRequiresUniqueChars(int uniqueChars) => new IdentityError { Code = nameof(PasswordRequiresUniqueChars), Description = $"کلمه عبور باید حداقل داراى {uniqueChars} حرف متفاوت باشد." };
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user