using System.Text; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Primitives; using WatchIt.Common.Model.Persons; using WatchIt.Common.Model.Rating; using WatchIt.Common.Model.Roles; using WatchIt.Common.Services.HttpClient; using WatchIt.Website.Services.Configuration; namespace WatchIt.Website.Services.Client.Persons; public class PersonsClientService : BaseClientService, IPersonsClientService { #region SERVICES private IHttpClientService _httpClientService; private IConfigurationService _configurationService; #endregion #region CONSTRUCTORS public PersonsClientService(IHttpClientService httpClientService, IConfigurationService configurationService) : base(configurationService) { _httpClientService = httpClientService; _configurationService = configurationService; } #endregion #region PUBLIC METHODS #region Main public async Task GetAllPersons(PersonQueryParameters? query = null, Action>? successAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetAllPersons); HttpRequest request = new HttpRequest(HttpMethodType.Get, url); request.Query = query; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .ExecuteAction(); } public async Task GetPerson(long id, Action? successAction = null, Action? notFoundAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetPerson, id); HttpRequest request = new HttpRequest(HttpMethodType.Get, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor404NotFound(notFoundAction) .ExecuteAction(); } public async Task PostPerson(PersonRequest data, Action? successAction = null, Action>? badRequestAction = null, Action? unauthorizedAction = null, Action? forbiddenAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.PostPerson); HttpRequest request = new HttpRequest(HttpMethodType.Post, url); request.Body = data; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor400BadRequest(badRequestAction) .RegisterActionFor401Unauthorized(unauthorizedAction) .RegisterActionFor403Forbidden(forbiddenAction) .ExecuteAction(); } public async Task PutPerson(long id, PersonRequest data, Action? successAction = null, Action>? badRequestAction = null, Action? unauthorizedAction = null, Action? forbiddenAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.PutPerson, id); HttpRequest request = new HttpRequest(HttpMethodType.Put, url); request.Body = data; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor400BadRequest(badRequestAction) .RegisterActionFor401Unauthorized(unauthorizedAction) .RegisterActionFor403Forbidden(forbiddenAction) .ExecuteAction(); } public async Task DeletePerson(long id, Action? successAction = null, Action? unauthorizedAction = null, Action? forbiddenAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.DeletePerson, id); HttpRequest request = new HttpRequest(HttpMethodType.Delete, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor401Unauthorized(unauthorizedAction) .RegisterActionFor403Forbidden(forbiddenAction) .ExecuteAction(); } #endregion #region View count public async Task GetPersonsViewRank(int? first = null, int? days = null, Action>? successAction = null, Action>? badRequestAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetPersonsViewRank); if (first.HasValue || days.HasValue) { StringBuilder urlBuilder = new StringBuilder(url); urlBuilder.Append('?'); bool firstParameter = true; if (first.HasValue) { urlBuilder.Append($"first={first.Value}"); firstParameter = false; } if (days.HasValue) { if (!firstParameter) { urlBuilder.Append('&'); } urlBuilder.Append($"days={days.Value}"); } url = urlBuilder.ToString(); } HttpRequest request = new HttpRequest(HttpMethodType.Get, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor400BadRequest(badRequestAction) .ExecuteAction(); } public async Task PostPersonView(long personId, Action? successAction = null, Action? notFoundAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.PostPersonsView, personId); HttpRequest request = new HttpRequest(HttpMethodType.Post, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor404NotFound(notFoundAction) .ExecuteAction(); } #endregion #region Photo public async Task GetPersonPhoto(long id, Action? successAction = null, Action>? badRequestAction = null, Action? notFoundAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetPersonPhoto, id); HttpRequest request = new HttpRequest(HttpMethodType.Get, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor400BadRequest(badRequestAction) .RegisterActionFor404NotFound(notFoundAction) .ExecuteAction(); } public async Task PutPersonPhoto(long id, PersonPhotoRequest data, Action? successAction = null, Action>? badRequestAction = null, Action? unauthorizedAction = null, Action? forbiddenAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.PutPersonPhoto, id); HttpRequest request = new HttpRequest(HttpMethodType.Put, url) { Body = data }; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor400BadRequest(badRequestAction) .RegisterActionFor401Unauthorized(unauthorizedAction) .RegisterActionFor403Forbidden(forbiddenAction) .ExecuteAction(); } public async Task DeletePersonPhoto(long id, Action? successAction = null, Action? unauthorizedAction = null, Action? forbiddenAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.DeletePersonPhoto, id); HttpRequest request = new HttpRequest(HttpMethodType.Delete, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor401Unauthorized(unauthorizedAction) .RegisterActionFor403Forbidden(forbiddenAction) .ExecuteAction(); } #endregion #region Roles public async Task GetPersonAllActorRoles(long id, ActorRolePersonQueryParameters? query = null, Action>? successAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetPersonAllActorRoles, id); HttpRequest request = new HttpRequest(HttpMethodType.Get, url); request.Query = query; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .ExecuteAction(); } public async Task PostPersonActorRole(long id, ActorRolePersonRequest data, Action? successAction = null, Action>? badRequestAction = null, Action? unauthorizedAction = null, Action? forbiddenAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.PostPersonActorRole, id); HttpRequest request = new HttpRequest(HttpMethodType.Post, url); request.Body = data; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor400BadRequest(badRequestAction) .RegisterActionFor401Unauthorized(unauthorizedAction) .RegisterActionFor403Forbidden(forbiddenAction) .ExecuteAction(); } public async Task GetPersonAllCreatorRoles(long id, CreatorRolePersonQueryParameters? query = null, Action>? successAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetPersonAllCreatorRoles, id); HttpRequest request = new HttpRequest(HttpMethodType.Get, url); request.Query = query; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .ExecuteAction(); } public async Task PostPersonCreatorRole(long id, CreatorRolePersonRequest data, Action? successAction = null, Action>? badRequestAction = null, Action? unauthorizedAction = null, Action? forbiddenAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.PostPersonCreatorRole, id); HttpRequest request = new HttpRequest(HttpMethodType.Post, url); request.Body = data; HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor400BadRequest(badRequestAction) .RegisterActionFor401Unauthorized(unauthorizedAction) .RegisterActionFor403Forbidden(forbiddenAction) .ExecuteAction(); } #endregion #region Rating public async Task GetPersonGlobalRating(long id, Action? successAction = null, Action? notFoundAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetPersonGlobalRating, id); HttpRequest request = new HttpRequest(HttpMethodType.Get, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor404NotFound(notFoundAction) .ExecuteAction(); } public async Task GetPersonUserRating(long id, long userId, Action? successAction = null, Action? notFoundAction = null) { string url = GetUrl(EndpointsConfiguration.Persons.GetPersonUserRating, id, userId); HttpRequest request = new HttpRequest(HttpMethodType.Get, url); HttpResponse response = await _httpClientService.SendRequestAsync(request); response.RegisterActionFor2XXSuccess(successAction) .RegisterActionFor404NotFound(notFoundAction) .ExecuteAction(); } #endregion #endregion #region PRIVATE METHODS protected override string GetServiceBase() => EndpointsConfiguration.Persons.Base; #endregion }