1114 lines
32 KiB
C#
1114 lines
32 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Logging;
|
|
using xCommons.Configurations;
|
|
using xCommons.Extensions;
|
|
using xCommons.Providers;
|
|
using xExceptions.Constants;
|
|
using xIdentityService.Controllers;
|
|
using xIdentityService.Interfaces;
|
|
using xWebinarService.Interfaces;
|
|
using xWebinarService.Models.Dtos;
|
|
using Microsoft.AspNetCore.Http;
|
|
using XFileDto = xFileService.Models.Dtos.XFileDto;
|
|
using xModels.Dtos;
|
|
using xTagService.Models.Dtos;
|
|
|
|
namespace xWebinarService.Controllers
|
|
{
|
|
/// <summary>
|
|
/// a Controller base Class which implement based Actions to Provides Webinar Provider Access ...
|
|
/// </summary>
|
|
public abstract class XWebinarServiceControllerBase : XIBaseProviderController, IXWebinarServiceControllerActions
|
|
{
|
|
//
|
|
#region Props ...
|
|
public IXWebinarProvider WebinarProvider { get; }
|
|
#endregion
|
|
|
|
//
|
|
#region Constructor ...
|
|
public XWebinarServiceControllerBase(
|
|
ILogger logger,
|
|
IXWebinarProvider webinarProvider,
|
|
XAppConfiguration appConfiguration,
|
|
IXIdentityProvider identityProvider,
|
|
XValidationProvider validationProvider
|
|
) : base(
|
|
logger,
|
|
appConfiguration,
|
|
identityProvider,
|
|
validationProvider
|
|
)
|
|
{
|
|
//
|
|
WebinarProvider = webinarProvider;
|
|
}
|
|
#endregion
|
|
|
|
//
|
|
#region Actions ...
|
|
/// <summary>
|
|
/// Create Webinar ...
|
|
/// </summary>
|
|
/// <param name="item"></param>
|
|
/// <param name="tags"></param>
|
|
/// <param name="files"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("")]
|
|
public virtual async Task<ActionResult<XWebinarDto>> CreateWebinar(
|
|
[FromForm] XWebinarDto item,
|
|
[FromQuery] string tags = null,
|
|
[FromForm] IFormFileCollection files = null
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Check Owner ...
|
|
if (item.OwnerId.IsNullOrEmpty())
|
|
{
|
|
item.OwnerId = userId;
|
|
}
|
|
|
|
//
|
|
// Preparing Tags List ...
|
|
var tagList = new List<string>();
|
|
if (!tags.IsNullOrEmpty())
|
|
{
|
|
tagList = tags
|
|
.ParseListString<string>()
|
|
.ToList();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.CreateWebinar(
|
|
item: item,
|
|
files: files,
|
|
tags: tagList,
|
|
userInfo: userInfo,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Update a Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="item"></param>
|
|
/// <returns></returns>
|
|
[HttpPut("{id}")]
|
|
public virtual async Task<ActionResult<XWebinarDto>> UpdateWebinar(
|
|
[FromRoute] Guid id,
|
|
[FromBody] XWebinarDto item
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Check Permission ...
|
|
bool has = item.OwnerId == userId || isAdmin;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.UpdateWebinar(
|
|
item: item,
|
|
userInfo: userInfo,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieve Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}")]
|
|
public virtual async Task<ActionResult<XWebinarDto>> GetWebinar(
|
|
[FromRoute] Guid id
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
var result = await WebinarProvider
|
|
.GetWebinar(id);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieve all Exists Webinars ...
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpGet("All")]
|
|
public virtual async Task<ActionResult<IEnumerable<XWebinarDto>>> GetWebinars()
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
var result = await WebinarProvider
|
|
.GetWebinars();
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Query Webinars ...
|
|
/// </summary>
|
|
/// <param name="query"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("Query")]
|
|
public virtual async Task<ActionResult<XQueryResult<XWebinarDto>>> QueryWebinars(
|
|
[FromQuery] XQuery query
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
var result = await WebinarProvider
|
|
.QueryWebinars(query);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Query Owned Webinars ...
|
|
/// </summary>
|
|
/// <param name="query"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("Query/Owned")]
|
|
public virtual async Task<ActionResult<XQueryResult<XWebinarDto>>> QueryOwnedWebinars(
|
|
[FromQuery] XQuery query
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.QueryOwnedWebinars(
|
|
query: query,
|
|
userInfo: userInfo
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Query Joinable Webinars ...
|
|
/// </summary>
|
|
/// <param name="query"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("Query/Joinable")]
|
|
public virtual async Task<ActionResult<XQueryResult<XWebinarDto>>> QueryJoinableWebinars(
|
|
[FromQuery] XQuery query
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.QueryJoinableWebinars(
|
|
query: query,
|
|
userInfo: userInfo
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Remove Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="webinarId"></param>
|
|
/// <returns></returns>
|
|
[HttpDelete("{id}")]
|
|
public virtual async Task<ActionResult<bool>> RemoveWebinar(
|
|
[FromRoute] Guid id
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Retrieve Entity ...
|
|
var entity = await WebinarProvider.GetWebinar(id);
|
|
bool has = !entity.IsNullOrDefault();
|
|
if (!has)
|
|
{
|
|
XException.NotFound.Throw();
|
|
}
|
|
|
|
//
|
|
// Check Permissions ...
|
|
has = entity.OwnerId == userId || isAdmin;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.RemoveWebinar(
|
|
webinarId: id,
|
|
userInfo: userInfo,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
//
|
|
#region WebinarSubscriber ...
|
|
/// <summary>
|
|
/// Subscribe a User to Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="subscriberId"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("{id}/Subscribe/{subscriberId}")]
|
|
public virtual async Task<ActionResult<bool>> Subscribe(
|
|
[FromRoute] Guid id,
|
|
[FromRoute] string subscriberId
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Retrieve Entity ...
|
|
var entity = await WebinarProvider.GetWebinar(id);
|
|
bool has = !entity.IsNullOrDefault();
|
|
if (!has)
|
|
{
|
|
XException.NotFound.Throw();
|
|
}
|
|
|
|
//
|
|
// Check Permissions ...
|
|
has =
|
|
isAdmin ||
|
|
entity.OwnerId == userId ||
|
|
entity.Type == Constants.XWebinarType.Public;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.Subscribe(
|
|
webinarId: id,
|
|
userInfo: userInfo,
|
|
subscriberId: subscriberId,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check Specified User Subscribed on a Webinar or not ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="subscriberId"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/IsSubscribed/{subscriberId}")]
|
|
public virtual async Task<ActionResult<bool>> IsSubscribed(
|
|
[FromRoute] Guid id,
|
|
[FromRoute] string subscriberId
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Retrieve Entity ...
|
|
var entity = await WebinarProvider.GetWebinar(id);
|
|
bool has = !entity.IsNullOrDefault();
|
|
if (!has)
|
|
{
|
|
XException.NotFound.Throw();
|
|
}
|
|
|
|
//
|
|
// Check Permissions ...
|
|
has =
|
|
isAdmin ||
|
|
entity.OwnerId == userId;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.IsSubscribed(
|
|
webinarId: id,
|
|
userInfo: userInfo,
|
|
subscriberId: subscriberId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Unsubscribe Specified User from a Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="subscriberId"></param>
|
|
/// <returns></returns>
|
|
[HttpDelete("{id}/Unsubscribe/{subscriberId}")]
|
|
public virtual async Task<ActionResult<bool>> Unsubscribe(
|
|
[FromRoute] Guid id,
|
|
[FromRoute] string subscriberId
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Retrieve Entity ...
|
|
var entity = await WebinarProvider.GetWebinar(id);
|
|
bool has = !entity.IsNullOrDefault();
|
|
if (!has)
|
|
{
|
|
XException.NotFound.Throw();
|
|
}
|
|
|
|
//
|
|
// Check Permissions ...
|
|
has =
|
|
isAdmin ||
|
|
subscriberId == userId ||
|
|
entity.OwnerId == userId;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.Unsubscribe(
|
|
webinarId: id,
|
|
userInfo: userInfo,
|
|
subscriberId: subscriberId,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieve Specified Subscriber ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="subscriberId"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/Subscriber/{subscriberId}")]
|
|
public virtual async Task<ActionResult<XWebinarSubscriberDto>> GetSubscriber(
|
|
[FromRoute] Guid id,
|
|
[FromRoute] string subscriberId
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Retrieve Entity ...
|
|
var entity = await WebinarProvider.GetWebinar(id);
|
|
bool has = !entity.IsNullOrDefault();
|
|
if (!has)
|
|
{
|
|
XException.NotFound.Throw();
|
|
}
|
|
|
|
//
|
|
// Check Permissions ...
|
|
has =
|
|
isAdmin ||
|
|
entity.OwnerId == userId;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.GetSubscriber(
|
|
webinarId: id,
|
|
userInfo: userInfo,
|
|
subscriberId: subscriberId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get all Specified Webinars Subscribers ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/Subscribers")]
|
|
public virtual async Task<ActionResult<IEnumerable<XWebinarSubscriberDto>>> GetSubscribers(
|
|
[FromRoute] Guid id
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Retrieve Entity ...
|
|
var entity = await WebinarProvider.GetWebinar(id);
|
|
bool has = !entity.IsNullOrDefault();
|
|
if (!has)
|
|
{
|
|
XException.NotFound.Throw();
|
|
}
|
|
|
|
//
|
|
// Check Permissions ...
|
|
has =
|
|
isAdmin ||
|
|
entity.OwnerId == userId;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.GetSubscribers(
|
|
webinarId: id,
|
|
userInfo: userInfo
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Query Specified Webinar's Subscribers ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="query"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/Subscribers/Query")]
|
|
public virtual async Task<ActionResult<XQueryResult<XWebinarSubscriberDto>>> QuerySubscribers(
|
|
[FromRoute] Guid id,
|
|
[FromQuery] XQuery query
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
bool isAdmin = userInfo.Roles.Any(r => r.ToNormalString() == "admin");
|
|
var userId = userInfo.UserId;
|
|
|
|
//
|
|
// Retrieve Entity ...
|
|
var entity = await WebinarProvider.GetWebinar(id);
|
|
bool has = !entity.IsNullOrDefault();
|
|
if (!has)
|
|
{
|
|
XException.NotFound.Throw();
|
|
}
|
|
|
|
//
|
|
// Check Permissions ...
|
|
has =
|
|
isAdmin ||
|
|
entity.OwnerId == userId;
|
|
if (!has)
|
|
{
|
|
XException.NotAllowed.Throw();
|
|
}
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.QuerySubscribers(
|
|
query: query,
|
|
webinarId: id,
|
|
userInfo: userInfo
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
//
|
|
#region File Actions ...
|
|
/// <summary>
|
|
/// Upload Specified Files for Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="files"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("{id}/Files")]
|
|
public virtual async Task<ActionResult<IEnumerable<XFileDto>>> UploadFiles(
|
|
[FromRoute] Guid id,
|
|
[FromForm] IFormFileCollection files
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.UploadFiles(
|
|
id: id,
|
|
files: files,
|
|
userInfo: userInfo,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieve Specified Webinar's Files ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/Files")]
|
|
public virtual async Task<ActionResult<IEnumerable<XFileDto>>> GetFiles(
|
|
[FromRoute] Guid id
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
var userInfo = await GetUserInfo();
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.GetFiles(
|
|
id: id,
|
|
userInfo: userInfo
|
|
);
|
|
|
|
//
|
|
return Ok(result.
|
|
ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Stream Specified File of Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="fileId"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/Files/{fileId}/Stream")]
|
|
public virtual async Task<ActionResult> StreamFile(
|
|
[FromRoute] Guid id,
|
|
[FromRoute] Guid fileId
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
var result = await WebinarProvider
|
|
.StreamFile(
|
|
id: id,
|
|
fileId: fileId
|
|
);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Download Specified File of Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="fileId"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/Files/{fileId}/Download")]
|
|
public virtual async Task<ActionResult> DownloadFile(
|
|
[FromRoute] Guid id,
|
|
[FromRoute] Guid fileId
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
var result = await WebinarProvider
|
|
.DownloadFile(
|
|
id: id,
|
|
fileId: fileId
|
|
);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Attach Provided Files to Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="ids"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("{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>
|
|
[HttpDelete("{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
|
|
|
|
//
|
|
#region Tags Actions ...
|
|
/// <summary>
|
|
/// Attach Specified Tags To Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="tags"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("{id}/Tags")]
|
|
public virtual async Task<ActionResult> AttachTags(
|
|
[FromRoute] Guid id,
|
|
[FromQuery] string tags
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
|
|
//
|
|
await WebinarProvider
|
|
.AttachTags(
|
|
id: id,
|
|
tags: tags,
|
|
userInfo: userInfo,
|
|
forceAttachToFiles: true,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Detach Specified Tags From Specified Webinar ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <param name="tags">if null, remove all attached tags ...</param>
|
|
/// <returns></returns>
|
|
[HttpDelete("{id}/Tags")]
|
|
public virtual async Task<ActionResult> DetachTags(
|
|
[FromRoute] Guid id,
|
|
[FromQuery] string tags
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
var connectionId = GetConnectionId();
|
|
|
|
//
|
|
await WebinarProvider
|
|
.DetachTags(
|
|
id: id,
|
|
tags: tags,
|
|
userInfo: userInfo,
|
|
forceDetachFromFiles: true,
|
|
connectionId: connectionId
|
|
);
|
|
|
|
//
|
|
return Ok();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieve Specified Webinars Tags ...
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpGet("{id}/Tags")]
|
|
public virtual async Task<ActionResult<IEnumerable<XTagDto>>> GetTags(
|
|
[FromRoute] Guid id
|
|
)
|
|
{
|
|
//
|
|
// Do ...
|
|
try
|
|
{
|
|
//
|
|
// Retrieve User Info ...
|
|
var userInfo = await GetUserInfo();
|
|
|
|
//
|
|
var result = await WebinarProvider
|
|
.GetTags(
|
|
id: id,
|
|
userInfo: userInfo
|
|
);
|
|
|
|
//
|
|
return Ok(result
|
|
.ToDynamicObject());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//
|
|
var result = GetExceptionActionResult(ex);
|
|
return result;
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
} |