using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Oqtane.Services; using Oqtane.Shared; using SZUAbsolventenverein.Module.PremiumArea.Models; namespace SZUAbsolventenverein.Module.PremiumArea.Services { public interface IEngineerApplicationService { Task> GetApplicationsAsync(int ModuleId); Task> GetApplicationsAsync(int ModuleId, string status); Task GetApplicationAsync(int ApplicationId, int ModuleId); Task AddApplicationAsync(EngineerApplication Application); Task UpdateApplicationAsync(EngineerApplication Application); Task DeleteApplicationAsync(int ApplicationId, int ModuleId); Task ApproveApplicationAsync(int ApplicationId, int ModuleId); Task RejectApplicationAsync(int ApplicationId, int ModuleId, string Reason); Task ReportApplicationAsync(int ApplicationId, int ModuleId, string Reason); } public class EngineerApplicationService : ServiceBase, IEngineerApplicationService { public EngineerApplicationService(HttpClient http, SiteState siteState) : base(http, siteState) { } private string Apiurl => CreateApiUrl("EngineerApplication"); public async Task> GetApplicationsAsync(int ModuleId) { return await GetJsonAsync>(CreateAuthorizationPolicyUrl($"{Apiurl}?moduleid={ModuleId}", EntityNames.Module, ModuleId)); } public async Task> GetApplicationsAsync(int ModuleId, string status) { return await GetJsonAsync>(CreateAuthorizationPolicyUrl($"{Apiurl}/status/{status}?moduleid={ModuleId}", EntityNames.Module, ModuleId)); } public async Task GetApplicationAsync(int ApplicationId, int ModuleId) { return await GetJsonAsync(CreateAuthorizationPolicyUrl($"{Apiurl}/{ApplicationId}?moduleid={ModuleId}", EntityNames.Module, ModuleId)); } public async Task AddApplicationAsync(EngineerApplication Application) { return await PostJsonAsync(CreateAuthorizationPolicyUrl($"{Apiurl}", EntityNames.Module, Application.ModuleId), Application); } public async Task UpdateApplicationAsync(EngineerApplication Application) { return await PutJsonAsync(CreateAuthorizationPolicyUrl($"{Apiurl}/{Application.ApplicationId}", EntityNames.Module, Application.ModuleId), Application); } public async Task DeleteApplicationAsync(int ApplicationId, int ModuleId) { await DeleteAsync(CreateAuthorizationPolicyUrl($"{Apiurl}/{ApplicationId}?moduleid={ModuleId}", EntityNames.Module, ModuleId)); } public async Task ApproveApplicationAsync(int ApplicationId, int ModuleId) { await PostAsync(CreateAuthorizationPolicyUrl($"{Apiurl}/approve/{ApplicationId}?moduleid={ModuleId}", EntityNames.Module, ModuleId)); } public async Task RejectApplicationAsync(int ApplicationId, int ModuleId, string Reason) { await PostAsync(CreateAuthorizationPolicyUrl($"{Apiurl}/reject/{ApplicationId}?moduleid={ModuleId}&reason={System.Net.WebUtility.UrlEncode(Reason)}", EntityNames.Module, ModuleId)); } public async Task ReportApplicationAsync(int ApplicationId, int ModuleId, string Reason) { await PostJsonAsync(CreateAuthorizationPolicyUrl($"{Apiurl}/report/{ApplicationId}?moduleid={ModuleId}", EntityNames.Module, ModuleId), Reason); } } }