#50 notifying moderators on moderation request

This commit is contained in:
Hamid Reza Mohammadi 2020-12-19 18:39:12 +03:30
parent 7ae09c2783
commit 975d03ed3f
7 changed files with 153 additions and 2 deletions

View File

@ -5738,7 +5738,12 @@
Messaging service
</summary>
</member>
<member name="M:RMuseum.Services.Implementationa.RecitationService.#ctor(RMuseum.DbContext.RMuseumDbContext,Microsoft.Extensions.Configuration.IConfiguration,RMuseum.Services.IBackgroundTaskQueue,RMuseum.Services.IRNotificationService)">
<member name="F:RMuseum.Services.Implementationa.RecitationService._userService">
<summary>
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)">
<summary>
constructor
</summary>
@ -5746,6 +5751,7 @@
<param name="configuration"></param>
<param name="backgroundTaskQueue"></param>
<param name="notificationService"></param>
<param name="userService"></param>
</member>
<member name="T:RMuseum.Services.IPictureFileService">
<summary>

View File

@ -6,6 +6,7 @@ using Microsoft.Extensions.Configuration;
using MySql.Data.MySqlClient;
using Renci.SshNet;
using RMuseum.DbContext;
using RMuseum.Models.Auth.Memory;
using RMuseum.Models.Ganjoor;
using RMuseum.Models.GanjoorAudio;
using RMuseum.Models.GanjoorAudio.ViewModels;
@ -14,6 +15,7 @@ using RMuseum.Models.UploadSession.ViewModels;
using RMuseum.Services.Implementation;
using RMuseum.Services.Implementation.ImportedFromDesktopGanjoor;
using RSecurityBackend.Models.Generic;
using RSecurityBackend.Services;
using RSecurityBackend.Services.Implementation;
using System;
using System.Collections.Generic;
@ -421,9 +423,14 @@ namespace RMuseum.Services.Implementationa
return new RServiceResult<RecitationViewModel>(null, err);
}
Recitation narration = await _context.Recitations.Include(a => a.Owner).Where(a => a.Id == id).SingleOrDefaultAsync();
if(narration == null)
return new RServiceResult<RecitationViewModel>(null, "404");
bool bNewPendingRequest = narration.ReviewStatus == AudioReviewStatus.Draft && metadata.ReviewStatus == AudioReviewStatus.Pending;
narration.AudioTitle = metadata.AudioTitle;
narration.AudioArtist = metadata.AudioArtist;
narration.AudioArtistUrl = metadata.AudioArtistUrl;
@ -433,6 +440,25 @@ namespace RMuseum.Services.Implementationa
_context.Recitations.Update(narration);
await _context.SaveChangesAsync();
if(bNewPendingRequest)
{
var moderators = await _userService.GetUsersHavingPermission(RMuseumSecurableItem.AudioRecitationEntityShortName, RMuseumSecurableItem.ModerateOperationShortName);
if(string.IsNullOrEmpty(moderators.ExceptionString)) //if not, do nothing!
{
foreach(var moderator in moderators.Result)
{
await new RNotificationService(_context).PushNotification
(
(Guid)moderator.Id ,
"درخواست بررسی خوانش",
$"درخواستی برای بررسی خوانشی از «{narration.AudioArtist}» ثبت شده است. در صورت تمایل صورت تمایل به بررسی بخش «خوانش‌های در انتظار تأیید» را ببینید.{ Environment.NewLine}" +
$"توجه فرمایید که اگر کاربر دیگری که دارای مجوز بررسی خوانش‌هاست پیش از شما به آن رسیدگی کرده باشد آن را در صف نخواهید دید."
);
}
}
}
if(narration.ReviewStatus == AudioReviewStatus.Approved)
{
narration.AudioSyncStatus = AudioSyncStatus.MetadataChanged;
@ -2028,6 +2054,11 @@ namespace RMuseum.Services.Implementationa
/// </summary>
protected readonly IRNotificationService _notificationService;
/// <summary>
/// Users service
/// </summary>
protected readonly IAppUserService _userService;
/// <summary>
/// constructor
@ -2036,12 +2067,14 @@ namespace RMuseum.Services.Implementationa
/// <param name="configuration"></param>
/// <param name="backgroundTaskQueue"></param>
/// <param name="notificationService"></param>
public RecitationService(RMuseumDbContext context, IConfiguration configuration, IBackgroundTaskQueue backgroundTaskQueue, IRNotificationService notificationService)
/// <param name="userService"></param>
public RecitationService(RMuseumDbContext context, IConfiguration configuration, IBackgroundTaskQueue backgroundTaskQueue, IRNotificationService notificationService, IAppUserService userService)
{
_context = context;
Configuration = configuration;
_backgroundTaskQueue = backgroundTaskQueue;
_notificationService = notificationService;
_userService = userService;
}
}
}

View File

@ -1924,6 +1924,14 @@
</summary>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.IAppUserService.GetUsersHavingPermission(System.String,System.String)">
<summary>
all users having a certain permission
</summary>
<param name="securableItemShortName"></param>
<param name="operationShortName"></param>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.IAppUserService.AddUser(RSecurityBackend.Models.Auth.ViewModels.RegisterRAppUser)">
<summary>
add a new user
@ -2265,6 +2273,14 @@
<param name="operationShortName"></param>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.Implementation.AppUserService.GetUsersHavingPermission(System.String,System.String)">
<summary>
all users having a certain permission
</summary>
<param name="securableItemShortName"></param>
<param name="operationShortName"></param>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.Implementation.AppUserService.AddUser(RSecurityBackend.Models.Auth.ViewModels.RegisterRAppUser)">
<summary>
add a new user
@ -2795,6 +2811,14 @@
<param name="operationShortName"></param>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.Implementation.RoleServiceBase.GetRolesHavingPermission(System.String,System.String)">
<summary>
roles having specific permission
</summary>
<param name="securableItemShortName"></param>
<param name="operationShortName"></param>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.Implementation.RoleServiceBase.GetSecurableItems">
<summary>
gets list of SecurableItem, should be reimplemented in end user applications
@ -2939,6 +2963,14 @@
<param name="operationShortName"></param>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.IUserRoleService.GetRolesHavingPermission(System.String,System.String)">
<summary>
roles having specific permission
</summary>
<param name="securableItemShortName"></param>
<param name="operationShortName"></param>
<returns></returns>
</member>
<member name="M:RSecurityBackend.Services.IUserRoleService.GetSecurableItems">
<summary>
gets list of SecurableItem, should be reimplemented in end user applications

View File

@ -121,6 +121,14 @@ namespace RSecurityBackend.Services
/// <returns></returns>
Task<RServiceResult<PublicRAppUser[]>> GetAllUsersInformation();
/// <summary>
/// all users having a certain permission
/// </summary>
/// <param name="securableItemShortName"></param>
/// <param name="operationShortName"></param>
/// <returns></returns>
Task<RServiceResult<PublicRAppUser[]>> GetUsersHavingPermission(string securableItemShortName, string operationShortName);
/// <summary>
/// add a new user
/// </summary>

View File

@ -56,6 +56,14 @@ namespace RSecurityBackend.Services
/// <returns></returns>
Task<RServiceResult<bool>> HasPermission(string roleName, string securableItemShortName, string operationShortName);
/// <summary>
/// roles having specific permission
/// </summary>
/// <param name="securableItemShortName"></param>
/// <param name="operationShortName"></param>
/// <returns></returns>
Task<RServiceResult<RAppRole[]>> GetRolesHavingPermission(string securableItemShortName, string operationShortName);
/// <summary>
/// gets list of SecurableItem, should be reimplemented in end user applications
/// </summary>

View File

@ -592,6 +592,47 @@ namespace RSecurityBackend.Services.Implementation
}
}
/// <summary>
/// all users having a certain permission
/// </summary>
/// <param name="securableItemShortName"></param>
/// <param name="operationShortName"></param>
/// <returns></returns>
public async Task<RServiceResult<PublicRAppUser[]>> GetUsersHavingPermission(string securableItemShortName, string operationShortName)
{
try
{
var rolesResult = await _userRoleService.GetRolesHavingPermission(securableItemShortName, operationShortName);
if(!string.IsNullOrEmpty(rolesResult.ExceptionString))
{
return new RServiceResult<PublicRAppUser[]>(null, rolesResult.ExceptionString);
}
List<PublicRAppUser> lstPublicUsersInfo = new List<PublicRAppUser>();
RAppRole[] roles = rolesResult.Result;
foreach(RAppRole role in roles)
{
var usersInRole = _userManager.GetUsersInRoleAsync(role.Name);
foreach(var user in usersInRole.Result)
{
if(lstPublicUsersInfo.Where(u => u.Id == user.Id).FirstOrDefault() == null )
{
lstPublicUsersInfo.Add(new PublicRAppUser(user));
}
}
}
return new RServiceResult<PublicRAppUser[]>(lstPublicUsersInfo.ToArray());
}
catch (Exception exp)
{
return new RServiceResult<PublicRAppUser[]>(null, exp.ToString());
}
}
/// <summary>
/// add a new user

View File

@ -33,6 +33,7 @@ namespace RSecurityBackend.Services.Implementation
}
}
/// <summary>
/// returns user role information
/// </summary>
@ -184,6 +185,28 @@ namespace RSecurityBackend.Services.Implementation
}
}
/// <summary>
/// roles having specific permission
/// </summary>
/// <param name="securableItemShortName"></param>
/// <param name="operationShortName"></param>
/// <returns></returns>
public async Task<RServiceResult<RAppRole[]>> GetRolesHavingPermission(string securableItemShortName, string operationShortName)
{
try
{
RAppRole[] rolesInfo = await _roleManager.Roles
.Include(r => r.Permissions)
.Where(r => r.Permissions.Any(p => p.SecurableItemShortName == securableItemShortName && p.OperationShortName == operationShortName) )
.ToArrayAsync();
return new RServiceResult<RAppRole[]>(rolesInfo);
}
catch (Exception exp)
{
return new RServiceResult<RAppRole[]>(null, exp.ToString());
}
}
/// <summary>
/// gets list of SecurableItem, should be reimplemented in end user applications
/// </summary>