last works ...

This commit is contained in:
2025-12-19 00:27:06 +03:30
parent 8c9d688fd8
commit d5498d9f6f
4 changed files with 96 additions and 151 deletions
+12 -9
View File
@@ -15,6 +15,7 @@ using xWebinarService.Models.Dtos;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using XFileDto = xFileService.Models.Dtos.XFileDto; using XFileDto = xFileService.Models.Dtos.XFileDto;
using xModels.Dtos; using xModels.Dtos;
using xTagService.Models.Dtos;
namespace xWebinarService.Controllers namespace xWebinarService.Controllers
{ {
@@ -85,7 +86,8 @@ namespace xWebinarService.Controllers
// //
// Preparing Tags List ... // Preparing Tags List ...
var tagList = new List<string>(); var tagList = new List<string>();
if (!tags.IsNullOrEmpty()) { if (!tags.IsNullOrEmpty())
{
tagList = tags tagList = tags
.ParseListString<string>() .ParseListString<string>()
.ToList(); .ToList();
@@ -1009,12 +1011,12 @@ namespace xWebinarService.Controllers
var connectionId = GetConnectionId(); var connectionId = GetConnectionId();
// //
var tagsList = tags.ParseListString<string>();
await WebinarProvider await WebinarProvider
.AttachTags( .AttachTags(
id: id, id: id,
tags: tagsList, tags: tags,
userInfo: userInfo, userInfo: userInfo,
forceAttachToFiles: true,
connectionId: connectionId connectionId: connectionId
); );
@@ -1033,7 +1035,7 @@ namespace xWebinarService.Controllers
/// Detach Specified Tags From Specified Webinar ... /// Detach Specified Tags From Specified Webinar ...
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="tags"></param> /// <param name="tags">if null, remove all attached tags ...</param>
/// <returns></returns> /// <returns></returns>
[HttpDelete("{id}/Tags")] [HttpDelete("{id}/Tags")]
public virtual async Task<ActionResult> DetachTags( public virtual async Task<ActionResult> DetachTags(
@@ -1051,12 +1053,12 @@ namespace xWebinarService.Controllers
var connectionId = GetConnectionId(); var connectionId = GetConnectionId();
// //
var tagsList = tags.ParseListString<string>();
await WebinarProvider await WebinarProvider
.DetachTags( .DetachTags(
id: id, id: id,
tags: tagsList, tags: tags,
userInfo: userInfo, userInfo: userInfo,
forceDetachFromFiles: true,
connectionId: connectionId connectionId: connectionId
); );
@@ -1077,7 +1079,7 @@ namespace xWebinarService.Controllers
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
[HttpGet("{id}/Tags")] [HttpGet("{id}/Tags")]
public virtual async Task<ActionResult<IEnumerable<string>>> GetTags( public virtual async Task<ActionResult<IEnumerable<XTagDto>>> GetTags(
[FromRoute] Guid id [FromRoute] Guid id
) )
{ {
@@ -1090,14 +1092,15 @@ namespace xWebinarService.Controllers
var userInfo = await GetUserInfo(); var userInfo = await GetUserInfo();
// //
await WebinarProvider var result = await WebinarProvider
.GetTags( .GetTags(
id: id, id: id,
userInfo: userInfo userInfo: userInfo
); );
// //
return Ok(); return Ok(result
.ToDynamicObject());
} }
catch (Exception ex) catch (Exception ex)
{ {
+16 -29
View File
@@ -9,6 +9,7 @@ using xDataService.Configuration;
using xIdentityModels.Models; using xIdentityModels.Models;
using xIdentityService.Interfaces; using xIdentityService.Interfaces;
using xModels.Dtos; using xModels.Dtos;
using xTagService.Models.Dtos;
using xWebinarService.Hubs; using xWebinarService.Hubs;
using xWebinarService.Interfaces.Entities; using xWebinarService.Interfaces.Entities;
using xWebinarService.Models.Dtos; using xWebinarService.Models.Dtos;
@@ -314,17 +315,17 @@ namespace xWebinarService.Interfaces
/// <summary> /// <summary>
/// Attach Tag to Specified File ... /// Attach Tag to Specified File ...
/// </summary> /// </summary>
/// <param name="tag"></param>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="tag"></param>
/// <param name="connectionId"></param> /// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <param name="forceAttachToFiles"></param> /// <param name="forceAttachToFiles"></param>
/// <returns></returns> /// <returns></returns>
Task AttachTag( Task AttachTag(
string tag,
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tag,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceAttachToFiles = true bool forceAttachToFiles = true
); );
@@ -338,58 +339,44 @@ namespace xWebinarService.Interfaces
/// <param name="forceAttachToFiles"></param> /// <param name="forceAttachToFiles"></param>
/// <returns></returns> /// <returns></returns>
Task DetachTag( Task DetachTag(
string tag,
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tag,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceDetachFromFiles = true bool forceDetachFromFiles = true
); );
/// <summary> /// <summary>
/// Attach Tags for Specified File ... /// Attach Tags for Specified File ...
/// </summary> /// </summary>
/// <param name="tags"></param>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="tags"></param>
/// <param name="connectionId"></param> /// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <param name="forceAttachToFiles"></param> /// <param name="forceAttachToFiles"></param>
/// <returns></returns> /// <returns></returns>
Task AttachTags( Task AttachTags(
IEnumerable<string> tags,
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tags,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceAttachToFiles = true bool forceAttachToFiles = true
); );
/// <summary> /// <summary>
/// Detach Tags for Specified File ... /// Detach Tags for Specified File ...
/// </summary> /// </summary>
/// <param name="tags"></param>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="tags">if nulls, detach all tags ...</param>
/// <param name="connectionId"></param>
/// <param name="userInfo"></param> /// <param name="userInfo"></param>
/// <param name="connectionId"></param>
/// <param name="forceDetachFromFiles"></param>
/// <returns></returns>
Task DetachTags(
IEnumerable<string> tags,
Guid id,
XUserClaimsInfoDto userInfo = null,
string connectionId = null,
bool forceDetachFromFiles = true
);
/// <summary>
/// Detach all Attached Tags for Specified File ...
/// </summary>
/// <param name="id"></param>
/// <param name="connectionId"></param>
/// <param name="forceDetachFromFiles"></param> /// <param name="forceDetachFromFiles"></param>
/// <returns></returns> /// <returns></returns>
Task DetachTags( Task DetachTags(
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tags,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceDetachFromFiles = true bool forceDetachFromFiles = true
); );
@@ -399,7 +386,7 @@ namespace xWebinarService.Interfaces
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="userInfo"></param>
/// <returns></returns> /// <returns></returns>
Task<IEnumerable<string>> GetTags( Task<IEnumerable<XTagDto>> GetTags(
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null XUserClaimsInfoDto userInfo = null
); );
@@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Mvc;
using xModels.Dtos; using xModels.Dtos;
using XFileDto = xFileService.Models.Dtos.XFileDto; using XFileDto = xFileService.Models.Dtos.XFileDto;
using xWebinarService.Models.Dtos; using xWebinarService.Models.Dtos;
using xTagService.Models.Dtos;
namespace xWebinarService.Interfaces namespace xWebinarService.Interfaces
{ {
@@ -245,7 +246,7 @@ namespace xWebinarService.Interfaces
/// Detach Specified Tags From Specified Webinar ... /// Detach Specified Tags From Specified Webinar ...
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="tags"></param> /// <param name="tags">if null, remove all attached tags ...</param>
/// <returns></returns> /// <returns></returns>
Task<ActionResult> DetachTags( Task<ActionResult> DetachTags(
[FromRoute] Guid id, [FromRoute] Guid id,
@@ -257,7 +258,7 @@ namespace xWebinarService.Interfaces
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
Task<ActionResult<IEnumerable<string>>> GetTags( Task<ActionResult<IEnumerable<XTagDto>>> GetTags(
[FromRoute] Guid id [FromRoute] Guid id
); );
#endregion #endregion
+63 -109
View File
@@ -17,6 +17,7 @@ using xIdentityService.Extensions;
using xIdentityService.Interfaces; using xIdentityService.Interfaces;
using xModels.Dtos; using xModels.Dtos;
using xPushService.Constants; using xPushService.Constants;
using xTagService.Models.Dtos;
using xWebinarService.Constants; using xWebinarService.Constants;
using xWebinarService.Hubs; using xWebinarService.Hubs;
using xWebinarService.Interfaces; using xWebinarService.Interfaces;
@@ -334,11 +335,11 @@ namespace xWebinarService.Providers
{ {
// //
await AttachTags( await AttachTags(
tags: tags,
id: entity.Id, id: entity.Id,
userInfo: userInfo, userInfo: userInfo,
connectionId: connectionId, forceAttachToFiles: true,
true // tags: tags.ToListString(),
connectionId: connectionId
); );
} }
catch { } catch { }
@@ -889,6 +890,7 @@ namespace xWebinarService.Providers
// //
// Detach Tags ... // Detach Tags ...
await DetachTags( await DetachTags(
tags: null, // Pass Null to Detach All Referenced Tags ...
id: entity.Id, id: entity.Id,
userInfo: userInfo, userInfo: userInfo,
connectionId: connectionId connectionId: connectionId
@@ -1665,7 +1667,6 @@ namespace xWebinarService.Providers
await WebinarFileProvider.AddReference( await WebinarFileProvider.AddReference(
model: file, model: file,
providedForId: id, providedForId: id,
forIndex: 0,
userInfo: userInfo, userInfo: userInfo,
connectionId: connectionId connectionId: connectionId
); );
@@ -1764,25 +1765,26 @@ namespace xWebinarService.Providers
/// <summary> /// <summary>
/// Attach Tag to Specified File ... /// Attach Tag to Specified File ...
/// </summary> /// </summary>
/// <param name="tag"></param>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="tag"></param>
/// <param name="connectionId"></param> /// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <param name="forceAttachToFiles"></param> /// <param name="forceAttachToFiles"></param>
/// <returns></returns> /// <returns></returns>
public async Task AttachTag( public async Task AttachTag(
string tag,
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tag,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceAttachToFiles = true bool forceAttachToFiles = true
) )
{ {
// //
// Validate ... // Validate ...
var isValid = !tag.IsNullOrEmpty() && var isValid =
!id.IsNull() && !id.IsNull() &&
!id.IsDefaultGuid() && !id.IsDefaultGuid() &&
!tag.IsNullOrEmpty() &&
!userInfo.IsNullOrDefault(); !userInfo.IsNullOrDefault();
if (!isValid) if (!isValid)
{ {
@@ -1807,7 +1809,6 @@ namespace xWebinarService.Providers
// Attached Tag to Webinar ... // Attached Tag to Webinar ...
await WebinarTagProvider.AddReference( await WebinarTagProvider.AddReference(
tag: tag, tag: tag,
forIndex: 0,
providedForId: id, providedForId: id,
connectionId: connectionId connectionId: connectionId
); );
@@ -1840,25 +1841,27 @@ namespace xWebinarService.Providers
/// <summary> /// <summary>
/// Detach Tag fro Specified File ... /// Detach Tag fro Specified File ...
/// </summary> /// </summary>
/// <param name="tag"></param>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="tag"></param>
/// <param name="connectionId"></param> /// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <param name="forceAttachToFiles"></param> /// <param name="forceAttachToFiles"></param>
/// <returns></returns> /// <returns></returns>
public async Task DetachTag( public async Task DetachTag(
string tag,
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tag,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceDetachFromFiles = true bool forceDetachFromFiles = true
) )
{ {
// //
// Validate ... // Validate ...
var isValid = !tag.IsNullOrEmpty() && var isValid =
!id.IsNull() && !id.IsNull() &&
!id.IsDefaultGuid(); !id.IsDefaultGuid() &&
!tag.IsNullOrEmpty() &&
!userInfo.IsNullOrDefault();
if (!isValid) if (!isValid)
{ {
XException.InvalidArgs.Throw(); XException.InvalidArgs.Throw();
@@ -1914,26 +1917,27 @@ namespace xWebinarService.Providers
/// <summary> /// <summary>
/// Attach Tags for Specified File ... /// Attach Tags for Specified File ...
/// </summary> /// </summary>
/// <param name="tags"></param>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="tags"></param>
/// <param name="connectionId"></param> /// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <param name="forceAttachToFiles"></param> /// <param name="forceAttachToFiles"></param>
/// <returns></returns> /// <returns></returns>
public async Task AttachTags( public async Task AttachTags(
IEnumerable<string> tags,
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tags,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceAttachToFiles = true bool forceAttachToFiles = true
) )
{ {
// //
// Validate ... // Validate ...
var isValid = !tags.IsNull() && var isValid =
tags.HasChild() &&
!id.IsNull() && !id.IsNull() &&
!id.IsDefaultGuid(); !id.IsDefaultGuid() &&
!tags.IsNullOrEmpty() &&
!userInfo.IsNullOrDefault();
if (!isValid) if (!isValid)
{ {
XException.InvalidArgs.Throw(); XException.InvalidArgs.Throw();
@@ -1954,7 +1958,8 @@ namespace xWebinarService.Providers
try try
{ {
// //
foreach (var tag in tags) var tagsList = tags.ParseListString<string>();
foreach (var tag in tagsList)
{ {
// //
await AttachTag( await AttachTag(
@@ -1972,26 +1977,26 @@ namespace xWebinarService.Providers
/// <summary> /// <summary>
/// Detach Tags for Specified File ... /// Detach Tags for Specified File ...
/// </summary> /// </summary>
/// <param name="tags"></param>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="tags">if null, Detach All ...</param>
/// <param name="connectionId"></param> /// <param name="connectionId"></param>
/// <param name="userInfo"></param>
/// <param name="forceDetachFromFiles"></param> /// <param name="forceDetachFromFiles"></param>
/// <returns></returns> /// <returns></returns>
public async Task DetachTags( public async Task DetachTags(
IEnumerable<string> tags,
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null, string tags,
string connectionId = null, string connectionId = null,
XUserClaimsInfoDto userInfo = null,
bool forceDetachFromFiles = true bool forceDetachFromFiles = true
) )
{ {
// //
// Validate ... // Validate ...
var isValid = !tags.IsNull() && var isValid =
tags.HasChild() &&
!id.IsNull() && !id.IsNull() &&
!id.IsDefaultGuid(); !id.IsDefaultGuid() &&
!userInfo.IsNullOrDefault();
if (!isValid) if (!isValid)
{ {
XException.InvalidArgs.Throw(); XException.InvalidArgs.Throw();
@@ -2008,11 +2013,26 @@ namespace xWebinarService.Providers
XException.NotAllowed.Throw(); XException.NotAllowed.Throw();
} }
//
IEnumerable<string> tagsList;
if (!tags.IsNullOrEmpty())
{
//
// Only Detach Provided Tags ...
tagsList = tags.ParseListString<string>();
}
else
{
//
// Select all Referenced Tags ...
tagsList = (await WebinarTagProvider.GetAllReferences(id)).Select(t => t.Tag);
}
// //
try try
{ {
// //
foreach (var tag in tags) foreach (var tag in tagsList)
{ {
// //
await DetachTag( await DetachTag(
@@ -2027,79 +2047,13 @@ namespace xWebinarService.Providers
catch { } catch { }
} }
/// <summary>
/// Detach all Attached Tags for Specified Webinar ...
/// </summary>
/// <param name="id"></param>
/// <param name="userInfo"></param>
/// <param name="connectionId"></param>
/// <param name="forceDetachFromFiles"></param>
/// <returns></returns>
public async Task DetachTags(
Guid id,
XUserClaimsInfoDto userInfo = null,
string connectionId = null,
bool forceDetachFromFiles = true
)
{
//
// Validate ...
var isValid = !id.IsNull() && !id.IsDefaultGuid();
if (!isValid)
{
XException.InvalidArgs.Throw();
}
//
// Check Permissions ...
isValid = await HasPermission(
id: id,
userInfo: userInfo
);
if (!isValid)
{
XException.NotAllowed.Throw();
}
//
try
{
//
await WebinarTagProvider.RemoveReferences(
providedForId: id,
connectionId: connectionId
);
//
if (forceDetachFromFiles)
{
//
var medias = await WebinarFileProvider.GetAllReferences(id);
isValid = !medias.IsNull() && medias.HasChild();
if (isValid)
{
//
foreach (var media in medias)
{
//
await WebinarFileProvider.FileProvider.TagProvider.RemoveReferences(
providedForId: media.Id,
connectionId: connectionId
);
}
}
}
}
catch { }
}
/// <summary> /// <summary>
/// Retrieve Specified Webinar's Tags ... /// Retrieve Specified Webinar's Tags ...
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <param name="userInfo"></param> /// <param name="userInfo"></param>
/// <returns></returns> /// <returns></returns>
public async Task<IEnumerable<string>> GetTags( public async Task<IEnumerable<XTagDto>> GetTags(
Guid id, Guid id,
XUserClaimsInfoDto userInfo = null XUserClaimsInfoDto userInfo = null
) )
@@ -2140,18 +2094,18 @@ namespace xWebinarService.Providers
// //
// Reading Tags Dto List ... // Reading Tags Dto List ...
var tagsDtos = await WebinarTagProvider.GetAllReferences(id); var result = await WebinarTagProvider.GetAllReferences(id);
// //
var result = new List<string>(); // var result = new List<string>();
isValid = !tagsDtos.IsNull() && tagsDtos.HasChild(); // isValid = !tagsDtos.IsNull() && tagsDtos.HasChild();
if (isValid) // if (isValid)
{ // {
// // //
result = tagsDtos // result = tagsDtos
.Select(td => td.Tag) // .Select(td => td.Tag)
.ToList(); // .ToList();
} // }
// //
return result; return result;