This commit is contained in:
2025-12-18 15:59:35 +03:30
parent 5f05427f9f
commit ba74efaf3c
4 changed files with 359 additions and 39 deletions
+201 -31
View File
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using IdentityModel.Client;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
@@ -309,7 +308,7 @@ namespace xWebinarService.Providers
//
// Check For Files ...
isValid = !files.IsNull();
isValid = !files.IsNull() && files.Count() > 0;
if (isValid)
{
//
@@ -875,16 +874,36 @@ namespace xWebinarService.Providers
//
// Handle Remove ...
var subscribers = await GetSubscribers(
webinarId: webinarId
webinarId: webinarId,
userInfo: userInfo
);
try
{
//
// Unsubscribe all Subscribers ...
await subscribers.SelectAsync(async s => await Unsubscribe(
webinarId: webinarId,
subscriberId: s.SubscriberId
));
//
// Detach Tags ...
await DetachTags(
id: entity.Id,
userInfo: userInfo,
connectionId: connectionId
);
//
// Detach Files ...
//
await DetachFiles(
ids: null, // Pass Null To Detach All Referenced Files ...
id: webinarId,
userInfo: userInfo,
connectionId: connectionId
);
//
string resourceID = webinarId.ToString();
await TitleResourceProvider.Remove(resourceID);
@@ -895,33 +914,6 @@ namespace xWebinarService.Providers
}
catch { }
//
// Detach Tags ...
try
{
await DetachTags(entity.Id, userInfo);
}
catch { }
//
// Remove Files ...
try
{
//
var medias = await WebinarFileProvider.GetAllReferences(entity.Id);
if (!medias.IsNull() && medias.HasChild())
{
//
await RemoveFiles(
id: entity.Id,
ids: string.Empty,
userInfo: userInfo,
connectionId: connectionId
);
}
}
catch { }
//
// Check Entity Removed ...
result = !await WebinarRepository.IsExistsAsync(webinarId);
@@ -1629,7 +1621,185 @@ namespace xWebinarService.Providers
//
var result = await WebinarFileProvider.Download(fileId);
return result;
}
}
/// <summary>
/// Attach Provided Files to Specified Webinar ...
/// </summary>
/// <param name="id"></param>
/// <param name="ids"></param>
/// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public async Task AttachFiles(
Guid id,
string ids,
string connectionId = null,
XUserClaimsInfoDto userInfo = null
)
{
//
// Validate ...
var isValid = !id.IsNull() &&
!id.IsDefaultGuid() &&
!ids.IsNullOrEmpty() &&
!userInfo.IsNullOrDefault();
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
// Parse Files ...
var idsList = ids.ParseListGuid();
isValid = !idsList.IsNull() && idsList.HasChild();
if (!isValid)
{
XException.NotFound.Throw();
}
//
// Retrieve Webinar ...
var webinar = await WebinarRepository.GetAsync(id);
isValid = !webinar.IsNullOrDefault();
if (!isValid)
{
XException.NotFound.Throw();
}
//
// Check Permissions ...
isValid =
userInfo.UserId == webinar.OwnerId ||
userInfo.Roles.Any(r => r.ToNormalString() == "admin");
if (!isValid)
{
XException.NotAllowed.Throw();
}
//
// Refrieve all Webinar Refrenced File ...
var references = await WebinarFileProvider.GetAllReferences(id);
if (!references.IsNull() && references.HasChild())
{
//
// Filter ids which Exists in References ...
idsList =
idsList.Where(i => !references.Any(r => r.Id == i));
}
//
isValid = idsList.HasChild();
if (!isValid)
{
return;
}
//
foreach (var fileId in idsList)
{
//
// Check File Exists ...
var file = await WebinarFileProvider.FileProvider.Get(fileId);
isValid = !file.IsNullOrDefault();
if (isValid)
{
//
await WebinarFileProvider.AddReference(
model: file,
providedForId: id,
forIndex: 0,
userInfo: userInfo,
connectionId: connectionId
);
}
}
}
/// <summary>
/// Detach Provided Files to Specified Webinar ...
/// </summary>
/// <param name="id"></param>
/// <param name="ids">if null, detach all files ...</param>
/// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public async Task DetachFiles(
Guid id,
string ids,
string connectionId = null,
XUserClaimsInfoDto userInfo = null
)
{
//
// Validate ...
var isValid =
!id.IsNull() &&
!id.IsDefaultGuid() &&
!userInfo.IsNullOrDefault();
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
// Check Webinar Exists ...
var webinar = await WebinarRepository.GetAsync(id);
isValid = !webinar.IsNullOrDefault();
if (!isValid)
{
XException.NotFound.Throw();
}
//
// Check Permissions ...
isValid =
userInfo.UserId == webinar.OwnerId ||
userInfo.Roles.Any(r => r.ToNormalString() == "admin");
if (!isValid)
{
XException.NotAllowed.Throw();
}
//
var references = await WebinarFileProvider.GetAllReferences(id);
isValid = !references.IsNull() && references.HasChild();
if (!isValid)
{
return;
}
//
// Parse IDS ...
if (!ids.IsNullOrEmpty())
{
//
var idsList = ids.ParseListGuid();
if (!idsList.IsNull() && idsList.HasChild())
{
//
// Filtere References based on IDS ...
references =
references.Where(r => idsList.Contains(r.Id));
}
}
//
if (references.HasChild())
{
//
foreach (var file in references)
{
//
await WebinarFileProvider.RemoveReference(
model: file,
providedForId: id,
userInfo: userInfo,
connectionId: connectionId
);
}
}
}
#endregion
//