Skip to content

Commit

Permalink
feature: configuração de frete
Browse files Browse the repository at this point in the history
  • Loading branch information
Brunobento1990 committed Jul 15, 2024
1 parent 457cb6d commit 167287c
Show file tree
Hide file tree
Showing 10 changed files with 168 additions and 14 deletions.
42 changes: 42 additions & 0 deletions OpenAdm.Api/Controllers/ConfiguracaoDeFreteController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using Microsoft.AspNetCore.Mvc;
using OpenAdm.Api.Attributes;
using OpenAdm.Application.Dtos.ConfiguracoesDeFrete;
using OpenAdm.Application.Dtos.Response;
using OpenAdm.Application.Interfaces;
using OpenAdm.Application.Models.ConfiguracoesDeFrete;

namespace OpenAdm.Api.Controllers;

[ApiController]
[Route("configuracao-de-frete")]
[Autentica]
[IsFuncionario]
public class ConfiguracaoDeFreteController : ControllerBase
{
private readonly IConfiguracaoDeFreteService _configuracaoDeFreteService;

public ConfiguracaoDeFreteController(IConfiguracaoDeFreteService configuracaoDeFreteService)
{
_configuracaoDeFreteService = configuracaoDeFreteService;
}

[HttpPost]
[ProducesResponseType<ConfiguracaoDeFreteViewModel>(200)]
[ProducesResponseType<ErrorResponse>(400)]
[ProducesResponseType<ErrorResponse>(401)]
public async Task<IActionResult> CreateOrUpdate(ConfiguracaoDeFreteCreateDto configuracaoDeFreteCreateDto)
{
var response = await _configuracaoDeFreteService.CreateOrUpdateAsync(configuracaoDeFreteCreateDto);
return Ok(response);
}

[HttpGet]
[ProducesResponseType<ConfiguracaoDeFreteViewModel>(200)]
[ProducesResponseType<ErrorResponse>(400)]
[ProducesResponseType<ErrorResponse>(401)]
public async Task<IActionResult> Get()
{
var response = await _configuracaoDeFreteService.GetAsync();
return Ok(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Domain.Pkg.Entities;

namespace OpenAdm.Application.Dtos.ConfiguracoesDeFrete;

public class ConfiguracaoDeFreteCreateDto
{
public string CepOrigem { get; set; } = string.Empty;
public string AlturaEmbalagem { get; set; } = string.Empty;
public string LarguraEmbalagem { get; set; } = string.Empty;
public string ComprimentoEmbalagem { get; set; } = string.Empty;
public decimal? Peso { get; set; }

public ConfiguracaoDeFrete ToEntity()
{
return new ConfiguracaoDeFrete(
id: Guid.NewGuid(),
dataDeCriacao: DateTime.Now,
dataDeAtualizacao: DateTime.Now,
numero:0,
cepOrigem: CepOrigem,
alturaEmbalagem: AlturaEmbalagem,
larguraEmbalagem: LarguraEmbalagem,
comprimentoEmbalagem: ComprimentoEmbalagem,
peso: Peso);
}
}
10 changes: 10 additions & 0 deletions OpenAdm.Application/Interfaces/IConfiguracaoDeFreteService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using OpenAdm.Application.Dtos.ConfiguracoesDeFrete;
using OpenAdm.Application.Models.ConfiguracoesDeFrete;

namespace OpenAdm.Application.Interfaces;

public interface IConfiguracaoDeFreteService
{
Task<ConfiguracaoDeFreteViewModel> CreateOrUpdateAsync(ConfiguracaoDeFreteCreateDto configuracaoDeFreteCreateDto);
Task<ConfiguracaoDeFreteViewModel> GetAsync();
}
1 change: 0 additions & 1 deletion OpenAdm.Application/Models/Banners/BannerViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Domain.Pkg.Entities;
using System.Text;

namespace OpenAdm.Application.Models.Banners;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using Domain.Pkg.Entities;

namespace OpenAdm.Application.Models.ConfiguracoesDeFrete;

public class ConfiguracaoDeFreteViewModel : BaseModel
{
public string CepOrigem { get; set; } = string.Empty;
public string AlturaEmbalagem { get; set; } = string.Empty;
public string LarguraEmbalagem { get; set; } = string.Empty;
public string ComprimentoEmbalagem { get; set; } = string.Empty;
public decimal? Peso { get; set; }

public static explicit operator ConfiguracaoDeFreteViewModel(ConfiguracaoDeFrete configuracaoDeFrete)
{
return new ConfiguracaoDeFreteViewModel()
{
AlturaEmbalagem = configuracaoDeFrete.AlturaEmbalagem,
CepOrigem = configuracaoDeFrete.CepOrigem,
ComprimentoEmbalagem = configuracaoDeFrete.ComprimentoEmbalagem,
DataDeAtualizacao = configuracaoDeFrete.DataDeAtualizacao,
DataDeCriacao = configuracaoDeFrete.DataDeCriacao,
Id = configuracaoDeFrete.Id,
LarguraEmbalagem = configuracaoDeFrete.LarguraEmbalagem,
Numero = configuracaoDeFrete.Numero,
Peso = configuracaoDeFrete.Peso
};
}
}
48 changes: 48 additions & 0 deletions OpenAdm.Application/Services/ConfiguracaoDeFreteService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using OpenAdm.Application.Dtos.ConfiguracoesDeFrete;
using OpenAdm.Application.Interfaces;
using OpenAdm.Application.Models.ConfiguracoesDeFrete;
using OpenAdm.Domain.Interfaces;

namespace OpenAdm.Application.Services;

public sealed class ConfiguracaoDeFreteService : IConfiguracaoDeFreteService
{
private readonly IConfiguracaoDeFreteRepository _configuracaoDeFreteRepository;

public ConfiguracaoDeFreteService(IConfiguracaoDeFreteRepository configuracaoDeFreteRepository)
{
_configuracaoDeFreteRepository = configuracaoDeFreteRepository;
}

public async Task<ConfiguracaoDeFreteViewModel> CreateOrUpdateAsync(
ConfiguracaoDeFreteCreateDto configuracaoDeFreteCreateDto)
{
var configuracao = await _configuracaoDeFreteRepository.GetConfiguracaoAsync();

if (configuracao == null)
{
configuracao = configuracaoDeFreteCreateDto.ToEntity();
await _configuracaoDeFreteRepository.AddAsync(configuracao);
return (ConfiguracaoDeFreteViewModel)configuracao;
}

configuracao.Update(
cepOrigem: configuracaoDeFreteCreateDto.CepOrigem,
alturaEmbalagem: configuracaoDeFreteCreateDto.AlturaEmbalagem,
larguraEmbalagem: configuracaoDeFreteCreateDto.LarguraEmbalagem,
comprimentoEmbalagem: configuracaoDeFreteCreateDto.ComprimentoEmbalagem,
peso: configuracaoDeFreteCreateDto.Peso);

await _configuracaoDeFreteRepository.UpdateAsync(configuracao);

return (ConfiguracaoDeFreteViewModel)configuracao;
}

public async Task<ConfiguracaoDeFreteViewModel> GetAsync()
{
var configuracao = await _configuracaoDeFreteRepository.GetConfiguracaoAsync();
if (configuracao == null) return new();

return (ConfiguracaoDeFreteViewModel)configuracao;
}
}
11 changes: 8 additions & 3 deletions OpenAdm.Application/Services/FreteService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ public class FreteService : IFreteService
private readonly IHttpClientFactory _httpClientFactory;
private readonly IPedidoRepository _pedidoRepository;
private readonly IConfiguracaoDeFreteRepository _configuracaoDeFreteRepository;
private readonly JsonSerializerOptions _jsonSerializerOptions = new()
{
PropertyNameCaseInsensitive = true
};
public FreteService(
IHttpClientFactory httpClientFactory,
IPedidoRepository pedidoRepository,
Expand All @@ -32,6 +36,7 @@ public async Task<FreteViewModel> CalcularAsync(CalcularFretePedidoDto calcularF
?? throw new Exception("Não foi localizada a configuração de frete!");

var peso = (int)pedido.ItensPedido.Sum(x => x.Produto.Peso ?? (decimal)0.1);
peso = peso > 30 ? 30 : peso;
var calcularFreteDto = new CalcularFreteDto()
{
CepDestino = calcularFretePedidoDto.Cep,
Expand All @@ -40,7 +45,7 @@ public async Task<FreteViewModel> CalcularAsync(CalcularFretePedidoDto calcularF
CepOrigem = configuracao.CepOrigem,
Comprimento = configuracao.ComprimentoEmbalagem,
Largura = configuracao.LarguraEmbalagem,
Peso = peso > 0 ? peso : 1,
Peso = (peso > 0 ? peso : 1) + (int)(configuracao.Peso ?? 0)
};

var client = _httpClientFactory.CreateClient("Frete");
Expand All @@ -50,14 +55,14 @@ public async Task<FreteViewModel> CalcularAsync(CalcularFretePedidoDto calcularF
{
var erroJson = await response.Content.ReadAsStringAsync();

var erro = JsonSerializer.Deserialize<ErrorResponse>(erroJson, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true })
var erro = JsonSerializer.Deserialize<ErrorResponse>(erroJson, _jsonSerializerOptions)
?? throw new Exception("Não foi possível calcular o frete!");

throw new ExceptionApi(erro.Mensagem);
}

var result = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<FreteViewModel>(result, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true})
return JsonSerializer.Deserialize<FreteViewModel>(result, _jsonSerializerOptions)
?? throw new Exception("Não foi possível calcular o frete!");
}
}
2 changes: 1 addition & 1 deletion OpenAdm.Domain/OpenAdm.Domain.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Domain.Pkg" Version="1.0.75" />
<PackageReference Include="Domain.Pkg" Version="1.0.78" />
</ItemGroup>

</Project>
13 changes: 4 additions & 9 deletions OpenAdm.Infra/Cached/Services/CachedService.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
using Microsoft.Extensions.Caching.Distributed;
using Domain.Pkg.Exceptions;
using OpenAdm.Infra.Cached.Interfaces;
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Http;
using OpenAdm.Domain.Interfaces;

namespace OpenAdm.Infra.Cached.Services;

Expand All @@ -17,7 +16,7 @@ public class CachedService<T> : ICachedService<T> where T : class
private readonly string _dominimo;

public CachedService(IDistributedCache distributedCache,
IHttpContextAccessor httpContextAccessor)
IParceiroAutenticado parceiroAutenticado)
{
_serializerOptions = new()
{
Expand All @@ -30,11 +29,7 @@ public CachedService(IDistributedCache distributedCache,
.SetSlidingExpiration(TimeSpan.FromMinutes(_slidingExpiration));

_distributedCache = distributedCache;
_dominimo = httpContextAccessor?
.HttpContext?
.Request?
.Headers?
.FirstOrDefault(x => x.Key == "Referer").Value.ToString() ?? throw new Exception();
_dominimo = parceiroAutenticado.Referer;
}

public async Task<T?> GetItemAsync(string key)
Expand Down Expand Up @@ -74,7 +69,7 @@ public async Task SetListItemAsync(string key, IList<T> itens)
private static void Valid(string key)
{
if (string.IsNullOrWhiteSpace(key))
throw new ExceptionApi("Key do cached inválida!");
throw new Exception("Key do cached inválida!");
}

private string GetNewKey(string key)
Expand Down
1 change: 1 addition & 0 deletions OpenAdm.IoC/DependencyInjectyApplication.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,6 @@ public static void InjectServices(this IServiceCollection services)
services.AddScoped<IRelatorioPedidoPorPeriodo, RelatorioPedidoPorPeriodo>();
services.AddScoped<INotificarPedidoEditadoService, NotificarPedidoEditadoService>();
services.AddScoped<IAppLogService, AppLogService>();
services.AddScoped<IConfiguracaoDeFreteService, ConfiguracaoDeFreteService>();
}
}

0 comments on commit 167287c

Please sign in to comment.