using Oqtane.Models;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Oqtane.Documentation;
using Oqtane.Shared;
namespace Oqtane.Services
{
///
/// Service to manage a
///
public interface IModuleDefinitionService
{
///
/// Returns a list of module definitions for the given site
///
///
///
Task> GetModuleDefinitionsAsync(int siteId);
///
/// Returns a specific module definition
///
///
///
///
Task GetModuleDefinitionAsync(int moduleDefinitionId, int siteId);
///
/// Updates a existing module definition
///
///
///
Task UpdateModuleDefinitionAsync(ModuleDefinition moduleDefinition);
///
/// Deletes a module definition
///
///
///
///
Task DeleteModuleDefinitionAsync(int moduleDefinitionId, int siteId);
///
/// Creates a new module definition
///
///
///
Task CreateModuleDefinitionAsync(ModuleDefinition moduleDefinition);
///
/// Returns a list of module definition templates
///
///
Task> GetModuleDefinitionTemplatesAsync();
}
[PrivateApi("Don't show in the documentation, as everything should use the Interface")]
public class ModuleDefinitionService : ServiceBase, IModuleDefinitionService
{
public ModuleDefinitionService(HttpClient http, SiteState siteState) : base(http, siteState) { }
private string Apiurl => CreateApiUrl("ModuleDefinition");
public async Task> GetModuleDefinitionsAsync(int siteId)
{
List moduledefinitions = await GetJsonAsync>($"{Apiurl}?siteid={siteId}");
return moduledefinitions.OrderBy(item => item.Name).ToList();
}
public async Task GetModuleDefinitionAsync(int moduleDefinitionId, int siteId)
{
return await GetJsonAsync($"{Apiurl}/{moduleDefinitionId}?siteid={siteId}");
}
public async Task UpdateModuleDefinitionAsync(ModuleDefinition moduleDefinition)
{
await PutJsonAsync($"{Apiurl}/{moduleDefinition.ModuleDefinitionId}", moduleDefinition);
}
public async Task DeleteModuleDefinitionAsync(int moduleDefinitionId, int siteId)
{
await DeleteAsync($"{Apiurl}/{moduleDefinitionId}?siteid={siteId}");
}
public async Task CreateModuleDefinitionAsync(ModuleDefinition moduleDefinition)
{
return await PostJsonAsync($"{Apiurl}", moduleDefinition);
}
public async Task> GetModuleDefinitionTemplatesAsync()
{
List templates = await GetJsonAsync>($"{Apiurl}/templates");
return templates;
}
}
}