From 4983028361c0da2cefda557c5f3d52d52ac854c2 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Tue, 8 Jul 2025 11:21:03 +0200 Subject: [PATCH] inicio --- .gitignore | 16 ++ mqttApi/MqttApi.sln | 83 ++++++++ .../DependencyInjectionService.cs | 61 ++++++ .../Exceptions/ExceptionManager.cs | 19 ++ .../Features/ResponseApiService.cs | 22 +++ .../External/IGetTokenJwtService.cs | 13 ++ .../Interfaces/IPersistenciaService.cs | 24 +++ .../Mqtt.App.Application.csproj | 21 ++ .../Queries/GetAllUser/GetAllUserModel.cs | 18 ++ .../Queries/GetAllUser/GetAllUserQuery.cs | 28 +++ .../Queries/GetAllUser/IGetAllUserQuery.cs | 13 ++ .../Queries/GetUserById/GetUserByIdModel.cs | 18 ++ .../Queries/GetUserById/GetUserByIdQuery.cs | 31 +++ .../Queries/GetUserById/IGetUserByIdQuery.cs | 15 ++ .../GetUserByPassAndNameModel.cs | 18 ++ .../GetUserByPassAndNameQuery.cs | 30 +++ .../IGetUserByPassAndNameQueryt.cs | 13 ++ .../commands/CreateUser/CreateUserCommand.cs | 30 +++ .../commands/CreateUser/CreateUserModel.cs | 16 ++ .../commands/CreateUser/IcreateUserCommand.cs | 13 ++ .../commands/DeleteUser/DeleteUserCommand.cs | 26 +++ .../commands/DeleteUser/IDeleteUserCommand.cs | 13 ++ .../commands/UpdateUser/IupdateUserCommand.cs | 14 ++ .../commands/UpdateUser/UpdateUserCommand.cs | 32 ++++ .../commands/UpdateUser/UpdateUserModel.cs | 17 ++ .../CreateSesion/CreateSesionCommand.cs | 37 ++++ .../CreateSesion/CreateSesionModel.cs | 15 ++ .../CreateSesion/ICreateSesionCommand.cs | 13 ++ .../CreateSesion/InCreateSesionModel.cs | 14 ++ .../Sesion/InCreateSesionValidator.cs | 20 ++ .../Validators/User/CreateUserValidator.cs | 20 ++ .../User/GetUserByPassAndNameValidator.cs | 19 ++ .../Validators/User/UpdateUserValidator.cs | 23 +++ .../configuration/MapperProfile.cs | 31 +++ .../DependencyInjectionService.cs | 17 ++ .../Mqtt.App.Common/Mqtt.App.Common.csproj | 13 ++ .../Entities/Booking/BookingEntity.cs | 24 +++ .../Entities/Customer/CustomerEntity.cs | 18 ++ .../Entities/User/UserEntity.cs | 19 ++ .../src/Mqtt.App.Domain/Enums/BookingType.cs | 15 ++ .../Models/BaseResponseModel.cs | 13 ++ .../Mqtt.App.Domain/Mqtt.App.Domain.csproj | 9 + mqttApi/src/Mqtt.App.Domain/limpia.bat | 0 .../DependencyInjectionService.cs | 39 ++++ .../GetTokenJWT/GetTokenJwtService.cs | 46 +++++ .../Mqtt.App.External.csproj | 20 ++ mqttApi/src/Mqtt.App.api.xml | 8 + .../Mqtt.App.api/.config/dotnet-tools.json | 13 ++ .../Controllers/SesionController.cs | 36 ++++ .../Controllers/UserController.cs | 180 ++++++++++++++++++ .../DependencyInjectionService.cs | 51 +++++ mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj | 25 +++ .../src/Mqtt.App.api/Mqtt.App.api.csproj.user | 6 + mqttApi/src/Mqtt.App.api/Mqtt.App.api.http | 6 + mqttApi/src/Mqtt.App.api/Program.cs | 67 +++++++ .../PublishProfiles/ParaDocker.pubxml | 22 +++ .../PublishProfiles/ParaDocker.pubxml.user | 11 ++ .../Properties/launchSettings.json | 30 +++ .../Mqtt.App.api/appsettings.Development.json | 8 + mqttApi/src/Mqtt.App.api/appsettings.json | 17 ++ .../Configurations/UserConfiguration.cs | 26 +++ .../DependencyInjectionService.cs | 39 ++++ .../Mqtt.app.Persistencia.csproj | 21 ++ .../Services/PersistenciaService.cs | 93 +++++++++ mqttLog/mqttLog/Program.cs | 15 ++ .../PublishProfiles/FolderProfile.pubxml | 15 ++ .../PublishProfiles/FolderProfile.pubxml.user | 10 + .../mqttLog/Properties/launchSettings.json | 12 ++ mqttLog/mqttLog/Worker.cs | 80 ++++++++ mqttLog/mqttLog/appsettings.Development.json | 8 + mqttLog/mqttLog/appsettings.json | 8 + mqttLog/mqttLog/log4net.config | 19 ++ mqttLog/mqttLog/mqttLog.csproj | 15 ++ mqttLog/mqttLog/mqttLog.csproj.user | 6 + mqttLog/mqttLog/mqttLog.sln | 22 +++ 75 files changed, 1898 insertions(+) create mode 100644 .gitignore create mode 100644 mqttApi/MqttApi.sln create mode 100644 mqttApi/src/Mqtt.App.Application/DependencyInjectionService.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Exceptions/ExceptionManager.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Features/ResponseApiService.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Interfaces/External/IGetTokenJwtService.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Interfaces/IPersistenciaService.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Mqtt.App.Application.csproj create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserModel.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserQuery.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/IGetAllUserQuery.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdModel.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdQuery.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/IGetUserByIdQuery.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameModel.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameQuery.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/IGetUserByPassAndNameQueryt.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserModel.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/IcreateUserCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/DeleteUserCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/IDeleteUserCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/IupdateUserCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserModel.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionModel.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/ICreateSesionCommand.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/InCreateSesionModel.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Validators/Sesion/InCreateSesionValidator.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Validators/User/CreateUserValidator.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Validators/User/GetUserByPassAndNameValidator.cs create mode 100644 mqttApi/src/Mqtt.App.Application/Validators/User/UpdateUserValidator.cs create mode 100644 mqttApi/src/Mqtt.App.Application/configuration/MapperProfile.cs create mode 100644 mqttApi/src/Mqtt.App.Common/DependencyInjectionService.cs create mode 100644 mqttApi/src/Mqtt.App.Common/Mqtt.App.Common.csproj create mode 100644 mqttApi/src/Mqtt.App.Domain/Entities/Booking/BookingEntity.cs create mode 100644 mqttApi/src/Mqtt.App.Domain/Entities/Customer/CustomerEntity.cs create mode 100644 mqttApi/src/Mqtt.App.Domain/Entities/User/UserEntity.cs create mode 100644 mqttApi/src/Mqtt.App.Domain/Enums/BookingType.cs create mode 100644 mqttApi/src/Mqtt.App.Domain/Models/BaseResponseModel.cs create mode 100644 mqttApi/src/Mqtt.App.Domain/Mqtt.App.Domain.csproj create mode 100644 mqttApi/src/Mqtt.App.Domain/limpia.bat create mode 100644 mqttApi/src/Mqtt.App.External/DependencyInjectionService.cs create mode 100644 mqttApi/src/Mqtt.App.External/GetTokenJWT/GetTokenJwtService.cs create mode 100644 mqttApi/src/Mqtt.App.External/Mqtt.App.External.csproj create mode 100644 mqttApi/src/Mqtt.App.api.xml create mode 100644 mqttApi/src/Mqtt.App.api/.config/dotnet-tools.json create mode 100644 mqttApi/src/Mqtt.App.api/Controllers/SesionController.cs create mode 100644 mqttApi/src/Mqtt.App.api/Controllers/UserController.cs create mode 100644 mqttApi/src/Mqtt.App.api/DependencyInjectionService.cs create mode 100644 mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj create mode 100644 mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj.user create mode 100644 mqttApi/src/Mqtt.App.api/Mqtt.App.api.http create mode 100644 mqttApi/src/Mqtt.App.api/Program.cs create mode 100644 mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml create mode 100644 mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml.user create mode 100644 mqttApi/src/Mqtt.App.api/Properties/launchSettings.json create mode 100644 mqttApi/src/Mqtt.App.api/appsettings.Development.json create mode 100644 mqttApi/src/Mqtt.App.api/appsettings.json create mode 100644 mqttApi/src/Mqtt.app.Persistencia/Configurations/UserConfiguration.cs create mode 100644 mqttApi/src/Mqtt.app.Persistencia/DependencyInjectionService.cs create mode 100644 mqttApi/src/Mqtt.app.Persistencia/Mqtt.app.Persistencia.csproj create mode 100644 mqttApi/src/Mqtt.app.Persistencia/Services/PersistenciaService.cs create mode 100644 mqttLog/mqttLog/Program.cs create mode 100644 mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml.user create mode 100644 mqttLog/mqttLog/Properties/launchSettings.json create mode 100644 mqttLog/mqttLog/Worker.cs create mode 100644 mqttLog/mqttLog/appsettings.Development.json create mode 100644 mqttLog/mqttLog/appsettings.json create mode 100644 mqttLog/mqttLog/log4net.config create mode 100644 mqttLog/mqttLog/mqttLog.csproj create mode 100644 mqttLog/mqttLog/mqttLog.csproj.user create mode 100644 mqttLog/mqttLog/mqttLog.sln diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a17807b --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +/mqttApi/.vs/* +/mqttApi/src/Mqtt.App.api/bin/* +/mqttApi/src/Mqtt.App.api/obj/* +/mqttApi/src/Mqtt.App.Application/bin/* +/mqttApi/src/Mqtt.App.Application/obj/* +/mqttApi/src/Mqtt.App.Common/bin/* +/mqttApi/src/Mqtt.App.Common/obj/* +/mqttLog/mqttLog/obj/* +/mqttLog/mqttLog/bin/* +/mqttLog/mqttLog/.vs/* +/mqttApi/src/Mqtt.App.Domain/obj/* +/mqttApi/src/Mqtt.App.Domain/bin/* +/mqttApi/src/Mqtt.App.External/bin/* +/mqttApi/src/Mqtt.App.External/obj/* +/mqttApi/src/Mqtt.app.Persistencia/bin/* +/mqttApi/src/Mqtt.app.Persistencia/obj/* diff --git a/mqttApi/MqttApi.sln b/mqttApi/MqttApi.sln new file mode 100644 index 0000000..a21e30b --- /dev/null +++ b/mqttApi/MqttApi.sln @@ -0,0 +1,83 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34723.18 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Api", "Api", "{88D481B0-BD9D-4732-9AE0-4707AE616E01}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{609A233D-1C2C-4041-A03B-F8462D6DFB68}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infraestructure", "Infraestructure", "{E59FA921-6808-48FC-A97D-46187F256EC7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{D6311563-0AF4-4A92-9EBD-ED86D028EF6A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{57865052-E859-4E07-B739-CFAC84B05515}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{DA87F0AE-9CB9-4453-8C43-5E7AD2B71A73}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F0758F61-2134-49E5-A002-85A021B7B218}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{EE0A9118-313B-48E4-8271-AABA50B7D7D0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mqtt.App.api", "src\Mqtt.App.api\Mqtt.App.api.csproj", "{C21AE3AC-D81E-4EEE-A341-1BF131D2EF9D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mqtt.App.Application", "src\Mqtt.App.Application\Mqtt.App.Application.csproj", "{CC2DBE75-C8B7-48AF-8C35-8C9CD8D34B30}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mqtt.App.Domain", "src\Mqtt.App.Domain\Mqtt.App.Domain.csproj", "{9ACA7C27-1ACF-42F9-9030-628888815CB7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mqtt.app.Persistencia", "src\Mqtt.app.Persistencia\Mqtt.app.Persistencia.csproj", "{F99418D0-C14F-4435-B693-FA4C860E9059}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mqtt.App.External", "src\Mqtt.App.External\Mqtt.App.External.csproj", "{00402824-39F8-4C3C-8C36-68D2464ABCA7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mqtt.App.Common", "src\Mqtt.App.Common\Mqtt.App.Common.csproj", "{7A814D68-5162-4842-9890-98DDD6C09FF4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C21AE3AC-D81E-4EEE-A341-1BF131D2EF9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C21AE3AC-D81E-4EEE-A341-1BF131D2EF9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C21AE3AC-D81E-4EEE-A341-1BF131D2EF9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C21AE3AC-D81E-4EEE-A341-1BF131D2EF9D}.Release|Any CPU.Build.0 = Release|Any CPU + {CC2DBE75-C8B7-48AF-8C35-8C9CD8D34B30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC2DBE75-C8B7-48AF-8C35-8C9CD8D34B30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC2DBE75-C8B7-48AF-8C35-8C9CD8D34B30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC2DBE75-C8B7-48AF-8C35-8C9CD8D34B30}.Release|Any CPU.Build.0 = Release|Any CPU + {9ACA7C27-1ACF-42F9-9030-628888815CB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9ACA7C27-1ACF-42F9-9030-628888815CB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9ACA7C27-1ACF-42F9-9030-628888815CB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9ACA7C27-1ACF-42F9-9030-628888815CB7}.Release|Any CPU.Build.0 = Release|Any CPU + {F99418D0-C14F-4435-B693-FA4C860E9059}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F99418D0-C14F-4435-B693-FA4C860E9059}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F99418D0-C14F-4435-B693-FA4C860E9059}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F99418D0-C14F-4435-B693-FA4C860E9059}.Release|Any CPU.Build.0 = Release|Any CPU + {00402824-39F8-4C3C-8C36-68D2464ABCA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00402824-39F8-4C3C-8C36-68D2464ABCA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00402824-39F8-4C3C-8C36-68D2464ABCA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00402824-39F8-4C3C-8C36-68D2464ABCA7}.Release|Any CPU.Build.0 = Release|Any CPU + {7A814D68-5162-4842-9890-98DDD6C09FF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A814D68-5162-4842-9890-98DDD6C09FF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A814D68-5162-4842-9890-98DDD6C09FF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A814D68-5162-4842-9890-98DDD6C09FF4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {57865052-E859-4E07-B739-CFAC84B05515} = {88D481B0-BD9D-4732-9AE0-4707AE616E01} + {DA87F0AE-9CB9-4453-8C43-5E7AD2B71A73} = {D6311563-0AF4-4A92-9EBD-ED86D028EF6A} + {F0758F61-2134-49E5-A002-85A021B7B218} = {609A233D-1C2C-4041-A03B-F8462D6DFB68} + {EE0A9118-313B-48E4-8271-AABA50B7D7D0} = {E59FA921-6808-48FC-A97D-46187F256EC7} + {C21AE3AC-D81E-4EEE-A341-1BF131D2EF9D} = {57865052-E859-4E07-B739-CFAC84B05515} + {CC2DBE75-C8B7-48AF-8C35-8C9CD8D34B30} = {F0758F61-2134-49E5-A002-85A021B7B218} + {9ACA7C27-1ACF-42F9-9030-628888815CB7} = {F0758F61-2134-49E5-A002-85A021B7B218} + {F99418D0-C14F-4435-B693-FA4C860E9059} = {EE0A9118-313B-48E4-8271-AABA50B7D7D0} + {00402824-39F8-4C3C-8C36-68D2464ABCA7} = {EE0A9118-313B-48E4-8271-AABA50B7D7D0} + {7A814D68-5162-4842-9890-98DDD6C09FF4} = {DA87F0AE-9CB9-4453-8C43-5E7AD2B71A73} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3C4C824D-0B01-4A6C-BD15-95F92F81A8DC} + EndGlobalSection +EndGlobal diff --git a/mqttApi/src/Mqtt.App.Application/DependencyInjectionService.cs b/mqttApi/src/Mqtt.App.Application/DependencyInjectionService.cs new file mode 100644 index 0000000..fc99934 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/DependencyInjectionService.cs @@ -0,0 +1,61 @@ +using AutoMapper; +using Empresa.App.Application.configuration; +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application.Persistencia.user.commands.DeleteUser; +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using Empresa.App.Application.Persistencia.user.Queries.GetAllUser; +using Empresa.App.Application.Persistencia.user.Queries.GetUserById; +using Empresa.App.Application.Persistencia.user.Queries.GetUserByPassAndName; +using Empresa.App.Application.Sesion.Commands.CreateSesion; +using Empresa.App.Application.Validators.Sesion; +using Empresa.App.Application.Validators.User; +using FluentValidation; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +namespace Empresa.App.Application +{ + public static class DependencyInjectionService + { + public static IServiceCollection AddAplication(this IServiceCollection services) + { + var mapper = new MapperConfiguration(confg => + { + confg.AddProfile(new MapperProfile()); + } + ); + #region user + services.AddTransient< IcreateUserCommand,CreateUserCommand>(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + + services.AddTransient(); + services.AddTransient(); + + + #endregion + + #region userValidator + + services.AddScoped,CreateUserValidator>(); + services.AddScoped, UpdateUserValidator>(); + + services.AddScoped, GetUserByPassAndNameValidator>(); + services.AddScoped, InCreateSesionValidator>(); + + + #endregion + #region Sesion + + services.AddTransient(); + #endregion + + services.AddSingleton(mapper.CreateMapper()); + return services; + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Exceptions/ExceptionManager.cs b/mqttApi/src/Mqtt.App.Application/Exceptions/ExceptionManager.cs new file mode 100644 index 0000000..cb048b2 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Exceptions/ExceptionManager.cs @@ -0,0 +1,19 @@ +using Empresa.App.Application.Features; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; + +namespace Empresa.App.Application.Exceptions +{ + //captura errores + public class ExceptionManager : IExceptionFilter + { + public void OnException(ExceptionContext context) + { + context.Result = new ObjectResult(ResponseApiService.Response( + StatusCodes.Status500InternalServerError,context.Exception.Message + )); + context.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError; + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Features/ResponseApiService.cs b/mqttApi/src/Mqtt.App.Application/Features/ResponseApiService.cs new file mode 100644 index 0000000..60b0120 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Features/ResponseApiService.cs @@ -0,0 +1,22 @@ +using Empresa.App.Domain.Models; + +namespace Empresa.App.Application.Features +{ + public static class ResponseApiService + { + public static BaseResponseModel Response(int statusCode, object data=null, string msg=null) + { + bool success = false; + if(statusCode>=200 && statusCode<300) + success = true; + var result = new BaseResponseModel + { + StatusCode = statusCode, + Success = success, + Data = data, + Message = msg + }; + return result; + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Interfaces/External/IGetTokenJwtService.cs b/mqttApi/src/Mqtt.App.Application/Interfaces/External/IGetTokenJwtService.cs new file mode 100644 index 0000000..04f428a --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Interfaces/External/IGetTokenJwtService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Interfaces.External +{ + public interface IGetTokenJwtService + { + public string Execute(string id); + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Interfaces/IPersistenciaService.cs b/mqttApi/src/Mqtt.App.Application/Interfaces/IPersistenciaService.cs new file mode 100644 index 0000000..51d1337 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Interfaces/IPersistenciaService.cs @@ -0,0 +1,24 @@ +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Interfaces +{ + //servicion para guardar datos + public interface IPersistenciaService + { + public Task AddUser(UserEntity user); + public Task UpdateUser(UserEntity user); + public Task DeleteUser(int idUser); + + public Task UpdateNoNullUser(UserEntity user); + public Task> GetAllUser(); + public Task GetUserById(int idUser); + public Task GetUserByPassAndName(string pass, string name); + + + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Mqtt.App.Application.csproj b/mqttApi/src/Mqtt.App.Application/Mqtt.App.Application.csproj new file mode 100644 index 0000000..1500cfc --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Mqtt.App.Application.csproj @@ -0,0 +1,21 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + + + + diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserModel.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserModel.cs new file mode 100644 index 0000000..fb8fe92 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetAllUser +{ + public class GetAllUserModel + { + public int Id { get; set; } + public string FristName { get; set; } + public string LastName { get; set; } + + public string UserName { get; set; } + public string Password { get; set; } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserQuery.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserQuery.cs new file mode 100644 index 0000000..925b801 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/GetAllUserQuery.cs @@ -0,0 +1,28 @@ +using AutoMapper; +using Empresa.App.Application.Interfaces; +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetAllUser +{ + public class GetAllUserQuery: IGetAllUserQuery + { + IPersistenciaService _persistenciaService; + IMapper _mapper; + public GetAllUserQuery(IPersistenciaService persistenciaService, IMapper mapper) + { + _persistenciaService = persistenciaService; + _mapper = mapper; + } + public async Task> Execute() + { + var l = await _persistenciaService.GetAllUser(); + return _mapper.Map>(l); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/IGetAllUserQuery.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/IGetAllUserQuery.cs new file mode 100644 index 0000000..d545ad2 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetAllUser/IGetAllUserQuery.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetAllUser +{ + public interface IGetAllUserQuery + { + public Task> Execute(); + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdModel.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdModel.cs new file mode 100644 index 0000000..bbd7260 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetUserById +{ + public class GetUserByIdModel + { + public int Id { get; set; } + public string FristName { get; set; } + public string LastName { get; set; } + + public string UserName { get; set; } + public string Password { get; set; } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdQuery.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdQuery.cs new file mode 100644 index 0000000..58541ea --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/GetUserByIdQuery.cs @@ -0,0 +1,31 @@ +using AutoMapper; +using Empresa.App.Application.Interfaces; +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetUserById +{ + public class GetUserByIdQuery: IGetUserByIdQuery + { + IPersistenciaService _persistenciaService; + IMapper _mapper; + public GetUserByIdQuery(IPersistenciaService persistenciaService, IMapper mapper) + { + _persistenciaService = persistenciaService; + _mapper = mapper; + } + public async Task Execute(int id) + { + + //aqui se guarda realmente + var enty= await _persistenciaService.GetUserById(id); + return _mapper.Map(enty); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/IGetUserByIdQuery.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/IGetUserByIdQuery.cs new file mode 100644 index 0000000..1beeab8 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserById/IGetUserByIdQuery.cs @@ -0,0 +1,15 @@ +using Empresa.App.Application.Persistencia.user.Queries.GetAllUser; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetUserById +{ + public interface IGetUserByIdQuery + { + public Task Execute(int id); + + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameModel.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameModel.cs new file mode 100644 index 0000000..d7666d9 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetUserByPassAndName +{ + public class GetUserByPassAndNameModel + { + public int Id { get; set; } + public string FristName { get; set; } + public string LastName { get; set; } + + public string UserName { get; set; } + public string Password { get; set; } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameQuery.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameQuery.cs new file mode 100644 index 0000000..bc19fc6 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/GetUserByPassAndNameQuery.cs @@ -0,0 +1,30 @@ +using AutoMapper; +using Empresa.App.Application.Interfaces; +using Empresa.App.Application.Persistencia.user.Queries.GetUserById; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetUserByPassAndName +{ + public class GetUserByPassAndNameQuery: IGetUserByPassAndNameQuery + { + IPersistenciaService _persistenciaService; + IMapper _mapper; + public GetUserByPassAndNameQuery(IPersistenciaService persistenciaService, IMapper mapper) + { + _persistenciaService = persistenciaService; + _mapper = mapper; + } + public async Task Execute(string pass, string name) + { + + //aqui se guarda realmente + var enty = await _persistenciaService.GetUserByPassAndName(pass, name); + return _mapper.Map(enty); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/IGetUserByPassAndNameQueryt.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/IGetUserByPassAndNameQueryt.cs new file mode 100644 index 0000000..385a55c --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/Queries/GetUserByPassAndName/IGetUserByPassAndNameQueryt.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.Queries.GetUserByPassAndName +{ + public interface IGetUserByPassAndNameQuery + { + public Task Execute(string pass, string name); + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserCommand.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserCommand.cs new file mode 100644 index 0000000..b77f4bf --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserCommand.cs @@ -0,0 +1,30 @@ +using AutoMapper; +using Empresa.App.Application.Interfaces; +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.CreateUser +{ + public class CreateUserCommand: IcreateUserCommand + { + private readonly IPersistenciaService _persistenciaService; + private IMapper _mapper; + + public CreateUserCommand(IPersistenciaService persistenciaService, IMapper mapper) + { + _persistenciaService = persistenciaService; + _mapper = mapper; + } + public async TaskExecute(CreateUserModel model) + { + var entity = _mapper.Map(model); + //aqui se guarda realmente + await _persistenciaService.AddUser(entity); + return model; + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserModel.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserModel.cs new file mode 100644 index 0000000..19f8e53 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/CreateUserModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.CreateUser +{ + public class CreateUserModel + { + public string FristName { get; set; } + public string LastName { get; set; } + public string UserName { get; set; } + public string Password { get; set; } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/IcreateUserCommand.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/IcreateUserCommand.cs new file mode 100644 index 0000000..fd56820 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/CreateUser/IcreateUserCommand.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.CreateUser +{ + public interface IcreateUserCommand + { + public Task Execute(CreateUserModel model); + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/DeleteUserCommand.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/DeleteUserCommand.cs new file mode 100644 index 0000000..04b8ef4 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/DeleteUserCommand.cs @@ -0,0 +1,26 @@ +using AutoMapper; +using Empresa.App.Application.Interfaces; +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.DeleteUser +{ + public class DeleteUserCommand: IDeleteUserCommand + { + IPersistenciaService _persistenciaService; + public DeleteUserCommand(IPersistenciaService persistenciaService) + { + _persistenciaService = persistenciaService; + } + public async Task Execute(int id) + { + //aqui se guarda realmente + return await _persistenciaService.DeleteUser(id); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/IDeleteUserCommand.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/IDeleteUserCommand.cs new file mode 100644 index 0000000..537a51f --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/DeleteUser/IDeleteUserCommand.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.DeleteUser +{ + public interface IDeleteUserCommand + { + public Task Execute(int id); + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/IupdateUserCommand.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/IupdateUserCommand.cs new file mode 100644 index 0000000..dac738d --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/IupdateUserCommand.cs @@ -0,0 +1,14 @@ +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.UpdateUser +{ + public interface IupdateUserCommand + { + public Task Execute(UpdateUserModel UpdateUserModel); + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserCommand.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserCommand.cs new file mode 100644 index 0000000..8f0adb8 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserCommand.cs @@ -0,0 +1,32 @@ +using AutoMapper; +using Empresa.App.Application.Interfaces; +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.UpdateUser +{ + public class UpdateUserCommand : IupdateUserCommand + + { + IPersistenciaService _persistenciaService; + IMapper _mapper; + public UpdateUserCommand(IPersistenciaService persistenciaService, IMapper mapper) + { + _persistenciaService = persistenciaService; + _mapper = mapper; + } + public async Task Execute(UpdateUserModel model) + { + var entity = _mapper.Map(model); + //aqui se guarda realmente + await _persistenciaService.UpdateUser(entity); + return model; + } + + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserModel.cs b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserModel.cs new file mode 100644 index 0000000..6099b14 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Persistencia/user/commands/UpdateUser/UpdateUserModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Persistencia.user.commands.UpdateUser +{ + public class UpdateUserModel + { + public int Id { get; set; } + public string FristName { get; set; } + public string LastName { get; set; } + public string UserName { get; set; } + public string Password { get; set; } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionCommand.cs b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionCommand.cs new file mode 100644 index 0000000..719b8f3 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionCommand.cs @@ -0,0 +1,37 @@ +using AutoMapper; +using Empresa.App.Application.Interfaces; +using Empresa.App.Application.Interfaces.External; +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application.Persistencia.user.Queries.GetUserByPassAndName; +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Sesion.Commands.CreateSesion +{ + public class CreateSesionCommand: ICreateSesionCommand + { + private readonly IGetTokenJwtService _jwtService; + private IGetUserByPassAndNameQuery _userService; + + public CreateSesionCommand(IGetTokenJwtService jwtService, IGetUserByPassAndNameQuery userService) + { + _jwtService = jwtService; + _userService = userService; + } + public async Task Execute(InCreateSesionModel data) + { + + var entity = await _userService.Execute(data.Password, data.UserName); + if (entity == null) + return null; + var res = new CreateSesionModel(); + res.UserId = entity.Id; + res.Token = _jwtService.Execute(res.UserId.ToString()); + return res; + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionModel.cs b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionModel.cs new file mode 100644 index 0000000..6a4fff4 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/CreateSesionModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Sesion.Commands.CreateSesion +{ + public class CreateSesionModel + { + public string Token { get; set; } + public int UserId { get; set; } + + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/ICreateSesionCommand.cs b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/ICreateSesionCommand.cs new file mode 100644 index 0000000..a4955e0 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/ICreateSesionCommand.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Sesion.Commands.CreateSesion +{ + public interface ICreateSesionCommand + { + public Task Execute(InCreateSesionModel data); + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/InCreateSesionModel.cs b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/InCreateSesionModel.cs new file mode 100644 index 0000000..cc4f08b --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Sesion/Commands/CreateSesion/InCreateSesionModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Sesion.Commands.CreateSesion +{ + public class InCreateSesionModel + { + public string UserName { get; set; } + public string Password { get; set; } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Validators/Sesion/InCreateSesionValidator.cs b/mqttApi/src/Mqtt.App.Application/Validators/Sesion/InCreateSesionValidator.cs new file mode 100644 index 0000000..ee65982 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Validators/Sesion/InCreateSesionValidator.cs @@ -0,0 +1,20 @@ +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application.Sesion.Commands.CreateSesion; +using FluentValidation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Validators.Sesion +{ + public class InCreateSesionValidator : AbstractValidator + { + public InCreateSesionValidator() + { + RuleFor(x => x.Password).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.UserName).NotNull().NotEmpty().MaximumLength(50); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Validators/User/CreateUserValidator.cs b/mqttApi/src/Mqtt.App.Application/Validators/User/CreateUserValidator.cs new file mode 100644 index 0000000..c1ff0ab --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Validators/User/CreateUserValidator.cs @@ -0,0 +1,20 @@ +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using FluentValidation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Validators.User +{ + public class CreateUserValidator:AbstractValidator + { + public CreateUserValidator() { + RuleFor(x=>x.FristName).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.LastName).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.UserName).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.Password).NotNull().NotEmpty().MaximumLength(10); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Validators/User/GetUserByPassAndNameValidator.cs b/mqttApi/src/Mqtt.App.Application/Validators/User/GetUserByPassAndNameValidator.cs new file mode 100644 index 0000000..b5ce304 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Validators/User/GetUserByPassAndNameValidator.cs @@ -0,0 +1,19 @@ +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using FluentValidation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Validators.User +{ + public class GetUserByPassAndNameValidator : AbstractValidator<(string, string)> + { + public GetUserByPassAndNameValidator() + { + RuleFor(x => x.Item1).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.Item2).NotNull().NotEmpty().MaximumLength(50); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/Validators/User/UpdateUserValidator.cs b/mqttApi/src/Mqtt.App.Application/Validators/User/UpdateUserValidator.cs new file mode 100644 index 0000000..317d0a6 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/Validators/User/UpdateUserValidator.cs @@ -0,0 +1,23 @@ +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using FluentValidation; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.Validators.User +{ + public class UpdateUserValidator : AbstractValidator + { + public UpdateUserValidator() + { + RuleFor(x => x.Id).NotNull().GreaterThan(0);//que no sea nulo y mayor que 0 + RuleFor(x => x.FristName).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.LastName).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.UserName).NotNull().NotEmpty().MaximumLength(50); + RuleFor(x => x.Password).NotNull().NotEmpty().MaximumLength(10); + } + } +} diff --git a/mqttApi/src/Mqtt.App.Application/configuration/MapperProfile.cs b/mqttApi/src/Mqtt.App.Application/configuration/MapperProfile.cs new file mode 100644 index 0000000..16b5ae2 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Application/configuration/MapperProfile.cs @@ -0,0 +1,31 @@ +using AutoMapper; +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using Empresa.App.Application.Persistencia.user.Queries.GetAllUser; +using Empresa.App.Application.Persistencia.user.Queries.GetUserById; +using Empresa.App.Application.Persistencia.user.Queries.GetUserByPassAndName; +using Empresa.App.Domain.Entities.User; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Application.configuration +{ + public class MapperProfile : Profile + { + public MapperProfile() + { + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + CreateMap().ReverseMap(); + + + + + } + } +} diff --git a/mqttApi/src/Mqtt.App.Common/DependencyInjectionService.cs b/mqttApi/src/Mqtt.App.Common/DependencyInjectionService.cs new file mode 100644 index 0000000..def2007 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Common/DependencyInjectionService.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Common +{ + public static class DependencyInjectionService + { + public static IServiceCollection AddCommon(this IServiceCollection services) + { + return services; + } + } +} diff --git a/mqttApi/src/Mqtt.App.Common/Mqtt.App.Common.csproj b/mqttApi/src/Mqtt.App.Common/Mqtt.App.Common.csproj new file mode 100644 index 0000000..f38afd9 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Common/Mqtt.App.Common.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/mqttApi/src/Mqtt.App.Domain/Entities/Booking/BookingEntity.cs b/mqttApi/src/Mqtt.App.Domain/Entities/Booking/BookingEntity.cs new file mode 100644 index 0000000..2767f0d --- /dev/null +++ b/mqttApi/src/Mqtt.App.Domain/Entities/Booking/BookingEntity.cs @@ -0,0 +1,24 @@ +using Empresa.App.Domain.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Domain.Entities.Booking +{ + public class BookingEntity + { + public int Id { get; set; } + + public string Code { get; set; } + public BookingType Type { get; set; } + + public int CustomerId { get; set; } + public int UserId { get; set; } + + //booking-admin-01 + //87698.ñaña + + } +} diff --git a/mqttApi/src/Mqtt.App.Domain/Entities/Customer/CustomerEntity.cs b/mqttApi/src/Mqtt.App.Domain/Entities/Customer/CustomerEntity.cs new file mode 100644 index 0000000..4a094f2 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Domain/Entities/Customer/CustomerEntity.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Domain.Entities.Customer +{ + public class CustomerEntity + { + public int Id { get; set; } + public string FullName { get; set; } + public string DocumentNumber { get; set; } + + + + } +} diff --git a/mqttApi/src/Mqtt.App.Domain/Entities/User/UserEntity.cs b/mqttApi/src/Mqtt.App.Domain/Entities/User/UserEntity.cs new file mode 100644 index 0000000..82ec597 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Domain/Entities/User/UserEntity.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Domain.Entities.User +{ + public class UserEntity + { + public int Id { get; set; } + public string FristName { get; set; } + public string LastName { get; set; } + + public string UserName { get; set; } + public string Password { get; set; } + + } +} diff --git a/mqttApi/src/Mqtt.App.Domain/Enums/BookingType.cs b/mqttApi/src/Mqtt.App.Domain/Enums/BookingType.cs new file mode 100644 index 0000000..0cffa66 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Domain/Enums/BookingType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.Domain.Enums +{ + public enum BookingType + { + Documentation, + Trasfer, + Renewal + } +} diff --git a/mqttApi/src/Mqtt.App.Domain/Models/BaseResponseModel.cs b/mqttApi/src/Mqtt.App.Domain/Models/BaseResponseModel.cs new file mode 100644 index 0000000..7469678 --- /dev/null +++ b/mqttApi/src/Mqtt.App.Domain/Models/BaseResponseModel.cs @@ -0,0 +1,13 @@ + + +namespace Empresa.App.Domain.Models +{ + public class BaseResponseModel + { + public int StatusCode { get; set; } + public string Message { get; set; } + public bool Success { get; set; } + public dynamic Data { get; set; } + + } +} diff --git a/mqttApi/src/Mqtt.App.Domain/Mqtt.App.Domain.csproj b/mqttApi/src/Mqtt.App.Domain/Mqtt.App.Domain.csproj new file mode 100644 index 0000000..fa71b7a --- /dev/null +++ b/mqttApi/src/Mqtt.App.Domain/Mqtt.App.Domain.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/mqttApi/src/Mqtt.App.Domain/limpia.bat b/mqttApi/src/Mqtt.App.Domain/limpia.bat new file mode 100644 index 0000000..e69de29 diff --git a/mqttApi/src/Mqtt.App.External/DependencyInjectionService.cs b/mqttApi/src/Mqtt.App.External/DependencyInjectionService.cs new file mode 100644 index 0000000..226f4a0 --- /dev/null +++ b/mqttApi/src/Mqtt.App.External/DependencyInjectionService.cs @@ -0,0 +1,39 @@ +using Empresa.App.Application.Interfaces.External; +using Empresa.App.External.GetTokenJWT; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.DataProtection.KeyManagement; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Microsoft.IdentityModel.Tokens; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.External +{ + public static class DependencyInjectionService + { + public static IServiceCollection AddExternal(this IServiceCollection services, IConfiguration config) + { + + services.AddSingleton(); + + services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(option => + option.TokenValidationParameters=new TokenValidationParameters + { + ValidateIssuer = true, + ValidateAudience = true, + ValidateLifetime = true, + IssuerSigningKey= new SymmetricSecurityKey(Encoding.UTF8.GetBytes(config["SecretKeyJwt"])), + ValidIssuer = config["IssuerJWT"], + ValidAudience = config["AudienceJwt"] + + }); + //services.AddAuthorization(); + return services; + } + } +} diff --git a/mqttApi/src/Mqtt.App.External/GetTokenJWT/GetTokenJwtService.cs b/mqttApi/src/Mqtt.App.External/GetTokenJWT/GetTokenJwtService.cs new file mode 100644 index 0000000..25ef918 --- /dev/null +++ b/mqttApi/src/Mqtt.App.External/GetTokenJWT/GetTokenJwtService.cs @@ -0,0 +1,46 @@ +using Empresa.App.Application.Interfaces.External; +using Microsoft.Extensions.Configuration; +using Microsoft.IdentityModel.Tokens; +using System; +using System.Collections.Generic; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.App.External.GetTokenJWT +{ + public class GetTokenJwtService: IGetTokenJwtService + { + private readonly IConfiguration _config; + public GetTokenJwtService(IConfiguration config) + { + _config= config; + } + public string Execute(string id) + { + var tokenHandler = new JwtSecurityTokenHandler(); + string key = _config["SecretKeyJwt"]??""; + var singinkey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key)); + + var tokenDescriptor = new SecurityTokenDescriptor + { + Subject= new ClaimsIdentity(new Claim[] + { + new Claim(ClaimTypes.NameIdentifier, id) + }), + Expires= DateTime.UtcNow.AddDays(1),//expira en un dia + SigningCredentials=new SigningCredentials(singinkey,SecurityAlgorithms.HmacSha256Signature), + Issuer = _config["IssuerJWT"], + Audience = _config["AudienceJwt"] + }; + var token= tokenHandler.CreateToken(tokenDescriptor); + + var tokenString = tokenHandler.WriteToken(token); + return tokenString; + + + } + } +} diff --git a/mqttApi/src/Mqtt.App.External/Mqtt.App.External.csproj b/mqttApi/src/Mqtt.App.External/Mqtt.App.External.csproj new file mode 100644 index 0000000..01aba5d --- /dev/null +++ b/mqttApi/src/Mqtt.App.External/Mqtt.App.External.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + + + diff --git a/mqttApi/src/Mqtt.App.api.xml b/mqttApi/src/Mqtt.App.api.xml new file mode 100644 index 0000000..959e0e4 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api.xml @@ -0,0 +1,8 @@ + + + + Mqtt.App.api + + + + diff --git a/mqttApi/src/Mqtt.App.api/.config/dotnet-tools.json b/mqttApi/src/Mqtt.App.api/.config/dotnet-tools.json new file mode 100644 index 0000000..76ca931 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/.config/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "8.0.10", + "commands": [ + "dotnet-ef" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/mqttApi/src/Mqtt.App.api/Controllers/SesionController.cs b/mqttApi/src/Mqtt.App.api/Controllers/SesionController.cs new file mode 100644 index 0000000..6fa842f --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Controllers/SesionController.cs @@ -0,0 +1,36 @@ +using Empresa.App.Application.Features; +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application.Sesion.Commands.CreateSesion; +using FluentValidation; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +//using System.Web.Http; + +namespace Empresa.App.api.Controllers +{ + [Authorize] + [Route("api/v1/Sesion")] + [ApiController] + public class SesionController : ControllerBase + { + [AllowAnonymous] + [HttpPost] + public async Task Create( + [FromBody] InCreateSesionModel model, + [FromServices] ICreateSesionCommand createSesionCommand, + [FromServices] IValidator validador + ) + { + var validacion = await validador.ValidateAsync(model); + if (!validacion.IsValid) + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors)); + + var data = await createSesionCommand.Execute(model); + + + //var n=int.Parse("h"); + return StatusCode(StatusCodes.Status201Created, ResponseApiService.Response(StatusCodes.Status201Created, data)); + } + } +} diff --git a/mqttApi/src/Mqtt.App.api/Controllers/UserController.cs b/mqttApi/src/Mqtt.App.api/Controllers/UserController.cs new file mode 100644 index 0000000..197f934 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Controllers/UserController.cs @@ -0,0 +1,180 @@ +using Empresa.App.Application.Exceptions; +using Empresa.App.Application.Features; +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application.Persistencia.user.commands.DeleteUser; +using Empresa.App.Application.Persistencia.user.commands.UpdateUser; +using Empresa.App.Application.Persistencia.user.Queries.GetAllUser; +using Empresa.App.Application.Persistencia.user.Queries.GetUserById; +using Empresa.App.Application.Persistencia.user.Queries.GetUserByPassAndName; +using FluentValidation; +using Microsoft.AspNetCore.Authorization; + + +//using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +//using System.Web.Http; + +namespace Empresa.App.api.Controllers +{ + [Authorize] + [Route("api/v1/User")] + [ApiController] + [TypeFilter(typeof(ExceptionManager))]//captura errores de todo el controller + public class UserController : ControllerBase + { + /*public UserController() + { + + }*/ + [AllowAnonymous]//no securizada + [HttpGet("test")] + public async Task test() + { + //var n=int.Parse("h"); + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, "{}", "Ejecucion exitosa")); + } + [HttpGet] + public async Task GetAll( + [FromServices] IGetAllUserQuery service + ) + { + var data = await service.Execute(); + if(data==null|| data.Count<=0) + return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data)); + + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data)); + + } + [HttpGet("{userId}")] + public async Task Getuser( + int userId, + [FromServices] IGetUserByIdQuery service + ) + { + if (userId <= 0) + { + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest)); + } + var data = await service.Execute(userId); + if (data == null) + return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data)); + + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data)); + + } + [HttpGet("{userName}/{password}")] + public async Task Getuser( + string userName, + string password, + + [FromServices] IGetUserByPassAndNameQuery service, + [FromServices] IValidator<(string, string)> validador + ) + { + var validacion = await validador.ValidateAsync(( userName, password)); + if (!validacion.IsValid) + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors)); + /* + if (userName==null || userName.Length <= 0|| password == null || password.Length <= 0) + { + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest)); + }*/ + var data = await service.Execute(password,userName); + if (data == null) + return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data)); + + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data)); + + } + + + [HttpGet("login")]//se pasa parametros con ?userName=nombre&password=pass + public async Task Getuser2( + [FromQuery] string userName, + [FromQuery] string password, + + [FromServices] IGetUserByPassAndNameQuery service, + [FromServices] IValidator<(string, string)> validador + ) + { + var validacion = await validador.ValidateAsync((userName, password)); + if (!validacion.IsValid) + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors)); + + var data = await service.Execute(password, userName); + if (data == null) + return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data)); + + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data)); + + } + [HttpPost] + public async Task Create( + [FromBody] CreateUserModel model, + [FromServices] IcreateUserCommand createUserCommand, + [FromServices] IValidator validador + ) + { + var validacion = await validador.ValidateAsync(model); + if(!validacion.IsValid) + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors)); + + var data = await createUserCommand.Execute(model); + + + //var n=int.Parse("h"); + return StatusCode(StatusCodes.Status201Created, ResponseApiService.Response(StatusCodes.Status201Created, data)); + } + + [HttpPut] + public async Task Update( + [FromBody] UpdateUserModel model, + [FromServices] IupdateUserCommand updateUserCommand, + [FromServices] IValidator validador + ) + { + var validacion = await validador.ValidateAsync(model); + if (!validacion.IsValid) + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors)); + + var data = await updateUserCommand.Execute(model); + + + //var n=int.Parse("h"); + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data)); + } + + //falta hacerlo en servicio------------------------- + [HttpPatch] + public async Task UpdateParcial( + [FromBody] UpdateUserModel model, + [FromServices] IupdateUserCommand updateUserCommand + ) + { + var data = await updateUserCommand.Execute(model); + + + //var n=int.Parse("h"); + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data)); + } + + + [HttpDelete("{userId}")]//parametro por url + public async Task borrar( + int userId, + [FromServices] IDeleteUserCommand servicio + ) + { + //validacion--------------------- + if(userId<=0) + { + return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest)); + } + var data = await servicio.Execute(userId); + if(!data) + return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data)); + //var n=int.Parse("h"); + return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data)); + } + } +} diff --git a/mqttApi/src/Mqtt.App.api/DependencyInjectionService.cs b/mqttApi/src/Mqtt.App.api/DependencyInjectionService.cs new file mode 100644 index 0000000..d4da147 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/DependencyInjectionService.cs @@ -0,0 +1,51 @@ +using Microsoft.OpenApi.Models; +using System.Reflection; + +namespace Empresa.App.api +{ + //clase de inyeccion de depèndencias + public static class DependencyInjectionService + { + public static IServiceCollection AddWebApi(this IServiceCollection services) + { + services.AddSwaggerGen(option => + { + option.SwaggerDoc("v1", new OpenApiInfo + { + Version = "v1", + Title = "Empresa.App.api", + Description = "Plantilla generica para apis" + }); + //parametros de seguridad----------------------------------- + option.AddSecurityDefinition("Beare", new OpenApiSecurityScheme + { + In = ParameterLocation.Header, + Description="Ingrese un tokenVálido", + Name="Authorization", + Type=SecuritySchemeType.Http, + BearerFormat="JWT", + Scheme="Bearer" + }); + option.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { + new OpenApiSecurityScheme + { + Reference=new OpenApiReference + { + Type=ReferenceType.SecurityScheme, + Id="Bearer" + } + + }, + new string[]{ } + } + }); + //----------------------------------------------------------- + var fileName = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; + option.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, fileName)); + }); + return services; + } + } +} diff --git a/mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj b/mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj new file mode 100644 index 0000000..f87a839 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj @@ -0,0 +1,25 @@ + + + + net8.0 + enable + enable + True + F:\desa\v2022\MqttApps\mqttApi\src\Mqtt.App.api.xml + + + + + + + + + + + + + + + + + diff --git a/mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj.user b/mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj.user new file mode 100644 index 0000000..a578f85 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Mqtt.App.api.csproj.user @@ -0,0 +1,6 @@ + + + + F:\desa\v2022\PlantillaApiNet8\Empresa.app\src\Empresa.App.api\Properties\PublishProfiles\ParaDocker.pubxml + + \ No newline at end of file diff --git a/mqttApi/src/Mqtt.App.api/Mqtt.App.api.http b/mqttApi/src/Mqtt.App.api/Mqtt.App.api.http new file mode 100644 index 0000000..14a16c5 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Mqtt.App.api.http @@ -0,0 +1,6 @@ +@Empresa.App.api_HostAddress = http://localhost:5181 + +GET {{Empresa.App.api_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/mqttApi/src/Mqtt.App.api/Program.cs b/mqttApi/src/Mqtt.App.api/Program.cs new file mode 100644 index 0000000..f1cd4ff --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Program.cs @@ -0,0 +1,67 @@ +using Empresa.App.api; +using Empresa.App.Application.Interfaces; +using Empresa.App.Common; +using Empresa.app.Persistencia; +using Empresa.App.External; +using Empresa.App.Application.Persistencia.user.commands.CreateUser; +using Empresa.App.Application; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + + +//añadir dependencias por inyeccion--------------------------- +//añadri cadena de conexion esto te obliga a añadir dependencias a entity +//builder.Services.addDbContext + + +//inyeccion de dependencias te obliga a linckar persistencia y a externo¿? + +//builder.Services.AddScoped(); + +builder.Services.AddControllers(); + +builder.Services.AddWebApi() + .AddCommon() + .AddAplication() + .AddExternal(builder.Configuration) + .AddPersistencia(builder.Configuration); + +// + + +var app = builder.Build(); +//poner swagger +app.UseSwagger(); +app.UseSwaggerUI( options => +{ + options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"); + options.RoutePrefix = string.Empty; +}); +app.UseAuthentication(); +app.UseAuthorization(); + + +app.MapControllers(); + + + +//prueba de servicios------------------------------------------- +/* +app.MapGet("/test", async (IcreateUserCommand service) => +{ + var e = new CreateUserModel(); + e.UserName = "test"; + e.FristName = "FristName"; + e.LastName = "LastName"; + e.Password = "Password"; + + return await service.Execute(e); +}); +*/ +//-------------------------------------------------------------- + +// Configure the HTTP request pipeline. + +app.Run(); diff --git a/mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml b/mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml new file mode 100644 index 0000000..bdbe263 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml @@ -0,0 +1,22 @@ + + + + + false + false + true + Release + Any CPU + FileSystem + bin\Release\net8.0\publish\ + FileSystem + <_TargetId>Folder + + net8.0 + c21ae3ac-d81e-4eee-a341-1bf131d2ef9d + false + linux-x64 + + \ No newline at end of file diff --git a/mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml.user b/mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml.user new file mode 100644 index 0000000..93315b2 --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Properties/PublishProfiles/ParaDocker.pubxml.user @@ -0,0 +1,11 @@ + + + + + <_PublishTargetUrl>F:\desa\v2022\PlantillaApiNet8\Empresa.app\src\Empresa.App.api\bin\Release\net8.0\publish\ + True|2024-10-13T22:20:08.1409506Z||;False|2024-10-12T00:55:43.7868486+02:00||;False|2024-10-12T00:54:55.4206586+02:00||;False|2024-10-12T00:53:16.4986422+02:00||;False|2024-10-12T00:48:55.1444606+02:00||;False|2024-10-12T00:41:42.3670744+02:00||;True|2024-10-12T00:38:00.0676000+02:00||;False|2024-10-12T00:37:27.3435243+02:00||;False|2024-10-12T00:36:59.2954575+02:00||;False|2024-10-11T23:05:11.9327090+02:00||;False|2024-10-11T22:57:40.4911279+02:00||;False|2024-10-11T22:49:51.2207122+02:00||;False|2024-10-11T22:46:38.3566597+02:00||;False|2024-10-11T22:44:26.6288883+02:00||;False|2024-10-11T22:42:50.5880241+02:00||;False|2024-10-11T22:14:27.4878309+02:00||;True|2024-10-11T21:59:36.3243372+02:00||; + + + \ No newline at end of file diff --git a/mqttApi/src/Mqtt.App.api/Properties/launchSettings.json b/mqttApi/src/Mqtt.App.api/Properties/launchSettings.json new file mode 100644 index 0000000..2b4e8fb --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "profiles": { + "http": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "dotnetRunMessages": true, + "applicationUrl": "http://localhost:5181" + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "weatherforecast", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + }, + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:18396", + "sslPort": 0 + } + } +} \ No newline at end of file diff --git a/mqttApi/src/Mqtt.App.api/appsettings.Development.json b/mqttApi/src/Mqtt.App.api/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/mqttApi/src/Mqtt.App.api/appsettings.json b/mqttApi/src/Mqtt.App.api/appsettings.json new file mode 100644 index 0000000..be6b8df --- /dev/null +++ b/mqttApi/src/Mqtt.App.api/appsettings.json @@ -0,0 +1,17 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "SqlConnectionString": "server=192.168.56.1,1433;user id=sa;password=pass1234.4321@#;initial catalog=AppPrueba; Trust Server Certificate=True", + "SecretKeyJwt": "NFAJJSAK3523dgsdf.dasfas.dsnfansnvDSFaskin908348", + "IssuerJWT": "EmpresaApp.com", + "AudienceJwt": "EmpresaApp.com", + "MasterKey": "bdasbvña78678,.p``´dshnihfp" + + + +} diff --git a/mqttApi/src/Mqtt.app.Persistencia/Configurations/UserConfiguration.cs b/mqttApi/src/Mqtt.app.Persistencia/Configurations/UserConfiguration.cs new file mode 100644 index 0000000..3151392 --- /dev/null +++ b/mqttApi/src/Mqtt.app.Persistencia/Configurations/UserConfiguration.cs @@ -0,0 +1,26 @@ +using Empresa.App.Domain.Entities.User; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.app.Persistencia.Configurations +{ + public class UserConfiguration + { + public UserConfiguration( EntityTypeBuilder entityBuilder) { + entityBuilder.ToTable("UserEntity"); + entityBuilder.HasKey(x => x.Id); + entityBuilder.Property(x => x.UserName).IsRequired(); + entityBuilder.Property(x => x.LastName).IsRequired(); + entityBuilder.Property(x => x.FristName).IsRequired(); + entityBuilder.Property(x => x.Password).IsRequired(); + + + + } + } +} diff --git a/mqttApi/src/Mqtt.app.Persistencia/DependencyInjectionService.cs b/mqttApi/src/Mqtt.app.Persistencia/DependencyInjectionService.cs new file mode 100644 index 0000000..cf11ae9 --- /dev/null +++ b/mqttApi/src/Mqtt.app.Persistencia/DependencyInjectionService.cs @@ -0,0 +1,39 @@ +using Empresa.app.Persistencia.Services; +using Empresa.App.Application.Interfaces; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Data.SqlClient; +namespace Empresa.app.Persistencia +{ + public static class DependencyInjectionService + { + public static IServiceCollection AddPersistencia(this IServiceCollection services, IConfiguration config) + { + services.AddDbContext( options => + options.UseSqlServer(config["SqlConnectionString"])); + + services.AddScoped(); + + + //para cifrado de bbdd + /* + * Falta investigar como hacer un probaider de certificados + * * / + + SqlConnection.RegisterColumnEncryptionKeyStoreProviders(new Dictionary(1)//, StringComparer.OrdinalIgnoreCase) + { + { SqlColumnEncryptionCertificateStoreProvider.ProviderName,provaider_certificados } + }); + + */ + return services; + } + } +} diff --git a/mqttApi/src/Mqtt.app.Persistencia/Mqtt.app.Persistencia.csproj b/mqttApi/src/Mqtt.app.Persistencia/Mqtt.app.Persistencia.csproj new file mode 100644 index 0000000..c03989e --- /dev/null +++ b/mqttApi/src/Mqtt.app.Persistencia/Mqtt.app.Persistencia.csproj @@ -0,0 +1,21 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + + + + diff --git a/mqttApi/src/Mqtt.app.Persistencia/Services/PersistenciaService.cs b/mqttApi/src/Mqtt.app.Persistencia/Services/PersistenciaService.cs new file mode 100644 index 0000000..590a067 --- /dev/null +++ b/mqttApi/src/Mqtt.app.Persistencia/Services/PersistenciaService.cs @@ -0,0 +1,93 @@ +using Empresa.app.Persistencia.Configurations; +using Empresa.App.Application.Interfaces; +using Empresa.App.Domain.Entities.User; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Empresa.app.Persistencia.Services +{ + public class PersistenciaService : DbContext, IPersistenciaService + { + public PersistenciaService(DbContextOptions options): base(options) + { + } + public DbSet User { get; set; } + + public async Task AddUser(UserEntity user) + { + User.Add(user); + return await BoolAsync(); + } + public async Task UpdateUser(UserEntity user) + { + User.Update(user); + return await BoolAsync(); + } + public async Task DeleteUser(int idUser) + { + var enty= await User.FirstOrDefaultAsync(x => x.Id == idUser); + if (enty == null) + return false; + User.Remove(enty); + return await BoolAsync(); + } + public async Task UpdateNoNullUser(UserEntity user) + { + var enty = await User.FirstOrDefaultAsync(x => x.Id == user.Id); + if (enty == null) + return false; + if(user.Password!=null) + enty.Password= user.Password; + + if (user.LastName != null) + enty.LastName = user.LastName; + + if (user.UserName != null) + enty.UserName = user.UserName; + + if (user.FristName != null) + enty.FristName = user.FristName; + return await BoolAsync(); + } + + + public async Task> GetAllUser() + { + return await User.ToListAsync(); + } + + + public async Task GetUserById(int idUser) + { + var enty = await User.FirstOrDefaultAsync(x => x.Id == idUser); + return enty; + } + + public async Task GetUserByPassAndName(string pass, string name) + { + var enty = await User.FirstOrDefaultAsync(x => (x.Password == pass) && (x.UserName==name)); + return enty; + } + + + + private async Task BoolAsync() + { + return await SaveChangesAsync()>0; + } + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + EntityConfigration(modelBuilder); + } + private void EntityConfigration(ModelBuilder model) + { + //configuras entidades relaccionadas con bbdd + new UserConfiguration(model.Entity()); + } + } +} diff --git a/mqttLog/mqttLog/Program.cs b/mqttLog/mqttLog/Program.cs new file mode 100644 index 0000000..34dc7ee --- /dev/null +++ b/mqttLog/mqttLog/Program.cs @@ -0,0 +1,15 @@ +using mqttLog; +using log4net; +using log4net.Config; +using System.Reflection; + +var builder = Host.CreateApplicationBuilder(args); + +// Configurar log4net +var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly()); +XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config")); + +builder.Services.AddHostedService(); + +var host = builder.Build(); +host.Run(); diff --git a/mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml b/mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..5821348 --- /dev/null +++ b/mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,15 @@ + + + + + Release + Any CPU + bin\Release\net8.0\publish\ + FileSystem + <_TargetId>Folder + net8.0 + false + + \ No newline at end of file diff --git a/mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml.user b/mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml.user new file mode 100644 index 0000000..f42ca6b --- /dev/null +++ b/mqttLog/mqttLog/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -0,0 +1,10 @@ + + + + + True|2025-02-27T22:11:36.3713958Z||; + + + \ No newline at end of file diff --git a/mqttLog/mqttLog/Properties/launchSettings.json b/mqttLog/mqttLog/Properties/launchSettings.json new file mode 100644 index 0000000..8a9e5df --- /dev/null +++ b/mqttLog/mqttLog/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "mqttLog": { + "commandName": "Project", + "dotnetRunMessages": true, + "environmentVariables": { + "DOTNET_ENVIRONMENT": "Development" + } + } + } +} diff --git a/mqttLog/mqttLog/Worker.cs b/mqttLog/mqttLog/Worker.cs new file mode 100644 index 0000000..146cd7f --- /dev/null +++ b/mqttLog/mqttLog/Worker.cs @@ -0,0 +1,80 @@ +namespace mqttLog +{ + using log4net; + using Microsoft.Extensions.Logging; + //using log4net.Config; + using MQTTnet; + using System.Buffers; + using System.Text; + + public class Worker : BackgroundService + { + private readonly ILogger _logger; + private static readonly ILog log = LogManager.GetLogger("MQTTlOG"); + IMqttClient mqttClient; + string server, idClient; + string topic; + public Worker(ILogger logger) + { + _logger = logger; + server = "192.168.2.50"; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + log.Info("INICIO-------------------------------------"); + if (_logger.IsEnabled(LogLevel.Information)) + { + _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + } + var mqttFactory = new MqttClientFactory(); + using (var mqttClient = mqttFactory.CreateMqttClient()) + { + var mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer(server).Build(); + + // Setup message handling before connecting so that queued messages + // are also handled properly. When there is no event handler attached all + // received messages get lost. + mqttClient.ApplicationMessageReceivedAsync += e => + { + + onReceived(e); + return Task.CompletedTask; + }; + + var conect= await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); + if(conect.ResultCode== MqttClientConnectResultCode.Success) + { + var topicFilter = new MqttTopicFilterBuilder().WithTopic("casa/#").Build(); + var subscribeOptions = new MqttClientSubscribeOptionsBuilder().WithTopicFilter(topicFilter).Build(); + //var susb = await mqttClient.SubscribeAsync("casa"); + var susb = await mqttClient.SubscribeAsync(subscribeOptions); + + } + + while (!stoppingToken.IsCancellationRequested) + { + await Task.Delay(1000, stoppingToken); + } + await mqttClient.DisconnectAsync(); + } + log.Info("FINAL FELIZ-------------------------------------"); + } + public void onReceived(MqttApplicationMessageReceivedEventArgs e) + { + StringBuilder sb = new StringBuilder(); + SequenceReader reader = new SequenceReader(e.ApplicationMessage.Payload); + + while (!reader.End) + { + sb.Append(Encoding.UTF8.GetString(reader.UnreadSpan)); + reader.Advance(reader.UnreadSpan.Length); + } + + string result = sb.ToString(); + + _logger.LogInformation(e.ApplicationMessage.Topic + " --> " + result); + log.Info(e.ApplicationMessage.Topic +" --> " + result); + } + } +} diff --git a/mqttLog/mqttLog/appsettings.Development.json b/mqttLog/mqttLog/appsettings.Development.json new file mode 100644 index 0000000..b2dcdb6 --- /dev/null +++ b/mqttLog/mqttLog/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/mqttLog/mqttLog/appsettings.json b/mqttLog/mqttLog/appsettings.json new file mode 100644 index 0000000..b2dcdb6 --- /dev/null +++ b/mqttLog/mqttLog/appsettings.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/mqttLog/mqttLog/log4net.config b/mqttLog/mqttLog/log4net.config new file mode 100644 index 0000000..bcefc1b --- /dev/null +++ b/mqttLog/mqttLog/log4net.config @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mqttLog/mqttLog/mqttLog.csproj b/mqttLog/mqttLog/mqttLog.csproj new file mode 100644 index 0000000..386e050 --- /dev/null +++ b/mqttLog/mqttLog/mqttLog.csproj @@ -0,0 +1,15 @@ + + + + net8.0 + enable + enable + dotnet-mqttLog-65c1334a-2d38-4022-b4ac-5d8253990180 + + + + + + + + diff --git a/mqttLog/mqttLog/mqttLog.csproj.user b/mqttLog/mqttLog/mqttLog.csproj.user new file mode 100644 index 0000000..b13284b --- /dev/null +++ b/mqttLog/mqttLog/mqttLog.csproj.user @@ -0,0 +1,6 @@ + + + + <_LastSelectedProfileId>F:\desa\v2022\mqttLog\mqttLog\Properties\PublishProfiles\FolderProfile.pubxml + + \ No newline at end of file diff --git a/mqttLog/mqttLog/mqttLog.sln b/mqttLog/mqttLog/mqttLog.sln new file mode 100644 index 0000000..6e6531e --- /dev/null +++ b/mqttLog/mqttLog/mqttLog.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.12.35521.163 d17.12 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mqttLog", "mqttLog.csproj", "{F2CC350F-B94D-4F87-ACF9-525920FD5359}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F2CC350F-B94D-4F87-ACF9-525920FD5359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2CC350F-B94D-4F87-ACF9-525920FD5359}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2CC350F-B94D-4F87-ACF9-525920FD5359}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2CC350F-B94D-4F87-ACF9-525920FD5359}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal