last ...
This commit is contained in:
@@ -86,7 +86,9 @@ 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()) {
|
||||||
tags.ParseListString<string>();
|
tagList = tags
|
||||||
|
.ParseListString<string>()
|
||||||
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -431,6 +433,7 @@ namespace xWebinarService.Controllers
|
|||||||
var result = await WebinarProvider
|
var result = await WebinarProvider
|
||||||
.Subscribe(
|
.Subscribe(
|
||||||
webinarId: id,
|
webinarId: id,
|
||||||
|
userInfo: userInfo,
|
||||||
subscriberId: subscriberId,
|
subscriberId: subscriberId,
|
||||||
connectionId: connectionId
|
connectionId: connectionId
|
||||||
);
|
);
|
||||||
@@ -492,6 +495,7 @@ namespace xWebinarService.Controllers
|
|||||||
var result = await WebinarProvider
|
var result = await WebinarProvider
|
||||||
.IsSubscribed(
|
.IsSubscribed(
|
||||||
webinarId: id,
|
webinarId: id,
|
||||||
|
userInfo: userInfo,
|
||||||
subscriberId: subscriberId
|
subscriberId: subscriberId
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -554,6 +558,7 @@ namespace xWebinarService.Controllers
|
|||||||
var result = await WebinarProvider
|
var result = await WebinarProvider
|
||||||
.Unsubscribe(
|
.Unsubscribe(
|
||||||
webinarId: id,
|
webinarId: id,
|
||||||
|
userInfo: userInfo,
|
||||||
subscriberId: subscriberId,
|
subscriberId: subscriberId,
|
||||||
connectionId: connectionId
|
connectionId: connectionId
|
||||||
);
|
);
|
||||||
@@ -615,6 +620,7 @@ namespace xWebinarService.Controllers
|
|||||||
var result = await WebinarProvider
|
var result = await WebinarProvider
|
||||||
.GetSubscriber(
|
.GetSubscriber(
|
||||||
webinarId: id,
|
webinarId: id,
|
||||||
|
userInfo: userInfo,
|
||||||
subscriberId: subscriberId
|
subscriberId: subscriberId
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -671,7 +677,10 @@ namespace xWebinarService.Controllers
|
|||||||
|
|
||||||
//
|
//
|
||||||
var result = await WebinarProvider
|
var result = await WebinarProvider
|
||||||
.GetSubscribers(id);
|
.GetSubscribers(
|
||||||
|
webinarId: id,
|
||||||
|
userInfo: userInfo
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
return Ok(result.
|
return Ok(result.
|
||||||
@@ -730,7 +739,8 @@ namespace xWebinarService.Controllers
|
|||||||
var result = await WebinarProvider
|
var result = await WebinarProvider
|
||||||
.QuerySubscribers(
|
.QuerySubscribers(
|
||||||
query: query,
|
query: query,
|
||||||
webinarId: id
|
webinarId: id,
|
||||||
|
userInfo: userInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -846,9 +856,15 @@ namespace xWebinarService.Controllers
|
|||||||
// Do ...
|
// Do ...
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
var userInfo = await GetUserInfo();
|
||||||
|
|
||||||
//
|
//
|
||||||
var result = await WebinarProvider
|
var result = await WebinarProvider
|
||||||
.GetFiles(id);
|
.GetFiles(
|
||||||
|
id: id,
|
||||||
|
userInfo: userInfo
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
return Ok(result.
|
return Ok(result.
|
||||||
@@ -929,6 +945,86 @@ namespace xWebinarService.Controllers
|
|||||||
return result;
|
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
|
#endregion
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ namespace xWebinarService.Interfaces
|
|||||||
Guid id,
|
Guid id,
|
||||||
XUserClaimsInfoDto userInfo = null
|
XUserClaimsInfoDto userInfo = null
|
||||||
);
|
);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stream Specified File ...
|
/// Stream Specified File ...
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -281,8 +281,8 @@ namespace xWebinarService.Interfaces
|
|||||||
Task<FileStreamResult> StreamFile(
|
Task<FileStreamResult> StreamFile(
|
||||||
Guid id,
|
Guid id,
|
||||||
Guid fileId
|
Guid fileId
|
||||||
);
|
);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stream Specified File ...
|
/// Stream Specified File ...
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -291,7 +291,37 @@ namespace xWebinarService.Interfaces
|
|||||||
Task<PhysicalFileResult> DownloadFile(
|
Task<PhysicalFileResult> DownloadFile(
|
||||||
Guid id,
|
Guid id,
|
||||||
Guid fileId
|
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
|
#endregion
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -213,6 +213,30 @@ namespace xWebinarService.Interfaces
|
|||||||
[FromRoute] Guid id,
|
[FromRoute] Guid id,
|
||||||
[FromRoute] Guid fileId
|
[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
|
#endregion
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
+201
-31
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using IdentityModel.Client;
|
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.SignalR;
|
using Microsoft.AspNetCore.SignalR;
|
||||||
@@ -309,7 +308,7 @@ namespace xWebinarService.Providers
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Check For Files ...
|
// Check For Files ...
|
||||||
isValid = !files.IsNull();
|
isValid = !files.IsNull() && files.Count() > 0;
|
||||||
if (isValid)
|
if (isValid)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -875,16 +874,36 @@ namespace xWebinarService.Providers
|
|||||||
//
|
//
|
||||||
// Handle Remove ...
|
// Handle Remove ...
|
||||||
var subscribers = await GetSubscribers(
|
var subscribers = await GetSubscribers(
|
||||||
webinarId: webinarId
|
webinarId: webinarId,
|
||||||
|
userInfo: userInfo
|
||||||
);
|
);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
// Unsubscribe all Subscribers ...
|
||||||
await subscribers.SelectAsync(async s => await Unsubscribe(
|
await subscribers.SelectAsync(async s => await Unsubscribe(
|
||||||
webinarId: webinarId,
|
webinarId: webinarId,
|
||||||
subscriberId: s.SubscriberId
|
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();
|
string resourceID = webinarId.ToString();
|
||||||
await TitleResourceProvider.Remove(resourceID);
|
await TitleResourceProvider.Remove(resourceID);
|
||||||
@@ -895,33 +914,6 @@ namespace xWebinarService.Providers
|
|||||||
}
|
}
|
||||||
catch { }
|
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 ...
|
// Check Entity Removed ...
|
||||||
result = !await WebinarRepository.IsExistsAsync(webinarId);
|
result = !await WebinarRepository.IsExistsAsync(webinarId);
|
||||||
@@ -1629,7 +1621,185 @@ namespace xWebinarService.Providers
|
|||||||
//
|
//
|
||||||
var result = await WebinarFileProvider.Download(fileId);
|
var result = await WebinarFileProvider.Download(fileId);
|
||||||
return result;
|
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
|
#endregion
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user