using System; 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 xIdentityService.Controllers; using xIdentityService.Interfaces; using xModels.Dtos; using xWebinarService.Interfaces; using xWebinarService.Models.Dtos; namespace xWebinarService.Controller { /// /// a Controller base Class which implement based Actions to Provides Webinar Provider Access ... /// public 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 ... /// /// Create Webinar ... /// /// /// [HttpPost("Create")] public virtual async Task> CreateWebinar( [FromBody] XWebinarDto item ) { // // Do ... try { // var result = await WebinarProvider .CreateWebinar(item); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Update a Webinar ... /// /// /// [HttpPost("Update")] public virtual async Task> UpdateWebinar( [FromBody] XWebinarDto item ) { // // Do ... try { // var result = await WebinarProvider .UpdateWebinar(item); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve Specified Webinar ... /// /// /// [HttpGet("")] public virtual async Task> GetWebinar( [FromQuery] Guid id ) { // // Do ... try { // var result = await WebinarProvider .GetWebinar(id); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve all Exists Webinars ... /// /// [HttpGet("All")] public virtual async Task>> GetWebinars() { // // Do ... try { // var result = await WebinarProvider .GetWebinars(); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Query Webinars ... /// /// /// [HttpGet("Query")] public virtual async Task>> 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; } } /// /// Remove Specified Webinar ... /// /// /// /// [HttpDelete("Remove")] public virtual async Task> RemoveWebinar( [FromQuery] Guid webinarId ) { // // Do ... try { // // Retrieve UserInfo ... var userInfo = await GetUserInfo(); var requesterId = userInfo.UserId; // var result = await WebinarProvider .RemoveWebinar( webinarId: webinarId, requesterUserSelectByParam: requesterId ); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } #endregion // #region WebinarSubscriber ... /// /// Subscribe a User to Webinar ... /// /// /// /// /// [HttpPost("Subscribe")] public virtual async Task> Subscribe( [FromQuery] Guid webinarId, [FromQuery] string subscriberId ) { // // Do ... try { // // Retrieve UserInfo ... var userInfo = await GetUserInfo(); var requesterId = userInfo.UserId; // var result = await WebinarProvider .Subscribe( webinarId: webinarId, subscriberId: subscriberId, requesterUserSelectByParam: requesterId ); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Check Specified User Subscribed on a Webinar or not ... /// /// /// /// [HttpGet("IsSubscribed")] public virtual async Task> IsSubscribed( [FromQuery] Guid webinarId, [FromQuery] string subscriberId ) { // // Do ... try { // // Retrieve UserInfo ... var userInfo = await GetUserInfo(); var requesterId = userInfo.UserId; // var result = await WebinarProvider .IsSubscribed( webinarId: webinarId, subscriberId: subscriberId ); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Unsubscribe Specified User from a Specified Webinar ... /// /// /// /// /// [HttpPost("Unsubscribe")] public virtual async Task> Unsubscribe( [FromQuery] Guid webinarId, [FromQuery] string subscriberId ) { // // Do ... try { // // Retrieve UserInfo ... var userInfo = await GetUserInfo(); var requesterId = userInfo.UserId; // var result = await WebinarProvider .Unsubscribe( webinarId: webinarId, subscriberId: subscriberId, requesterUserSelectByParam: requesterId ); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Retrieve Specified Subscriber ... /// /// /// /// /// [HttpGet("GetSubscriber")] public virtual async Task> GetSubscriber( [FromQuery] Guid webinarId, [FromQuery] string subscriberId ) { // // Do ... try { // // Retrieve UserInfo ... var userInfo = await GetUserInfo(); var requesterId = userInfo.UserId; // var result = await WebinarProvider .GetSubscriber( webinarId: webinarId, subscriberId: subscriberId, requesterUserSelectByParam: requesterId ); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Get all Specified Webinars Subscribers ... /// /// /// /// [HttpGet("GetSubscribers")] public virtual async Task>> GetSubscribers( [FromQuery] Guid webinarId ) { // // Do ... try { // // Retrieve UserInfo ... var userInfo = await GetUserInfo(); var requesterId = userInfo.UserId; // var result = await WebinarProvider .GetSubscribers( webinarId: webinarId, requesterUserSelectByParam: requesterId ); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } /// /// Query Specified Webinar's Subscribers ... /// /// /// /// /// [HttpGet("QuerySubscribers")] public virtual async Task>> QuerySubscribers( [FromQuery] XQuery query, [FromQuery] Guid webinarId ) { // // Do ... try { // // Retrieve UserInfo ... var userInfo = await GetUserInfo(); var requesterId = userInfo.UserId; // var result = await WebinarProvider .QuerySubscribers( query: query, webinarId: webinarId, requesterUserSelectByParam: requesterId ); // return Ok(result. ToDynamicObject()); } catch (Exception ex) { // var result = GetExceptionActionResult(ex); return result; } } #endregion // // Non Actions ... } }