diff --git a/Aspnet/Builder/DtoBuilder/GaranteDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/GaranteDtoBuilder.cs new file mode 100644 index 0000000..6583038 --- /dev/null +++ b/Aspnet/Builder/DtoBuilder/GaranteDtoBuilder.cs @@ -0,0 +1,36 @@ +using Entidades.Dto; + +namespace AlquilaFacil.Builder; +public class GaranteDtoBuilder : Builder { + + public GaranteDtoBuilder SetDni (long Dni) { + data.Dni = Dni; + return this; + } + + public GaranteDtoBuilder SetNombre (string Nombre) { + data.Nombre = Nombre; + return this; + } + + public GaranteDtoBuilder SetApellido (string Apellido) { + data.Apellido = Apellido; + return this; + } + + public GaranteDtoBuilder SetDomicilio (string Domicilio) { + data.Domicilio = Domicilio; + return this; + } + + public GaranteDtoBuilder SetCelular (string Celular) { + data.Celular = Celular; + return this; + } + + public GaranteDtoBuilder SetDomicilioLaboral (string Domiciliolaboral) { + data.Domiciliolaboral = Domiciliolaboral; + return this; + } + +} \ No newline at end of file diff --git a/Aspnet/Config/MinioConfig.cs b/Aspnet/Config/MinioConfig.cs new file mode 100644 index 0000000..df4fec8 --- /dev/null +++ b/Aspnet/Config/MinioConfig.cs @@ -0,0 +1,5 @@ +namespace AlquilaFacil.Config; +public class MinioConfigcus { + public string usr { get; set; } =""; + public string scrt { get; set; } = ""; +} \ No newline at end of file diff --git a/Aspnet/Controllers/ContratoController.cs b/Aspnet/Controllers/ContratoController.cs index 137f79b..0edd778 100644 --- a/Aspnet/Controllers/ContratoController.cs +++ b/Aspnet/Controllers/ContratoController.cs @@ -2,6 +2,10 @@ using AlquilaFacil.Builder; using Entidades; using Entidades.Dto; using Microsoft.AspNetCore.Mvc; +using Minio; +using Minio.DataModel; +using Minio.DataModel.Args; +using Minio.Exceptions; using Modelo; namespace AlquilaFacil.Controllers; @@ -191,11 +195,27 @@ public class ContratoController: ControllerBase { Contrato? contr = RepositorioContratos.Singleton.ObtenerPreContratoPorId(idcontrato); if (contr == null) return BadRequest(new {message = "No hay un precontrato por esa id"}); - return Ok(contr.Idgarantes); + LinkedList list = new(); + foreach (var i in contr.Idgarantes) { + list.AddFirst(new GaranteDtoBuilder() + .SetCelular(i.Celular) + .SetDni(i.Dni) + .SetDomicilio(i.Domicilio) + .SetDomicilioLaboral(i.Domiciliolaboral) + .SetNombre(i.Nombre) + .SetApellido(i.Apellido) + .Build()); + } + return Ok(list); + } + + private readonly IMinioClient mc; + public ContratoController(IMinioClient mcc){ + mc = mcc; } [HttpPost("api/contratos/subirContrato")] - public IActionResult subirContrato([FromHeader(Name = "Auth")]string Auth, [FromForm]long idcontrato =0, IFormFile contrato) { + public IActionResult subirContrato([FromHeader(Name = "Auth")]string Auth, [FromForm]long idcontrato, IFormFile contrato) { if (String.IsNullOrWhiteSpace(Auth)) return BadRequest(""); var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Propietario"); if (validacion1 == false) return Unauthorized(); @@ -209,14 +229,11 @@ public class ContratoController: ControllerBase { if (!Path.GetExtension(contrato.FileName).Equals(".pdf", StringComparison.OrdinalIgnoreCase)) return BadRequest(new { message = "El archivo debe tener la extensión .pdf." }); string nuevoNombreArchivo = $"id:{contr.Id}-inq:{contr.Dniinquilino}-propi:{contr.Dnipropietario}-idprop:{contr.Idpropiedad}.pdf"; - - var s3Client = new AmazonS3Client("aVO9C3PqeK1hiPCyqZCj", "szj58kceWG3GcRZ8P1QCQiv5tSjMI7iD5zfjneTT", new AmazonS3Config - { - ServiceURL = "http://192.168.1.11", - ForcePathStyle = true - }); + var ret = subirContrato(contrato, mc, nuevoNombreArchivo).Wait(); + + return Ok(); } [HttpPost("api/contratos/aceptarContrato")] @@ -228,6 +245,32 @@ public class ContratoController: ControllerBase { return Ok(); } + private async Task subirContrato(IFormFile f, IMinioClient m, string flname) { + try { + var buck = new BucketExistsArgs().WithBucket("alquilafacil"); + bool encontrado = await m.BucketExistsAsync(buck).ConfigureAwait(false); + + if(!encontrado){ + var mb = new MakeBucketArgs().WithBucket("alquilafacil"); + await m.MakeBucketAsync(mb).ConfigureAwait(false); + } + using (var stream = f.OpenReadStream()){ + + var putbj = new PutObjectArgs() + .WithBucket("alquilafacil") + .WithObject(flname) + .WithStreamData(stream) + .WithContentType("application/pdf") + .WithObjectSize(f.Length); + await m.PutObjectAsync(putbj).ConfigureAwait(false); + } + return true; + } catch (MinioException e ) { + Console.Error.WriteLine(e.Message); + return false; + } + } + private string ValidarCancelarDto(CancelarPrecontratoDto dto) { if (dto == null) return "dto nulo"; string ret = ""; diff --git a/Aspnet/Program.cs b/Aspnet/Program.cs index e83391e..9f94c00 100644 --- a/Aspnet/Program.cs +++ b/Aspnet/Program.cs @@ -1,10 +1,22 @@ +using System.Text.Json; +using Minio; +using AlquilaFacil.Config; + var builder = WebApplication.CreateBuilder(args); + +MinioConfigcus? mcon = JsonSerializer.Deserialize(File.ReadAllText("./settings.json"))?? null; +if (mcon == null) return; + // Add services to the container. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); +builder.Services.AddMinio(confi => confi + .WithCredentials(mcon.usr, mcon.scrt) + .WithEndpoint("http://192.168.1.11:9000") + .Build()); builder.Services.AddCors(options => { diff --git a/Aspnet/bin/Debug/net8.0/settings.json b/Aspnet/bin/Debug/net8.0/settings.json new file mode 100644 index 0000000..a595e0c --- /dev/null +++ b/Aspnet/bin/Debug/net8.0/settings.json @@ -0,0 +1,4 @@ +{ + "usr":"aVO9C3PqeK1hiPCyqZCj", + "scrt":"szj58kceWG3GcRZ8P1QCQiv5tSjMI7iD5zfjneTT" +} \ No newline at end of file diff --git a/Front/src/Componentes/ModalCheckYContrato.svelte b/Front/src/Componentes/ModalCheckYContrato.svelte index ec761c9..8279a6b 100644 --- a/Front/src/Componentes/ModalCheckYContrato.svelte +++ b/Front/src/Componentes/ModalCheckYContrato.svelte @@ -7,11 +7,25 @@ garantes: GaranteDto[], onCancel:()=>void, onClose:()=>void, - onConfirm:()=>void } = $props(); + onConfirm:(file:File, idcontrato:string)=>void } = $props(); + let file:File | null = $state(null); let confirmaGarantes: boolean = $state(false); + + function handleFile(e:Event):void { + const input = e.target as HTMLInputElement; + if (input.files && input.files.length > 0 ) { + file = input.files[0]; + } + } + + function submit() { + if (file == null) return; + onConfirm(file, men.mensaje.split(" ").reverse()[0]); + } +