using FastReport.Auth; using FastReport.Cloud.FastReport.Models; using FastReport.Cloud.FastReport.Models.DataSource; using System.Text; using System.Threading.Tasks; namespace FastReport.Cloud.FastReport { internal class FRCloudDataSourcesProvider : HttpMessages, IFRCloudDataSourcesProvider { const string API_DATA_SOURCE_BASEPATH = "api/data/v1/DataSources"; public FRCloudDataSourcesProvider(AuthService authService) : base(authService) { } public DataSourceVM CreateDataSource(CreateDataSourceVM dataSource) { var url = CreateDataSourceURL(); var request = GetHttpWebRequestContent(url, dataSource); var result = Send(request); return result; } #if ASYNC public async Task CreateDataSourceAsync(CreateDataSourceVM dataSource) { var url = CreateDataSourceURL(); var request = await GetHttpWebRequestContentAsync(url, dataSource); var result = await SendAsync(request); return result; } #endif public DataSourcesVM GetAvailableDataSources(DataSourcesOptions options) { var url = GetAvailableDataSourcesURL(options); var request = GetHttpWebRequest(url); var result = Send(request); return result; } #if ASYNC public async Task GetAvailableDataSourcesAsync(DataSourcesOptions options) { var url = GetAvailableDataSourcesURL(options); var request = GetHttpWebRequest(url); var result = await SendAsync(request); return result; } #endif public DataSourceVM GetDataSource(string id) { var url = GetDataSourceURL(id); var request = GetHttpWebRequest(url); var result = Send(request); return result; } #if ASYNC public async Task GetDataSourceAsync(string id) { var url = GetDataSourceURL(id); var request = GetHttpWebRequest(url); var result = await SendAsync(request); return result; } #endif public void FetchData(string id) { var url = GetFetchDataURL(id); var request = GetHttpWebRequest(url); Send(request); } #if ASYNC public async Task FetchDataAsync(string id) { var url = GetFetchDataURL(id); var request = GetHttpWebRequest(url); await SendAsync(request); } #endif public void UpdateSubscriptionDataSource(string id, UpdateDataSourceSubcriptionVM model) { var url = GetUpdateSubscriptionDataSourceURL(id); var request = GetHttpWebRequestContent(url, model, HttpMethod.Put); Send(request); } #if ASYNC public async Task UpdateSubscriptionDataSourceAsync(string id, UpdateDataSourceSubcriptionVM model) { var url = GetUpdateSubscriptionDataSourceURL(id); var request = await GetHttpWebRequestContentAsync(url, model, HttpMethod.Put); await SendAsync(request); } #endif public void RenameDataSource(string id, RenameDataSourceVM model) { var url = GetRenameDataSourceURL(id); var request = GetHttpWebRequestContent(url, model, HttpMethod.Put); Send(request); } #if ASYNC public async Task RenameDataSourceAsync(string id, RenameDataSourceVM model) { var url = GetRenameDataSourceURL(id); var request = await GetHttpWebRequestContentAsync(url, model, HttpMethod.Put); await SendAsync(request); } #endif public void UpdateConnectionString(string id, UpdateDataSourceConnectionStringVM model) { var url = GetUpdateDataSourceConnectionURL(id); var request = GetHttpWebRequestContent(url, model, HttpMethod.Put); Send(request); } #if ASYNC public async Task UpdateConnectionStringAsync(string id, UpdateDataSourceConnectionStringVM model) { var url = GetUpdateDataSourceConnectionURL(id); var request = await GetHttpWebRequestContentAsync(url, model, HttpMethod.Put); await SendAsync(request); } #endif #region CreatingURL protected string CreateDataSourceURL() { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append(API_DATA_SOURCE_BASEPATH); var url_ = urlBuilder_.ToString(); return url_; } protected string GetAvailableDataSourcesURL(DataSourcesOptions options) { var queryBuilder_ = new StringBuilder(); queryBuilder_.Append(API_DATA_SOURCE_BASEPATH).Append('?'); if (options.SubscriptionId != null) queryBuilder_.Append("subscriptionId=").Append(options.SubscriptionId).Append('&'); if (options.Skip != null) queryBuilder_.Append("skip=").Append(options.Skip.Value).Append('&'); if (options.Take != null) queryBuilder_.Append("take=").Append(options.Take.Value).Append('&'); queryBuilder_.Length--; return queryBuilder_.ToString(); } protected string GetDataSourceURL(string id) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append(API_DATA_SOURCE_BASEPATH).Append("/{id}"); urlBuilder_.Replace("{id}", id); return urlBuilder_.ToString(); } protected string GetFetchDataURL(string id) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append(API_DATA_SOURCE_BASEPATH).Append($"/{id}/").Append("fetch"); return urlBuilder_.ToString(); } protected string GetUpdateSubscriptionDataSourceURL(string id) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append(API_DATA_SOURCE_BASEPATH).Append($"/{id}/").Append("updateSubscription"); return urlBuilder_.ToString(); } protected string GetRenameDataSourceURL(string id) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append(API_DATA_SOURCE_BASEPATH).Append($"/{id}/").Append("rename"); return urlBuilder_.ToString(); } protected string GetUpdateDataSourceConnectionURL(string id) { var urlBuilder_ = new StringBuilder(); urlBuilder_.Append(API_DATA_SOURCE_BASEPATH).Append($"/{id}/").Append("ConnectionString"); return urlBuilder_.ToString(); } #endregion } }