Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: agrega solicitud para crear una unidad de medida #75

Merged
merged 6 commits into from
Dec 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions samples/Api.Sdk.ConsoleApp/JsonFactories/UnidadesMedidaFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System.Text.Json;
using Api.Core.Domain.Requests;
using ARSoftware.Contpaqi.Api.Common.Domain;
using ARSoftware.Contpaqi.Comercial.Sdk.Abstractions.Models;

namespace Api.Sdk.ConsoleApp.JsonFactories;

public static class UnidadesMedidaFactory
{
public static CrearUnidadMedidaRequest GetCrearUnidadMedidaRequest()
{
return new CrearUnidadMedidaRequest(new CrearUnidadMedidaRequestModel { UnidadMedida = GetModeloPrueba() },
new CrearUnidadMedidaRequestOptions());
}

public static CrearUnidadMedidaResponse GetCrearUnidadMedidaResponse()
{
return new CrearUnidadMedidaResponse(new CrearUnidadMedidaResponseModel(GetModeloPrueba()));
}

public static UnidadMedida GetModeloPrueba()
{
return new UnidadMedida { Nombre = "PIEZA", Abreviatura = "PZ", ClaveSat = "H87" };
}

public static void CearJson(string directory)
{
Directory.CreateDirectory(directory);

JsonSerializerOptions options = FactoryExtensions.GetJsonSerializerOptions();

File.WriteAllText(Path.Combine(directory, $"{nameof(UnidadMedida)}.json"), JsonSerializer.Serialize(GetModeloPrueba(), options));

File.WriteAllText(Path.Combine(directory, $"{nameof(CrearUnidadMedidaRequest)}.json"),
JsonSerializer.Serialize<ContpaqiRequest>(GetCrearUnidadMedidaRequest(), options));
File.WriteAllText(Path.Combine(directory, $"{nameof(CrearUnidadMedidaResponse)}.json"),
JsonSerializer.Serialize<ContpaqiResponse>(GetCrearUnidadMedidaResponse(), options));
}
}
1 change: 1 addition & 0 deletions samples/Api.Sdk.ConsoleApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,6 @@
MovimientoFactory.CearJson(Path.Combine(baseDirectory, "Movimientos"));
ExistenciasFactory.CearJson(Path.Combine(baseDirectory, "Existencias"));
DireccionFactory.CearJson(Path.Combine(baseDirectory, "Direcciones"));
UnidadesMedidaFactory.CearJson(Path.Combine(baseDirectory, "UnidadesMedida"));

Console.WriteLine("Programa Fin");
3 changes: 2 additions & 1 deletion src/Api.Core.Domain/Api.Core.Domain.csproj.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=requests_005Cdocumentos/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=requests_005Cempresas/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=requests_005Cexistencias/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=requests_005Cproductos/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=requests_005Cproductos/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=requests_005Cunidadesmedida/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
2 changes: 2 additions & 0 deletions src/Api.Core.Domain/Common/PolymorphicTypeResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public override JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions option
new JsonDerivedType(typeof(CrearDocumentoRequest), nameof(CrearDocumentoRequest)),
new JsonDerivedType(typeof(CrearFacturaRequest), nameof(CrearFacturaRequest)),
new JsonDerivedType(typeof(CrearProductoRequest), nameof(CrearProductoRequest)),
new JsonDerivedType(typeof(CrearUnidadMedidaRequest), nameof(CrearUnidadMedidaRequest)),
new JsonDerivedType(typeof(EliminarClienteRequest), nameof(EliminarClienteRequest)),
new JsonDerivedType(typeof(EliminarDocumentoRequest), nameof(EliminarDocumentoRequest)),
new JsonDerivedType(typeof(EliminarProductoRequest), nameof(EliminarProductoRequest)),
Expand Down Expand Up @@ -94,6 +95,7 @@ public override JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions option
new JsonDerivedType(typeof(CrearDocumentoResponse), nameof(CrearDocumentoResponse)),
new JsonDerivedType(typeof(CrearFacturaResponse), nameof(CrearFacturaResponse)),
new JsonDerivedType(typeof(CrearProductoResponse), nameof(CrearProductoResponse)),
new JsonDerivedType(typeof(CrearUnidadMedidaResponse), nameof(CrearUnidadMedidaResponse)),
new JsonDerivedType(typeof(EliminarClienteResponse), nameof(EliminarClienteResponse)),
new JsonDerivedType(typeof(EliminarDocumentoResponse), nameof(EliminarDocumentoResponse)),
new JsonDerivedType(typeof(EliminarProductoResponse), nameof(EliminarProductoResponse)),
Expand Down
58 changes: 58 additions & 0 deletions src/Api.Core.Domain/Requests/UnidadesMedida/CrearUnidadMedida.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using ARSoftware.Contpaqi.Api.Common.Domain;

namespace Api.Core.Domain.Requests;

/// <summary>
/// Solicitud para crear una unidad de medida.
/// </summary>
public sealed class
CrearUnidadMedidaRequest : ContpaqiRequest<CrearUnidadMedidaRequestModel, CrearUnidadMedidaRequestOptions, CrearUnidadMedidaResponse>
{
public CrearUnidadMedidaRequest(CrearUnidadMedidaRequestModel model, CrearUnidadMedidaRequestOptions options) : base(model, options)
{
}
}

/// <summary>
/// Modelo de la solicitud CrearUnidadMedidaRequest.
/// </summary>
public sealed class CrearUnidadMedidaRequestModel
{
public UnidadMedida UnidadMedida { get; set; }
}

/// <summary>
/// Opciones de la solicitud CrearUnidadMedidaRequest.
/// </summary>
public sealed class CrearUnidadMedidaRequestOptions : ILoadRelatedDataOptions
{
public bool CargarDatosExtra { get; set; }
}

/// <summary>
/// Respuesta de la solicitud CrearUnidadMedidaRequest.
/// </summary>
public sealed class CrearUnidadMedidaResponse : ContpaqiResponse<CrearUnidadMedidaResponseModel>
{
public CrearUnidadMedidaResponse(CrearUnidadMedidaResponseModel model) : base(model)
{
}

public static CrearUnidadMedidaResponse CreateInstance(UnidadMedida unidadMedida)
{
return new CrearUnidadMedidaResponse(new CrearUnidadMedidaResponseModel(unidadMedida));
}
}

/// <summary>
/// Modelo de la respuesta CrearUnidadMedidaResponse.
/// </summary>
public sealed class CrearUnidadMedidaResponseModel
{
public CrearUnidadMedidaResponseModel(UnidadMedida unidadMedida)
{
UnidadMedida = unidadMedida;
}

public UnidadMedida UnidadMedida { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Api.Sync.Core.Application.ContpaqiComercial.Interfaces;

public interface IUnidadMedidaRepository
{
UnidadMedida? BuscarPorId(int id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using Api.Core.Domain.Requests;
using Api.Sync.Core.Application.ContpaqiComercial.Interfaces;
using ARSoftware.Contpaqi.Comercial.Sdk.Extras.Interfaces;
using MediatR;

namespace Api.Sync.Core.Application.Requests.UnidadesMedida;

public sealed class CrearUnidadMedidaRequestHandler : IRequestHandler<CrearUnidadMedidaRequest, CrearUnidadMedidaResponse>
{
private readonly IUnidadMedidaRepository _unidadMedidaRepository;
private readonly IUnidadMedidaService _unidadMedidaService;

public CrearUnidadMedidaRequestHandler(IUnidadMedidaService unidadMedidaService, IUnidadMedidaRepository unidadMedidaRepository)
{
_unidadMedidaService = unidadMedidaService;
_unidadMedidaRepository = unidadMedidaRepository;
}

public Task<CrearUnidadMedidaResponse> Handle(CrearUnidadMedidaRequest request, CancellationToken cancellationToken)
{
int unidadMedidaId = _unidadMedidaService.Crear(request.Model.UnidadMedida);

UnidadMedida? unidadMedida = _unidadMedidaRepository.BuscarPorId(unidadMedidaId) ?? throw new InvalidOperationException();

return Task.FromResult(CrearUnidadMedidaResponse.CreateInstance(unidadMedida));
}
}
1 change: 1 addition & 0 deletions src/Api.Sync.Infrastructure/ConfigureServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ private static IServiceCollection AddContpaqiComercialServices(this IServiceColl
serviceCollection.AddTransient<IMovimientoRepository, MovimientoRepository>();
serviceCollection.AddTransient<IProductoRepository, ProductoRepository>();
serviceCollection.AddTransient<IDireccionRepository, DireccionRepository>();
serviceCollection.AddTransient<IUnidadMedidaRepository, UnidadMedidaRepository>();

return serviceCollection;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Api.Sync.Core.Application.ContpaqiComercial.Interfaces;
using ARSoftware.Contpaqi.Comercial.Sdk.Abstractions.Dtos;
using ARSoftware.Contpaqi.Comercial.Sdk.Abstractions.Repositories;
using AutoMapper;

namespace Api.Sync.Infrastructure.ContpaqiComercial;

public class UnidadMedidaRepository : IUnidadMedidaRepository
{
private readonly IMapper _mapper;
private readonly IUnidadMedidaRepository<UnidadMedidaDto> _unidadMedidaRepository;

public UnidadMedidaRepository(IUnidadMedidaRepository<UnidadMedidaDto> unidadMedidaRepository, IMapper mapper)
{
_unidadMedidaRepository = unidadMedidaRepository;
_mapper = mapper;
}

public UnidadMedida? BuscarPorId(int id)
{
UnidadMedidaDto? unidadMedidaDto = _unidadMedidaRepository.BuscarPorId(id);

if (unidadMedidaDto is null) return null;

var unidadMedida = _mapper.Map<UnidadMedida>(unidadMedidaDto);

return unidadMedida;
}
}