last refactoring ...

This commit is contained in:
2025-12-10 15:27:54 +03:30
parent ccf254e53b
commit 1582bceea9
4 changed files with 331 additions and 32 deletions
+152 -20
View File
@@ -4,6 +4,7 @@ using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using xCommons.Extensions;
using xDataService.Configuration;
@@ -331,7 +332,7 @@ namespace xWebinarService.Providers
try
{
//
await TagsAttach(
await AttachTags(
tags: tags,
id: entity.Id,
userInfo: userInfo,
@@ -961,7 +962,7 @@ namespace xWebinarService.Providers
// Detach Tags ...
try
{
await TagsDetach(entity.Id, userInfo);
await DetachTags(entity.Id, userInfo);
}
catch { }
@@ -1519,6 +1520,82 @@ namespace xWebinarService.Providers
//
return result;
}
/// <summary>
/// Stream Specified File of Specified Webinar ...
/// </summary>
/// <param name="id"></param>
/// <param name="fileId"></param>
/// <returns></returns>
public async Task<FileStreamResult> StreamFile(
Guid id,
Guid fileId
)
{
//
// Validate ...
var isValid = !id.IsNull() &&
!fileId.IsNull() &&
!id.IsDefaultGuid() &&
!fileId.IsDefaultGuid();
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
// Check Specified File is Refrenced to Specified Webinar ...
var files = await WebinarFileProvider.GetAllFor(id);
isValid = !files.IsNull() &&
files.HasChild() &&
files.Any(f => f.Id == fileId);
if (!isValid)
{
XException.NotFound.Throw();
}
//
var result = await WebinarFileProvider.Stream(fileId);
return result;
}
/// <summary>
/// Download Specified File of Specified Webinar ...
/// </summary>
/// <param name="id"></param>
/// <param name="fileId"></param>
/// <returns></returns>
public async Task<PhysicalFileResult> DownloadFile(
Guid id,
Guid fileId
)
{
//
// Validate ...
var isValid = !id.IsNull() &&
!fileId.IsNull() &&
!id.IsDefaultGuid() &&
!fileId.IsDefaultGuid();
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
// Check Specified File is Refrenced to Specified Webinar ...
var files = await WebinarFileProvider.GetAllFor(id);
isValid = !files.IsNull() &&
files.HasChild() &&
files.Any(f => f.Id == fileId);
if (!isValid)
{
XException.NotFound.Throw();
}
//
var result = await WebinarFileProvider.Download(fileId);
return result;
}
#endregion
//
@@ -1532,7 +1609,7 @@ namespace xWebinarService.Providers
/// <param name="connectionId"></param>
/// <param name="forceAttachToFiles"></param>
/// <returns></returns>
public async Task TagAttach(
public async Task AttachTag(
string tag,
Guid id,
XUserClaimsInfoDto userInfo = null,
@@ -1578,11 +1655,11 @@ namespace xWebinarService.Providers
foreach (var media in medias)
{
//
await WebinarFileProvider.Provider.TagAttach(
tag,
media.Id,
userInfo,
connectionId
await WebinarFileProvider.Provider.AttachTag(
id: media.Id,
tag: tag,
userInfo: userInfo,
connectionId: connectionId
);
}
}
@@ -1601,7 +1678,7 @@ namespace xWebinarService.Providers
/// <param name="connectionId"></param>
/// <param name="forceAttachToFiles"></param>
/// <returns></returns>
public async Task TagDetach(
public async Task DetachTag(
string tag,
Guid id,
XUserClaimsInfoDto userInfo = null,
@@ -1645,11 +1722,11 @@ namespace xWebinarService.Providers
foreach (var media in medias)
{
//
await WebinarFileProvider.Provider.TagDetach(
tag,
media.Id,
userInfo,
connectionId
await WebinarFileProvider.Provider.DetachTag(
id: media.Id,
tag: tag,
userInfo: userInfo,
connectionId: connectionId
);
}
}
@@ -1668,7 +1745,7 @@ namespace xWebinarService.Providers
/// <param name="connectionId"></param>
/// <param name="forceAttachToFiles"></param>
/// <returns></returns>
public async Task TagsAttach(
public async Task AttachTags(
IEnumerable<string> tags,
Guid id,
XUserClaimsInfoDto userInfo = null,
@@ -1702,7 +1779,7 @@ namespace xWebinarService.Providers
foreach (var tag in tags)
{
//
await TagAttach(
await AttachTag(
tag,
id,
userInfo,
@@ -1724,7 +1801,7 @@ namespace xWebinarService.Providers
/// <param name="connectionId"></param>
/// <param name="forceDetachFromFiles"></param>
/// <returns></returns>
public async Task TagsDetach(
public async Task DetachTags(
IEnumerable<string> tags,
Guid id,
XUserClaimsInfoDto userInfo = null,
@@ -1758,7 +1835,7 @@ namespace xWebinarService.Providers
foreach (var tag in tags)
{
//
await TagDetach(
await DetachTag(
tag,
id,
userInfo,
@@ -1778,7 +1855,7 @@ namespace xWebinarService.Providers
/// <param name="connectionId"></param>
/// <param name="forceDetachFromFiles"></param>
/// <returns></returns>
public async Task TagsDetach(
public async Task DetachTags(
Guid id,
XUserClaimsInfoDto userInfo = null,
string connectionId = null,
@@ -1818,7 +1895,11 @@ namespace xWebinarService.Providers
foreach (var media in medias)
{
//
await WebinarFileProvider.Provider.TagsDetach(media.Id, userInfo, connectionId);
await WebinarFileProvider.Provider.DetachTags(
id: media.Id,
userInfo: userInfo,
connectionId: connectionId
);
}
}
}
@@ -1826,6 +1907,57 @@ namespace xWebinarService.Providers
catch { }
}
}
/// <summary>
/// Retrieve Specified Webinar's Tags ...
/// </summary>
/// <param name="id"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public async Task<IEnumerable<string>> GetTags(
Guid id,
XUserClaimsInfoDto userInfo = null
)
{
//
// Validate Args ...
var isValid = !id.IsNull() &&
!id.IsDefaultGuid() &&
!userInfo.IsNullOrDefault();
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
// Checking Permissions ...
//
// Checking Exists ...
isValid = await WebinarRepository.IsExistsAsync(id);
if (!isValid)
{
XException.NotFound.Throw();
}
//
// Reading Tags Dto List ...
var tagsDtos = await WebinarTagProvider.GetTags(id);
//
var result = new List<string>();
isValid = !tagsDtos.IsNull() && tagsDtos.HasChild();
if (isValid)
{
//
result = tagsDtos
.Select(td => td.Tag)
.ToList();
}
//
return result;
}
#endregion
//