last ...
This commit is contained in:
@@ -86,7 +86,9 @@ namespace xWebinarService.Controllers
|
||||
// Preparing Tags List ...
|
||||
var tagList = new List<string>();
|
||||
if (!tags.IsNullOrEmpty()) {
|
||||
tags.ParseListString<string>();
|
||||
tagList = tags
|
||||
.ParseListString<string>()
|
||||
.ToList();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -431,6 +433,7 @@ namespace xWebinarService.Controllers
|
||||
var result = await WebinarProvider
|
||||
.Subscribe(
|
||||
webinarId: id,
|
||||
userInfo: userInfo,
|
||||
subscriberId: subscriberId,
|
||||
connectionId: connectionId
|
||||
);
|
||||
@@ -492,6 +495,7 @@ namespace xWebinarService.Controllers
|
||||
var result = await WebinarProvider
|
||||
.IsSubscribed(
|
||||
webinarId: id,
|
||||
userInfo: userInfo,
|
||||
subscriberId: subscriberId
|
||||
);
|
||||
|
||||
@@ -554,6 +558,7 @@ namespace xWebinarService.Controllers
|
||||
var result = await WebinarProvider
|
||||
.Unsubscribe(
|
||||
webinarId: id,
|
||||
userInfo: userInfo,
|
||||
subscriberId: subscriberId,
|
||||
connectionId: connectionId
|
||||
);
|
||||
@@ -615,6 +620,7 @@ namespace xWebinarService.Controllers
|
||||
var result = await WebinarProvider
|
||||
.GetSubscriber(
|
||||
webinarId: id,
|
||||
userInfo: userInfo,
|
||||
subscriberId: subscriberId
|
||||
);
|
||||
|
||||
@@ -671,7 +677,10 @@ namespace xWebinarService.Controllers
|
||||
|
||||
//
|
||||
var result = await WebinarProvider
|
||||
.GetSubscribers(id);
|
||||
.GetSubscribers(
|
||||
webinarId: id,
|
||||
userInfo: userInfo
|
||||
);
|
||||
|
||||
//
|
||||
return Ok(result.
|
||||
@@ -730,7 +739,8 @@ namespace xWebinarService.Controllers
|
||||
var result = await WebinarProvider
|
||||
.QuerySubscribers(
|
||||
query: query,
|
||||
webinarId: id
|
||||
webinarId: id,
|
||||
userInfo: userInfo
|
||||
);
|
||||
|
||||
//
|
||||
@@ -846,9 +856,15 @@ namespace xWebinarService.Controllers
|
||||
// Do ...
|
||||
try
|
||||
{
|
||||
//
|
||||
var userInfo = await GetUserInfo();
|
||||
|
||||
//
|
||||
var result = await WebinarProvider
|
||||
.GetFiles(id);
|
||||
.GetFiles(
|
||||
id: id,
|
||||
userInfo: userInfo
|
||||
);
|
||||
|
||||
//
|
||||
return Ok(result.
|
||||
@@ -929,6 +945,86 @@ namespace xWebinarService.Controllers
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attach Provided Files to Specified Webinar ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}/Files/AttachMany")]
|
||||
public virtual async Task<ActionResult> AttachFiles(
|
||||
[FromRoute] Guid id,
|
||||
[FromQuery] string ids
|
||||
)
|
||||
{
|
||||
//
|
||||
// Do ...
|
||||
try
|
||||
{
|
||||
//
|
||||
var userInfo = await GetUserInfo();
|
||||
var connectionId = GetConnectionId();
|
||||
|
||||
//
|
||||
await WebinarProvider
|
||||
.AttachFiles(
|
||||
id: id,
|
||||
ids: ids,
|
||||
userInfo: userInfo,
|
||||
connectionId: connectionId
|
||||
);
|
||||
|
||||
//
|
||||
return Ok();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//
|
||||
var result = GetExceptionActionResult(ex);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Detach Provided Files to Specified Webinar ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ids">if null, detach all files ...</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}/Files/DetachMany")]
|
||||
public virtual async Task<ActionResult> DetachFiles(
|
||||
[FromRoute] Guid id,
|
||||
[FromQuery] string ids = null
|
||||
)
|
||||
{
|
||||
//
|
||||
// Do ...
|
||||
try
|
||||
{
|
||||
//
|
||||
var userInfo = await GetUserInfo();
|
||||
var connectionId = GetConnectionId();
|
||||
|
||||
//
|
||||
await WebinarProvider
|
||||
.DetachFiles(
|
||||
id: id,
|
||||
ids: ids,
|
||||
userInfo: userInfo,
|
||||
connectionId: connectionId
|
||||
);
|
||||
|
||||
//
|
||||
return Ok();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//
|
||||
var result = GetExceptionActionResult(ex);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
//
|
||||
|
||||
@@ -272,7 +272,7 @@ namespace xWebinarService.Interfaces
|
||||
Guid id,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Stream Specified File ...
|
||||
/// </summary>
|
||||
@@ -281,8 +281,8 @@ namespace xWebinarService.Interfaces
|
||||
Task<FileStreamResult> StreamFile(
|
||||
Guid id,
|
||||
Guid fileId
|
||||
);
|
||||
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Stream Specified File ...
|
||||
/// </summary>
|
||||
@@ -291,7 +291,37 @@ namespace xWebinarService.Interfaces
|
||||
Task<PhysicalFileResult> DownloadFile(
|
||||
Guid id,
|
||||
Guid fileId
|
||||
);
|
||||
);
|
||||
|
||||
/// <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>
|
||||
Task AttachFiles(
|
||||
Guid id,
|
||||
string ids,
|
||||
string connectionId = null,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
);
|
||||
|
||||
/// <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>
|
||||
Task DetachFiles(
|
||||
Guid id,
|
||||
string ids,
|
||||
string connectionId = null,
|
||||
XUserClaimsInfoDto userInfo = null
|
||||
);
|
||||
#endregion
|
||||
|
||||
//
|
||||
|
||||
@@ -213,6 +213,30 @@ namespace xWebinarService.Interfaces
|
||||
[FromRoute] Guid id,
|
||||
[FromRoute] Guid fileId
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Attach Provided Files to Specified Webinar ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}/Files/AttachMany")]
|
||||
Task<ActionResult> AttachFiles(
|
||||
[FromRoute] Guid id,
|
||||
[FromQuery] string ids
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// Detach Provided Files to Specified Webinar ...
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="ids">if null, detach all files ...</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}/Files/DetachMany")]
|
||||
Task<ActionResult> DetachFiles(
|
||||
[FromRoute] Guid id,
|
||||
[FromQuery] string ids = null
|
||||
);
|
||||
#endregion
|
||||
|
||||
//
|
||||
|
||||
+201
-31
@@ -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
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user