using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using xModels.Dtos;
using XFileDto = xFileService.Models.Dtos.XFileDto;
using xWebinarService.Models.Dtos;
namespace xWebinarService.Interfaces
{
///
/// an Interface to Provides Webinar Provider Actions ...
///
public interface IXWebinarServiceControllerActions
{
//
#region Actions ...
///
/// Create Webinar ...
///
///
///
///
///
Task> CreateWebinar(
[FromForm] XWebinarDto item,
[FromQuery] string tags = null,
[FromForm] IFormFileCollection files = null
);
///
/// Update a Webinar ...
///
///
///
///
Task> UpdateWebinar(
[FromRoute] Guid id,
[FromBody] XWebinarDto item
);
///
/// Retrieve Specified Webinar ...
///
///
///
Task> GetWebinar(
[FromRoute] Guid id
);
///
/// Retrieve all Exists Webinars ...
///
///
Task>> GetWebinars();
///
/// Query Webinars ...
///
///
///
Task>> QueryWebinars(
[FromQuery] XQuery query
);
///
/// Query Owned Webinars ...
///
///
///
Task>> QueryOwnedWebinars(
[FromQuery] XQuery query
);
///
/// Query Joinable Webinars ...
///
///
///
Task>> QueryJoinableWebinars(
[FromQuery] XQuery query
);
///
/// Remove Specified Webinar ...
///
///
///
Task> RemoveWebinar(
[FromRoute] Guid id
);
#endregion
//
#region WebinarSubscriber ...
///
/// Subscribe a User to Webinar ...
///
///
///
///
Task> Subscribe(
[FromRoute] Guid id,
[FromRoute] string subscriberId
);
///
/// Check Specified User Subscribed on a Webinar or not ...
///
///
///
///
Task> IsSubscribed(
[FromRoute] Guid id,
[FromRoute] string subscriberId
);
///
/// Unsubscribe Specified User from a Specified Webinar ...
///
///
///
///
Task> Unsubscribe(
[FromRoute] Guid id,
[FromRoute] string subscriberId
);
///
/// Retrieve Specified Subscriber ...
///
///
///
///
Task> GetSubscriber(
[FromRoute] Guid id,
[FromRoute] string subscriberId
);
///
/// Get all Specified Webinars Subscribers ...
///
///
///
Task>> GetSubscribers(
[FromRoute] Guid id
);
///
/// Query Specified Webinar's Subscribers ...
///
///
///
///
Task>> QuerySubscribers(
[FromRoute] Guid id,
[FromQuery] XQuery query
);
#endregion
//
#region File Actions ...
///
/// Upload Specified Files for Specified Webinar ...
///
///
///
///
Task>> UploadFiles(
[FromRoute] Guid id,
[FromForm] IFormFileCollection files
);
///
/// Remove Specified (All) Files of Specified Webinar ...
///
///
///
///
Task>> RemoveFiles(
[FromRoute] Guid id,
[FromQuery] string ids = null
);
///
/// Retrieve Specified Webinar's Files ...
///
///
///
Task>> GetFiles(
[FromRoute] Guid id
);
///
/// Stream Specified File of Specified Webinar ...
///
///
///
///
Task StreamFile(
[FromRoute] Guid id,
[FromRoute] Guid fileId
);
///
/// Download Specified File of Specified Webinar ...
///
///
///
///
Task DownloadFile(
[FromRoute] Guid id,
[FromRoute] Guid fileId
);
///
/// Attach Provided Files to Specified Webinar ...
///
///
///
///
[HttpGet("{id}/Files/AttachMany")]
Task AttachFiles(
[FromRoute] Guid id,
[FromQuery] string ids
);
///
/// Detach Provided Files to Specified Webinar ...
///
///
/// if null, detach all files ...
///
[HttpGet("{id}/Files/DetachMany")]
Task DetachFiles(
[FromRoute] Guid id,
[FromQuery] string ids = null
);
#endregion
//
#region Tags Actions ...
///
/// Attach Specified Tags To Specified Webinar ...
///
///
///
///
Task AttachTags(
[FromRoute] Guid id,
[FromQuery] string tags
);
///
/// Detach Specified Tags From Specified Webinar ...
///
///
///
///
Task DetachTags(
[FromRoute] Guid id,
[FromQuery] string tags
);
///
/// Retrieve Specified Webinars Tags ...
///
///
///
Task>> GetTags(
[FromRoute] Guid id
);
#endregion
}
}