From 98d1b143d06009d73b177aab5852243a52ccc68a Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Thu, 2 Nov 2023 20:48:55 +0100 Subject: [PATCH 01/23] criando o core do projecto --- .../OliSaude.Domain/Entities/Cliente.cs | 37 +++++++++++++++++++ .../OliSaude.Domain/Entities/Entity.cs | 12 ++++++ dev/OliSaude/OliSaude.Domain/Enums/ESexo.cs | 8 ++++ .../OliSaude.Domain/OliSaude.Domain.csproj | 9 +++++ .../ValueObject/ProblemaSaude.cs | 12 ++++++ .../ValueObject/ValeuObject.cs | 6 +++ dev/OliSaude/OliSaude.sln | 13 +++++++ 7 files changed, 97 insertions(+) create mode 100644 dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs create mode 100644 dev/OliSaude/OliSaude.Domain/Entities/Entity.cs create mode 100644 dev/OliSaude/OliSaude.Domain/Enums/ESexo.cs create mode 100644 dev/OliSaude/OliSaude.Domain/OliSaude.Domain.csproj create mode 100644 dev/OliSaude/OliSaude.Domain/ValueObject/ProblemaSaude.cs create mode 100644 dev/OliSaude/OliSaude.Domain/ValueObject/ValeuObject.cs create mode 100644 dev/OliSaude/OliSaude.sln diff --git a/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs new file mode 100644 index 00000000..691ee408 --- /dev/null +++ b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs @@ -0,0 +1,37 @@ +using OliSaude.Domain.Enums; +using OliSaude.Domain.ValueObject; + +namespace OliSaude.Domain.Entities; + +public class Cliente : Entity +{ + public Cliente(string nome, DateTime + dataNascimento, + ESexo sexo, + ProblemaSaude problemaDeSaude) + { + Nome = nome; + DataNascimento = dataNascimento; + Sexo = sexo; + ProblemaDeSaude = problemaDeSaude; + DataActualizacao = DateTime.UtcNow; + } + + public string Nome { get; private set; } + public DateTime DataNascimento { get; private set; } + public ESexo Sexo { get; private set; } + public ProblemaSaude ProblemaDeSaude { get; private set; } + public DateTime DataActualizacao { get; private set; } + + public void UpdateCliente(string nome, + DateTime dataNascimento, + ESexo sexo, + ProblemaSaude problemaDeSaude, DateTime dateActualizacao) + { + nome = Nome; + dataNascimento= DataNascimento; + sexo = Sexo; + problemaDeSaude = ProblemaDeSaude; + DataActualizacao= dateActualizacao; + } +} diff --git a/dev/OliSaude/OliSaude.Domain/Entities/Entity.cs b/dev/OliSaude/OliSaude.Domain/Entities/Entity.cs new file mode 100644 index 00000000..92775b0b --- /dev/null +++ b/dev/OliSaude/OliSaude.Domain/Entities/Entity.cs @@ -0,0 +1,12 @@ +namespace OliSaude.Domain.Entities +{ + public abstract class Entity + { + protected Entity() + { + DataCriacao = DateTime.UtcNow; + } + public int Id { get; private set; } + public DateTime DataCriacao { get; private set; } + } +} diff --git a/dev/OliSaude/OliSaude.Domain/Enums/ESexo.cs b/dev/OliSaude/OliSaude.Domain/Enums/ESexo.cs new file mode 100644 index 00000000..54f64a8c --- /dev/null +++ b/dev/OliSaude/OliSaude.Domain/Enums/ESexo.cs @@ -0,0 +1,8 @@ +namespace OliSaude.Domain.Enums +{ + public enum ESexo + { + Mascolino = 1, + Femenino = 2 + } +} diff --git a/dev/OliSaude/OliSaude.Domain/OliSaude.Domain.csproj b/dev/OliSaude/OliSaude.Domain/OliSaude.Domain.csproj new file mode 100644 index 00000000..cfadb03d --- /dev/null +++ b/dev/OliSaude/OliSaude.Domain/OliSaude.Domain.csproj @@ -0,0 +1,9 @@ + + + + net7.0 + enable + enable + + + diff --git a/dev/OliSaude/OliSaude.Domain/ValueObject/ProblemaSaude.cs b/dev/OliSaude/OliSaude.Domain/ValueObject/ProblemaSaude.cs new file mode 100644 index 00000000..460653f3 --- /dev/null +++ b/dev/OliSaude/OliSaude.Domain/ValueObject/ProblemaSaude.cs @@ -0,0 +1,12 @@ +namespace OliSaude.Domain.ValueObject; +public class ProblemaSaude : ValeuObject +{ + public ProblemaSaude(string nome, int grau) + { + Nome = nome; + Grau = grau; + } + + public string Nome { get; private set; } + public int Grau { get; private set; } +} diff --git a/dev/OliSaude/OliSaude.Domain/ValueObject/ValeuObject.cs b/dev/OliSaude/OliSaude.Domain/ValueObject/ValeuObject.cs new file mode 100644 index 00000000..44cf98a8 --- /dev/null +++ b/dev/OliSaude/OliSaude.Domain/ValueObject/ValeuObject.cs @@ -0,0 +1,6 @@ +namespace OliSaude.Domain.ValueObject +{ + public abstract class ValeuObject + { + } +} diff --git a/dev/OliSaude/OliSaude.sln b/dev/OliSaude/OliSaude.sln new file mode 100644 index 00000000..d5824f91 --- /dev/null +++ b/dev/OliSaude/OliSaude.sln @@ -0,0 +1,13 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34031.279 +MinimumVisualStudioVersion = 10.0.40219.1 +Global + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D0547902-8B4C-46CB-8BCC-8B64D8F84653} + EndGlobalSection +EndGlobal From a768c5b4efc0bdcec9fc672195b4357af3ecd897 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Thu, 2 Nov 2023 20:49:46 +0100 Subject: [PATCH 02/23] . --- .gitignore | 477 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 477 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..154e1272 --- /dev/null +++ b/.gitignore @@ -0,0 +1,477 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk From f81406d5d1897c438667c7c56fca2857fece0a09 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Thu, 2 Nov 2023 21:33:50 +0100 Subject: [PATCH 03/23] trabalhando na camada aplications --- .../OliSaude.Application/Dto/ClienteDto.cs | 22 +++++++++++++++++++ .../Interfaces/IClienteRepositorio.cs | 13 +++++++++++ .../Interfaces/IClienteService.cs | 12 ++++++++++ .../OliSaude.Application.csproj | 17 ++++++++++++++ .../Service/ClienteService.cs | 13 +++++++++++ dev/OliSaude/OliSaude.sln | 18 +++++++++++++++ 6 files changed, 95 insertions(+) create mode 100644 dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs create mode 100644 dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs create mode 100644 dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs create mode 100644 dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj create mode 100644 dev/OliSaude/OliSaude.Application/Service/ClienteService.cs diff --git a/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs new file mode 100644 index 00000000..12990709 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs @@ -0,0 +1,22 @@ +using AutoMapper; +using OliSaude.Domain.Entities; +using OliSaude.Domain.Enums; + +namespace OliSaude.Application.Dto +{ + public class ClienteDto + { + public string Nome { get; set; } + public DateTime DataNascimento { get; set; } + public ESexo Sexo { get; set; } + public string NomeProblema { get; set; } + public int GrauProblema { get; set; } + + private class Map : Profile + { + public Map() { + CreateMap().ReverseMap(); + } + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs new file mode 100644 index 00000000..7aba6416 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs @@ -0,0 +1,13 @@ +using OliSaude.Domain.Entities; + +namespace OliSaude.Application.Interfaces +{ + public interface IClienteRepositorio + { + int Save(Cliente cliente); + IEnumerable GetAllClientes(); + Cliente GetCliente(int id); + void UpdateCliente(int id); + void DeleteCliente(int cliente); + } +} diff --git a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs new file mode 100644 index 00000000..a12ca0fc --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs @@ -0,0 +1,12 @@ +using OliSaude.Application.Dto; +using OliSaude.Domain.Entities; + +namespace OliSaude.Application.Interfaces +{ + public interface IClienteService + { + + IEnumerable GetClientesMaiorRisco(); + + } +} diff --git a/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj b/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj new file mode 100644 index 00000000..06a0d05d --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj @@ -0,0 +1,17 @@ + + + + net7.0 + enable + enable + + + + + + + + + + + diff --git a/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs b/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs new file mode 100644 index 00000000..e6f829ce --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs @@ -0,0 +1,13 @@ +using OliSaude.Application.Dto; +using OliSaude.Application.Interfaces; + +namespace OliSaude.Application.Service +{ + public class ClienteService : IClienteService + { + public IEnumerable GetClientesMaiorRisco() + { + throw new NotImplementedException(); + } + } +} diff --git a/dev/OliSaude/OliSaude.sln b/dev/OliSaude/OliSaude.sln index d5824f91..5f11c186 100644 --- a/dev/OliSaude/OliSaude.sln +++ b/dev/OliSaude/OliSaude.sln @@ -3,7 +3,25 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.7.34031.279 MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Domain", "OliSaude.Domain\OliSaude.Domain.csproj", "{D57F79B2-F622-4169-B23C-4FFD250B0EE4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Application", "OliSaude.Application\OliSaude.Application.csproj", "{1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}" +EndProject Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D57F79B2-F622-4169-B23C-4FFD250B0EE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D57F79B2-F622-4169-B23C-4FFD250B0EE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D57F79B2-F622-4169-B23C-4FFD250B0EE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D57F79B2-F622-4169-B23C-4FFD250B0EE4}.Release|Any CPU.Build.0 = Release|Any CPU + {1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection From 69f1969a6811437bcd062d32052e26ab5e2baa87 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Thu, 2 Nov 2023 23:02:58 +0100 Subject: [PATCH 04/23] criando o service para escolher os 10 mas perigosos --- .../Service/ClienteService.cs | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs b/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs index e6f829ce..3a896eb7 100644 --- a/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs +++ b/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs @@ -1,13 +1,33 @@ -using OliSaude.Application.Dto; +using AutoMapper; +using OliSaude.Application.Dto; using OliSaude.Application.Interfaces; +using OliSaude.Domain.Entities; namespace OliSaude.Application.Service { public class ClienteService : IClienteService { + private readonly IClienteRepositorio _repo; + private readonly IMapper _mapper; + + public ClienteService(IClienteRepositorio repo) + { + _repo = repo; + } + public IEnumerable GetClientesMaiorRisco() { - throw new NotImplementedException(); + + var clientes = _repo.GetAllClientes().OrderByDescending(cliente =>CalculoScore(cliente)).Take(10); + + return _mapper.Map>(clientes); + } + private double CalculoScore(Cliente cliente) + { + var sd = cliente.ProblemaDeSaude.Grau; + var denominador = 1 + Math.Pow(Math.E, -(-2.8 + sd)); + var score = (1 / denominador) * 100; + return score; } } } From 65e5c904d947ca24e558510140eedc120b4048f3 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 3 Nov 2023 00:07:46 +0100 Subject: [PATCH 05/23] criando o repositorio --- .../OliSaude.Infra/Data/OliSaudeContext.cs | 19 +++++++ .../OliSaude.Infra/OliSaude.Infra.csproj | 17 +++++++ .../Repostorio/ClienteRepositorio.cs | 51 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs create mode 100644 dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj create mode 100644 dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs diff --git a/dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs b/dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs new file mode 100644 index 00000000..b5a0a58c --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs @@ -0,0 +1,19 @@ +using Microsoft.EntityFrameworkCore; +using OliSaude.Domain.Entities; + +namespace OliSaude.Infra.Data; + +public class OliSaudeContext : DbContext +{ + public DbSet Clientes { get; set; } + public OliSaudeContext(DbContextOptions options ) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + } +} diff --git a/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj b/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj new file mode 100644 index 00000000..0411ce53 --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj @@ -0,0 +1,17 @@ + + + + net7.0 + enable + enable + + + + + + + + + + + diff --git a/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs new file mode 100644 index 00000000..fa5a4810 --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs @@ -0,0 +1,51 @@ +using Microsoft.EntityFrameworkCore; +using OliSaude.Application.Interfaces; +using OliSaude.Domain.Entities; +using OliSaude.Infra.Data; + +namespace OliSaude.Infra.Repostorio; +public class ClienteRepositorio : IClienteRepositorio +{ + private readonly OliSaudeContext _context; + + public ClienteRepositorio(OliSaudeContext context) + { + _context = context; + } + + public IEnumerable GetAllClientes() + { + return _context + .Clientes + .AsNoTracking() + .ToList(); + } + + public Cliente GetCliente(int id) + { + var cliente = _context.Clientes.FirstOrDefault(c => c.Id == id); + return cliente; + } + + public int Save(Cliente cliente) + { + _context.Add(cliente); + _context.SaveChanges(); + + return cliente.Id; + } + + public void UpdateCliente(int id) + { + var cliente = _context.Clientes.FirstOrDefault(x => x.Id == id); + _context.Entry(cliente).State = EntityState.Modified; + _context.SaveChanges(); + } + + public void DeleteCliente(int id) + { + var cliente = _context.Clientes.FirstOrDefault(x=>x.Id ==id); + _context.Remove(cliente); + _context.SaveChanges(); + } +} From c419ad378f371e859bf07da5cfcc8da8d8d59b1b Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 3 Nov 2023 01:34:03 +0100 Subject: [PATCH 06/23] inserindo os comandos de insert e de update --- .../CreateCliente/CreateClienteCommand.cs | 15 ++++++++++ .../CreateCliente/CreateClienteHandler.cs | 25 +++++++++++++++++ .../UpdateCliente/UpdateClienteCommand.cs | 13 +++++++++ .../UpdateCliente/UpdateClienteHandler.cs | 28 +++++++++++++++++++ .../OliSaude.Application/Dto/ClienteDto.cs | 1 + .../Interfaces/IClienteRepositorio.cs | 6 ++-- .../OliSaude.Application.csproj | 5 ++++ .../OliSaude.Domain/Entities/Cliente.cs | 11 ++++---- .../Repostorio/ClienteRepositorio.cs | 12 ++++---- dev/OliSaude/OliSaude.sln | 6 ++++ 10 files changed, 106 insertions(+), 16 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs new file mode 100644 index 00000000..3db5709e --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs @@ -0,0 +1,15 @@ +using MediatR; +using OliSaude.Domain.Enums; + +namespace OliSaude.Application.Clientes.CreateCliente +{ + public class CreateClienteCommand : IRequest + { + public string Nome { get; set; } + public DateTime DataNascimento { get; set; } + public ESexo Sexo { get; set; } + public string NomeProblema { get; set; } + public int GrauProblema { get; set; } + + } +} diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs new file mode 100644 index 00000000..fa292bce --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs @@ -0,0 +1,25 @@ +using MediatR; +using OliSaude.Application.Interfaces; +using OliSaude.Domain.Entities; +using OliSaude.Domain.ValueObject; + +namespace OliSaude.Application.Clientes.CreateCliente +{ + public class CreateUserHandler : IRequestHandler + { + private readonly IClienteRepositorio _repo; + + public CreateUserHandler(IClienteRepositorio repo) + { + _repo = repo; + } + + public async Task Handle(CreateClienteCommand request, CancellationToken cancellationToken) + { + var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); + var cliente = new Cliente(request.Nome, request.DataNascimento, request.Sexo, problema); + return await _repo.SaveAsync(cliente, cancellationToken); + + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs new file mode 100644 index 00000000..cb4cc9ff --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs @@ -0,0 +1,13 @@ +using MediatR; +using OliSaude.Domain.Enums; + +namespace OliSaude.Application.Clientes.UpdateUser; + +public class UpdateClienteCommand : IRequest +{ + public int Id { get; set; } + public string Nome { get; set; } + public DateTime DataNascimento { get; set; } + public string NomeProblema { get; set; } + public int GrauProblema { get; set; } +} diff --git a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs new file mode 100644 index 00000000..df563e67 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs @@ -0,0 +1,28 @@ +using MediatR; +using OliSaude.Application.Clientes.UpdateUser; +using OliSaude.Application.Interfaces; +using OliSaude.Domain.ValueObject; + +namespace OliSaude.Application.Clientes.UpdateCliente +{ + public class UpdateClienteHandler : IRequestHandler + { + private readonly IClienteRepositorio _repo; + + public UpdateClienteHandler(IClienteRepositorio repo) + { + _repo = repo; + } + + public async Task Handle(UpdateClienteCommand request, CancellationToken cancellationToken) + { + var cliente = _repo.GetCliente(request.Id); + + if (cliente is null) + throw new Exception("Cliente invalido"); + var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); + cliente.UpdateCliente(request.Nome, request.DataNascimento, problema, DateTime.UtcNow); + await _repo.UpdateCliente(cliente, cancellationToken); + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs index 12990709..456e1769 100644 --- a/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs +++ b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs @@ -6,6 +6,7 @@ namespace OliSaude.Application.Dto { public class ClienteDto { + public int Id { get; set; } public string Nome { get; set; } public DateTime DataNascimento { get; set; } public ESexo Sexo { get; set; } diff --git a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs index 7aba6416..10cc9c5d 100644 --- a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs +++ b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs @@ -4,10 +4,10 @@ namespace OliSaude.Application.Interfaces { public interface IClienteRepositorio { - int Save(Cliente cliente); + Task SaveAsync(Cliente cliente, CancellationToken cancellationToken); IEnumerable GetAllClientes(); Cliente GetCliente(int id); - void UpdateCliente(int id); - void DeleteCliente(int cliente); + Task UpdateCliente(Cliente cliente, CancellationToken cancellationToken); + void DeleteCliente(Cliente cliente); } } diff --git a/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj b/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj index 06a0d05d..bd74f08a 100644 --- a/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj +++ b/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj @@ -8,10 +8,15 @@ + + + + + diff --git a/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs index 691ee408..2ff4d05b 100644 --- a/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs +++ b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs @@ -25,13 +25,12 @@ public Cliente(string nome, DateTime public void UpdateCliente(string nome, DateTime dataNascimento, - ESexo sexo, - ProblemaSaude problemaDeSaude, DateTime dateActualizacao) + ProblemaSaude problemaDeSaude, + DateTime dateActualizacao) { - nome = Nome; - dataNascimento= DataNascimento; - sexo = Sexo; - problemaDeSaude = ProblemaDeSaude; + Nome =nome; + DataNascimento=dataNascimento; + ProblemaDeSaude =problemaDeSaude; DataActualizacao= dateActualizacao; } } diff --git a/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs index fa5a4810..aeff2579 100644 --- a/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs +++ b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs @@ -27,24 +27,22 @@ public Cliente GetCliente(int id) return cliente; } - public int Save(Cliente cliente) + public async Task SaveAsync(Cliente cliente, CancellationToken cancellationToken) { _context.Add(cliente); - _context.SaveChanges(); + await _context.SaveChangesAsync(); return cliente.Id; } - public void UpdateCliente(int id) + public async Task UpdateCliente(Cliente cliente, CancellationToken cancellationToken) { - var cliente = _context.Clientes.FirstOrDefault(x => x.Id == id); _context.Entry(cliente).State = EntityState.Modified; - _context.SaveChanges(); + await _context.SaveChangesAsync(cancellationToken); } - public void DeleteCliente(int id) + public void DeleteCliente(Cliente cliente) { - var cliente = _context.Clientes.FirstOrDefault(x=>x.Id ==id); _context.Remove(cliente); _context.SaveChanges(); } diff --git a/dev/OliSaude/OliSaude.sln b/dev/OliSaude/OliSaude.sln index 5f11c186..5428b7bd 100644 --- a/dev/OliSaude/OliSaude.sln +++ b/dev/OliSaude/OliSaude.sln @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Domain", "OliSaude EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Application", "OliSaude.Application\OliSaude.Application.csproj", "{1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Infra", "OliSaude.Infra\OliSaude.Infra.csproj", "{6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}.Debug|Any CPU.Build.0 = Debug|Any CPU {1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}.Release|Any CPU.ActiveCfg = Release|Any CPU {1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}.Release|Any CPU.Build.0 = Release|Any CPU + {6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 1673315ca1f0b2b54f6bfaef8fb97b2a21a7c889 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 3 Nov 2023 09:01:19 +0100 Subject: [PATCH 07/23] Terminando os comandos --- .../DeleteCliente/DeleteClienteCommand.cs | 9 ++++++++ .../DeleteCliente/DeleteClienteHandler.cs | 23 +++++++++++++++++++ .../UpdateCliente/UpdateClienteHandler.cs | 4 ++-- .../Interfaces/IClienteRepositorio.cs | 4 ++-- .../Repostorio/ClienteRepositorio.cs | 6 ++--- 5 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs diff --git a/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs new file mode 100644 index 00000000..78cd484d --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs @@ -0,0 +1,9 @@ +using MediatR; + +namespace OliSaude.Application.Clientes.DeleteCliente +{ + public class DeleteClienteCommand : IRequest + { + public int Id { get; set; } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs new file mode 100644 index 00000000..c91f0228 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs @@ -0,0 +1,23 @@ +using MediatR; +using OliSaude.Application.Interfaces; + +namespace OliSaude.Application.Clientes.DeleteCliente +{ + public class DeleteClienteHandler : IRequestHandler + { + private readonly IClienteRepositorio _repo; + + public DeleteClienteHandler(IClienteRepositorio repo) + { + _repo = repo; + } + + public async Task Handle(DeleteClienteCommand request, CancellationToken cancellationToken) + { + var cliente = await _repo.GetClienteAsync(request.Id); + if (cliente is null) + throw new Exception("Não um cliente com esse Id"); + _repo.DeleteCliente(cliente); + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs index df563e67..1af87021 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs @@ -16,13 +16,13 @@ public UpdateClienteHandler(IClienteRepositorio repo) public async Task Handle(UpdateClienteCommand request, CancellationToken cancellationToken) { - var cliente = _repo.GetCliente(request.Id); + var cliente =await _repo.GetClienteAsync(request.Id); if (cliente is null) throw new Exception("Cliente invalido"); var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); cliente.UpdateCliente(request.Nome, request.DataNascimento, problema, DateTime.UtcNow); - await _repo.UpdateCliente(cliente, cancellationToken); + await _repo.UpdateClienteAsync(cliente, cancellationToken); } } } diff --git a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs index 10cc9c5d..5d0795b2 100644 --- a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs +++ b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs @@ -6,8 +6,8 @@ public interface IClienteRepositorio { Task SaveAsync(Cliente cliente, CancellationToken cancellationToken); IEnumerable GetAllClientes(); - Cliente GetCliente(int id); - Task UpdateCliente(Cliente cliente, CancellationToken cancellationToken); + Task GetClienteAsync(int id); + Task UpdateClienteAsync(Cliente cliente, CancellationToken cancellationToken); void DeleteCliente(Cliente cliente); } } diff --git a/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs index aeff2579..5746329d 100644 --- a/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs +++ b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs @@ -21,9 +21,9 @@ public IEnumerable GetAllClientes() .ToList(); } - public Cliente GetCliente(int id) + public async Task GetClienteAsync(int id) { - var cliente = _context.Clientes.FirstOrDefault(c => c.Id == id); + var cliente = await _context.Clientes.FirstOrDefaultAsync(c => c.Id == id); return cliente; } @@ -35,7 +35,7 @@ public async Task SaveAsync(Cliente cliente, CancellationToken cancellation return cliente.Id; } - public async Task UpdateCliente(Cliente cliente, CancellationToken cancellationToken) + public async Task UpdateClienteAsync(Cliente cliente, CancellationToken cancellationToken) { _context.Entry(cliente).State = EntityState.Modified; await _context.SaveChangesAsync(cancellationToken); From b51a467104888300886388ea2e35bc14dd41bfa1 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 3 Nov 2023 09:47:30 +0100 Subject: [PATCH 08/23] terminando os Handlers --- .../Clientes/Queries/GetAllClienteQuery.cs | 32 +++++++++++++++++++ .../Clientes/Queries/GetClienteByIdQuery.cs | 30 +++++++++++++++++ .../Queries/GetClienteMaiorRiscoQuery.cs | 32 +++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs new file mode 100644 index 00000000..2eefcefb --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs @@ -0,0 +1,32 @@ +using AutoMapper; +using MediatR; +using OliSaude.Application.Dto; +using OliSaude.Application.Interfaces; + +namespace OliSaude.Application.Clientes.Queries +{ + public class GetAllClienteQuery : IRequest> + { + } + + public class GetAllClienteHandler : IRequestHandler> + { + private readonly IClienteRepositorio _repositorio; + private readonly IMapper _mapper; + + public GetAllClienteHandler(IClienteRepositorio repositorio, IMapper mapper) + { + _repositorio = repositorio; + _mapper = mapper; + } + + + public async Task> Handle(GetAllClienteQuery request, CancellationToken cancellationToken) + { + await Task.CompletedTask; + var clientes = _repositorio.GetAllClientes(); + + return _mapper.Map>(clientes); + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs new file mode 100644 index 00000000..2a537806 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs @@ -0,0 +1,30 @@ +using AutoMapper; +using MediatR; +using OliSaude.Application.Dto; +using OliSaude.Application.Interfaces; + +namespace OliSaude.Application.Clientes.Queries +{ + public class GetClienteByIdQuery: IRequest + { + public int Id { get; set; } + } + + public class GetClienteByIdHandler : IRequestHandler + { + private readonly IMapper _mapper; + private readonly IClienteRepositorio _repositorio; + + public GetClienteByIdHandler(IMapper mapper, IClienteRepositorio repositorio) + { + _mapper = mapper; + _repositorio = repositorio; + } + + public async Task Handle(GetClienteByIdQuery request, CancellationToken cancellationToken) + { + var cliente = await _repositorio.GetClienteAsync(request.Id); + return _mapper.Map(cliente); + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs new file mode 100644 index 00000000..dbded2f9 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs @@ -0,0 +1,32 @@ +using MediatR; +using OliSaude.Application.Dto; +using OliSaude.Application.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OliSaude.Application.Clientes.Queries +{ + public class GetClienteMaiorRiscoQuery : IRequest> + { + + } + + public class GetClienteMaiorRiscoHandler : IRequestHandler> + { + private readonly IClienteService _service; + + public GetClienteMaiorRiscoHandler(IClienteService service) + { + _service = service; + } + + public async Task> Handle(GetClienteMaiorRiscoQuery request, CancellationToken cancellationToken) + { + await Task.CompletedTask; + return _service.GetClientesMaiorRisco(); + } + } +} From c50a446ff7f2e0eeaa5796e0ae44207678c6eab0 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 3 Nov 2023 18:57:55 +0100 Subject: [PATCH 09/23] Terminando o funcionamento interno --- .../Queries/GetClienteMaiorRiscoQuery.cs | 30 ++++++++----- .../Interfaces/IClienteService.cs | 12 ------ .../OliSaude.Application.csproj | 5 +-- .../Service/ClienteService.cs | 33 -------------- .../Data/ClienteConfiguration.cs | 43 +++++++++++++++++++ .../Extensions/ConnectionsExtension.cs | 29 +++++++++++++ .../OliSaude.Infra/OliSaude.Infra.csproj | 1 + .../OliSaude.WebApi/OliSaude.WebApi.csproj | 14 ++++++ dev/OliSaude/OliSaude.WebApi/Program.cs | 22 ++++++++++ .../Properties/launchSettings.json | 41 ++++++++++++++++++ .../appsettings.Development.json | 8 ++++ dev/OliSaude/OliSaude.WebApi/appsettings.json | 12 ++++++ dev/OliSaude/OliSaude.sln | 12 ++++-- 13 files changed, 199 insertions(+), 63 deletions(-) delete mode 100644 dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs delete mode 100644 dev/OliSaude/OliSaude.Application/Service/ClienteService.cs create mode 100644 dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs create mode 100644 dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs create mode 100644 dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj create mode 100644 dev/OliSaude/OliSaude.WebApi/Program.cs create mode 100644 dev/OliSaude/OliSaude.WebApi/Properties/launchSettings.json create mode 100644 dev/OliSaude/OliSaude.WebApi/appsettings.Development.json create mode 100644 dev/OliSaude/OliSaude.WebApi/appsettings.json diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs index dbded2f9..398f87ac 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteMaiorRiscoQuery.cs @@ -1,11 +1,8 @@ -using MediatR; +using AutoMapper; +using MediatR; using OliSaude.Application.Dto; using OliSaude.Application.Interfaces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using OliSaude.Domain.Entities; namespace OliSaude.Application.Clientes.Queries { @@ -16,17 +13,28 @@ public class GetClienteMaiorRiscoQuery : IRequest> public class GetClienteMaiorRiscoHandler : IRequestHandler> { - private readonly IClienteService _service; + private readonly IClienteRepositorio _repo; + private readonly IMapper _mapper; - public GetClienteMaiorRiscoHandler(IClienteService service) + public GetClienteMaiorRiscoHandler(IClienteRepositorio repo, IMapper mapper) { - _service = service; + _repo = repo; + _mapper = mapper; } public async Task> Handle(GetClienteMaiorRiscoQuery request, CancellationToken cancellationToken) { - await Task.CompletedTask; - return _service.GetClientesMaiorRisco(); + await Task.CompletedTask; + var clientes = _repo.GetAllClientes().OrderByDescending(cliente => CalculoScore(cliente)).Take(10); + + return _mapper.Map>(clientes); + } + private double CalculoScore(Cliente cliente) + { + var sd = cliente.ProblemaDeSaude.Grau; + var denominador = 1 + Math.Pow(Math.E, -(-2.8 + sd)); + var score = (1 / denominador) * 100; + return score; } } } diff --git a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs deleted file mode 100644 index a12ca0fc..00000000 --- a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using OliSaude.Application.Dto; -using OliSaude.Domain.Entities; - -namespace OliSaude.Application.Interfaces -{ - public interface IClienteService - { - - IEnumerable GetClientesMaiorRisco(); - - } -} diff --git a/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj b/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj index bd74f08a..5ff404ba 100644 --- a/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj +++ b/dev/OliSaude/OliSaude.Application/OliSaude.Application.csproj @@ -8,6 +8,7 @@ + @@ -15,8 +16,4 @@ - - - - diff --git a/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs b/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs deleted file mode 100644 index 3a896eb7..00000000 --- a/dev/OliSaude/OliSaude.Application/Service/ClienteService.cs +++ /dev/null @@ -1,33 +0,0 @@ -using AutoMapper; -using OliSaude.Application.Dto; -using OliSaude.Application.Interfaces; -using OliSaude.Domain.Entities; - -namespace OliSaude.Application.Service -{ - public class ClienteService : IClienteService - { - private readonly IClienteRepositorio _repo; - private readonly IMapper _mapper; - - public ClienteService(IClienteRepositorio repo) - { - _repo = repo; - } - - public IEnumerable GetClientesMaiorRisco() - { - - var clientes = _repo.GetAllClientes().OrderByDescending(cliente =>CalculoScore(cliente)).Take(10); - - return _mapper.Map>(clientes); - } - private double CalculoScore(Cliente cliente) - { - var sd = cliente.ProblemaDeSaude.Grau; - var denominador = 1 + Math.Pow(Math.E, -(-2.8 + sd)); - var score = (1 / denominador) * 100; - return score; - } - } -} diff --git a/dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs b/dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs new file mode 100644 index 00000000..2e78264a --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs @@ -0,0 +1,43 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using OliSaude.Domain.Entities; + +namespace OliSaude.Infra.Data +{ + public class ClienteConfiguration : IEntityTypeConfiguration + { + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(x => x.Id); + + builder.Property(x => x.Id) + .IsRequired() + .ValueGeneratedOnAdd(); + + builder.Property(x => x.Nome) + .IsRequired() + .HasMaxLength(500); + + builder.Property(x => x.DataNascimento) + .IsRequired(); + + builder.Property(x => x.Sexo) + .IsRequired(); + + builder.OwnsOne(x => x.ProblemaDeSaude) + .Property(p => p.Nome) + .IsRequired() + .HasMaxLength(200); + + builder.OwnsOne(x => x.ProblemaDeSaude) + .Property(p => p.Grau) + .IsRequired(); + + builder.Property(x => x.DataCriacao) + .IsRequired(); + + builder.Property(x => x.DataActualizacao) + .IsRequired(false); + } + } +} diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs new file mode 100644 index 00000000..54a00b84 --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using OliSaude.Application.Interfaces; +using OliSaude.Infra.Data; +using OliSaude.Infra.Repostorio; +using System.Reflection; + +namespace OliSaude.Infra.Extensions +{ + public static class ConnectionsExtension + { + public static IServiceCollection AddConnection(this IServiceCollection services, IConfiguration configuration) + { + services.AddDbContext(options => + options.UseSqlite(configuration.GetConnectionString("DefaultConnetion"))); + services.AddMediatR(cfg => + cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())); + services.AddAutoMapper(Assembly.GetExecutingAssembly()); + + services.AddScoped(); + + + return services; + + } + + } +} diff --git a/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj b/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj index 0411ce53..96ea5424 100644 --- a/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj +++ b/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj @@ -8,6 +8,7 @@ + diff --git a/dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj b/dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj new file mode 100644 index 00000000..69686909 --- /dev/null +++ b/dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj @@ -0,0 +1,14 @@ + + + + net7.0 + enable + enable + + + + + + + + diff --git a/dev/OliSaude/OliSaude.WebApi/Program.cs b/dev/OliSaude/OliSaude.WebApi/Program.cs new file mode 100644 index 00000000..f62472f7 --- /dev/null +++ b/dev/OliSaude/OliSaude.WebApi/Program.cs @@ -0,0 +1,22 @@ +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.UseHttpsRedirection(); + +app.MapGet("/", () => { }); + +app.Run(); + diff --git a/dev/OliSaude/OliSaude.WebApi/Properties/launchSettings.json b/dev/OliSaude/OliSaude.WebApi/Properties/launchSettings.json new file mode 100644 index 00000000..ce2bb32b --- /dev/null +++ b/dev/OliSaude/OliSaude.WebApi/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:48388", + "sslPort": 44382 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5267", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7013;http://localhost:5267", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/dev/OliSaude/OliSaude.WebApi/appsettings.Development.json b/dev/OliSaude/OliSaude.WebApi/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/dev/OliSaude/OliSaude.WebApi/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/dev/OliSaude/OliSaude.WebApi/appsettings.json b/dev/OliSaude/OliSaude.WebApi/appsettings.json new file mode 100644 index 00000000..4b559563 --- /dev/null +++ b/dev/OliSaude/OliSaude.WebApi/appsettings.json @@ -0,0 +1,12 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "ConnetionStrings": { + "DefaultConnetion": "Data Source =..\\OliSaude.Infra\\DbOliSaude.db" + }, + "AllowedHosts": "*" +} diff --git a/dev/OliSaude/OliSaude.sln b/dev/OliSaude/OliSaude.sln index 5428b7bd..615d856b 100644 --- a/dev/OliSaude/OliSaude.sln +++ b/dev/OliSaude/OliSaude.sln @@ -3,11 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.7.34031.279 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Domain", "OliSaude.Domain\OliSaude.Domain.csproj", "{D57F79B2-F622-4169-B23C-4FFD250B0EE4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OliSaude.Domain", "OliSaude.Domain\OliSaude.Domain.csproj", "{D57F79B2-F622-4169-B23C-4FFD250B0EE4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Application", "OliSaude.Application\OliSaude.Application.csproj", "{1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OliSaude.Application", "OliSaude.Application\OliSaude.Application.csproj", "{1B2FB43A-53BD-4FAC-BC09-2E8A743B1E6F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.Infra", "OliSaude.Infra\OliSaude.Infra.csproj", "{6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OliSaude.Infra", "OliSaude.Infra\OliSaude.Infra.csproj", "{6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OliSaude.WebApi", "OliSaude.WebApi\OliSaude.WebApi.csproj", "{DFEAB602-C365-4B92-911B-68B1F52AB011}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,6 +29,10 @@ Global {6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DBF3EFF-F3F6-4916-98E8-DCB96B4E35A5}.Release|Any CPU.Build.0 = Release|Any CPU + {DFEAB602-C365-4B92-911B-68B1F52AB011}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DFEAB602-C365-4B92-911B-68B1F52AB011}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFEAB602-C365-4B92-911B-68B1F52AB011}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DFEAB602-C365-4B92-911B-68B1F52AB011}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 4f36cbc22dfcd9adf30b207b2f982e575c1ccd1f Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 3 Nov 2023 20:26:56 +0100 Subject: [PATCH 10/23] realizando as migrations --- .../OliSaude.Domain/Entities/Cliente.cs | 4 + .../Data/ClienteConfiguration.cs | 12 ++- .../OliSaude.Infra/Data/OliSaudeContext.cs | 2 + dev/OliSaude/OliSaude.Infra/DbOliSaude.db | Bin 0 -> 20480 bytes .../Extensions/ConnectionsExtension.cs | 5 +- .../Migrations/20231103192400_v1.Designer.cs | 84 ++++++++++++++++++ .../Migrations/20231103192400_v1.cs | 41 +++++++++ .../OliSaudeContextModelSnapshot.cs | 81 +++++++++++++++++ .../OliSaude.Infra/OliSaude.Infra.csproj | 4 + .../OliSaude.WebApi/OliSaude.WebApi.csproj | 8 ++ dev/OliSaude/OliSaude.WebApi/Program.cs | 3 + dev/OliSaude/OliSaude.WebApi/appsettings.json | 4 +- 12 files changed, 239 insertions(+), 9 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db create mode 100644 dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.Designer.cs create mode 100644 dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.cs create mode 100644 dev/OliSaude/OliSaude.Infra/Migrations/OliSaudeContextModelSnapshot.cs diff --git a/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs index 2ff4d05b..8f3ea6f8 100644 --- a/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs +++ b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs @@ -5,6 +5,10 @@ namespace OliSaude.Domain.Entities; public class Cliente : Entity { + private Cliente() + { + + } public Cliente(string nome, DateTime dataNascimento, ESexo sexo, diff --git a/dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs b/dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs index 2e78264a..52f5ea49 100644 --- a/dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs +++ b/dev/OliSaude/OliSaude.Infra/Data/ClienteConfiguration.cs @@ -8,6 +8,8 @@ public class ClienteConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { + builder.ToTable(nameof(Cliente)); + builder.HasKey(x => x.Id); builder.Property(x => x.Id) @@ -16,10 +18,12 @@ public void Configure(EntityTypeBuilder builder) builder.Property(x => x.Nome) .IsRequired() + .HasColumnName("Nome_Cliente") .HasMaxLength(500); builder.Property(x => x.DataNascimento) - .IsRequired(); + .IsRequired() + .HasColumnName("DataNascimento"); builder.Property(x => x.Sexo) .IsRequired(); @@ -27,17 +31,19 @@ public void Configure(EntityTypeBuilder builder) builder.OwnsOne(x => x.ProblemaDeSaude) .Property(p => p.Nome) .IsRequired() + .HasColumnName("Problema") .HasMaxLength(200); builder.OwnsOne(x => x.ProblemaDeSaude) .Property(p => p.Grau) - .IsRequired(); + .IsRequired() + .HasColumnName("Grau"); builder.Property(x => x.DataCriacao) .IsRequired(); builder.Property(x => x.DataActualizacao) - .IsRequired(false); + .IsRequired(); } } } diff --git a/dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs b/dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs index b5a0a58c..3a41fcf8 100644 --- a/dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs +++ b/dev/OliSaude/OliSaude.Infra/Data/OliSaudeContext.cs @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore; using OliSaude.Domain.Entities; +using System.Reflection; namespace OliSaude.Infra.Data; @@ -15,5 +16,6 @@ public OliSaudeContext(DbContextOptions options ) protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); + modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); } } diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db new file mode 100644 index 0000000000000000000000000000000000000000..6a5b6559badb21639d1929aa15c494194dcc6e40 GIT binary patch literal 20480 zcmeI&Z*S5-90%}gVVjb4_`rndo?QB9%N9mKLwsh%I?13QbY?s-^(?1p0yOI%GkxX~ zUyg6a*WfeXfDiqZlnt;vHe0@zHoZH3_v`g@?SlftHyuBg{9_PKMa&!Q0aI1>oO8yQ zO8XY=i;}jBiv}H)rTV6-%Br5CmH)7!w##;ZmVapPse%Fl2tWV=5P$##AOHafK;XX% z^o!e-!$V~hiw_eST}d2kgJb}D;& z%J--9oUMs3XR*u<#g!a-)~oYp}fNyK4?c{L~t8^UUeBZOY!YZ09J;W(QMw6Yf~&lrT%W2ze=DVT;J~r!>nz=ea>c zc}X9w&ufvQ9|mMM6&nVhgd*8II6c4V#fg~sUxg<&%^(eHg?>(iRyz20uIyBrP35XL z7k6FjRoDL%ir5ck(Q7}7gYZjkr@FctxiL3ubDc9?q!p+2721$!X}y;0#)%idm0?7a zT}w-s)>gMG@0tqpXJdJp-Ety{gL&J{J&$YTb{FVTyO%z08tqE?7o!aY0uX=z1Rwwb z2tWV=5P$##AOL||Ebv$<96zep>J7uFHH>HVC$*aU*=Sa4Rija&>r%?U8Eq&KfB*y_ z009U<00Izz00bZa0SMfFfro|T`~Q3kkpBKpfBHv(00bZa0SG_<0uX=z1Rwwb2teQt h3*i0#4lgb)4FV8=00bZa0SG_<0uX=z1R#(J`~|ip_?iF! literal 0 HcmV?d00001 diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index 54a00b84..2340c023 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -10,7 +10,7 @@ namespace OliSaude.Infra.Extensions { public static class ConnectionsExtension { - public static IServiceCollection AddConnection(this IServiceCollection services, IConfiguration configuration) + public static IServiceCollection AddDependece(this IServiceCollection services, IConfiguration configuration) { services.AddDbContext(options => options.UseSqlite(configuration.GetConnectionString("DefaultConnetion"))); @@ -20,10 +20,7 @@ public static IServiceCollection AddConnection(this IServiceCollection services, services.AddScoped(); - return services; - } - } } diff --git a/dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.Designer.cs b/dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.Designer.cs new file mode 100644 index 00000000..554c56e7 --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.Designer.cs @@ -0,0 +1,84 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using OliSaude.Infra.Data; + +#nullable disable + +namespace OliSaude.Infra.Migrations +{ + [DbContext(typeof(OliSaudeContext))] + [Migration("20231103192400_v1")] + partial class v1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.13"); + + modelBuilder.Entity("OliSaude.Domain.Entities.Cliente", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DataActualizacao") + .HasColumnType("TEXT"); + + b.Property("DataCriacao") + .HasColumnType("TEXT"); + + b.Property("DataNascimento") + .HasColumnType("TEXT") + .HasColumnName("DataNascimento"); + + b.Property("Nome") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT") + .HasColumnName("Nome_Cliente"); + + b.Property("Sexo") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Cliente", (string)null); + }); + + modelBuilder.Entity("OliSaude.Domain.Entities.Cliente", b => + { + b.OwnsOne("OliSaude.Domain.ValueObject.ProblemaSaude", "ProblemaDeSaude", b1 => + { + b1.Property("ClienteId") + .HasColumnType("INTEGER"); + + b1.Property("Grau") + .HasColumnType("INTEGER") + .HasColumnName("Grau"); + + b1.Property("Nome") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT") + .HasColumnName("Problema"); + + b1.HasKey("ClienteId"); + + b1.ToTable("Cliente"); + + b1.WithOwner() + .HasForeignKey("ClienteId"); + }); + + b.Navigation("ProblemaDeSaude") + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.cs b/dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.cs new file mode 100644 index 00000000..12ace98d --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/Migrations/20231103192400_v1.cs @@ -0,0 +1,41 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace OliSaude.Infra.Migrations +{ + /// + public partial class v1 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Cliente", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Nome_Cliente = table.Column(type: "TEXT", maxLength: 500, nullable: false), + DataNascimento = table.Column(type: "TEXT", nullable: false), + Sexo = table.Column(type: "INTEGER", nullable: false), + Problema = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Grau = table.Column(type: "INTEGER", nullable: false), + DataActualizacao = table.Column(type: "TEXT", nullable: false), + DataCriacao = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Cliente", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Cliente"); + } + } +} diff --git a/dev/OliSaude/OliSaude.Infra/Migrations/OliSaudeContextModelSnapshot.cs b/dev/OliSaude/OliSaude.Infra/Migrations/OliSaudeContextModelSnapshot.cs new file mode 100644 index 00000000..24e32bf7 --- /dev/null +++ b/dev/OliSaude/OliSaude.Infra/Migrations/OliSaudeContextModelSnapshot.cs @@ -0,0 +1,81 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using OliSaude.Infra.Data; + +#nullable disable + +namespace OliSaude.Infra.Migrations +{ + [DbContext(typeof(OliSaudeContext))] + partial class OliSaudeContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.13"); + + modelBuilder.Entity("OliSaude.Domain.Entities.Cliente", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("DataActualizacao") + .HasColumnType("TEXT"); + + b.Property("DataCriacao") + .HasColumnType("TEXT"); + + b.Property("DataNascimento") + .HasColumnType("TEXT") + .HasColumnName("DataNascimento"); + + b.Property("Nome") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("TEXT") + .HasColumnName("Nome_Cliente"); + + b.Property("Sexo") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Cliente", (string)null); + }); + + modelBuilder.Entity("OliSaude.Domain.Entities.Cliente", b => + { + b.OwnsOne("OliSaude.Domain.ValueObject.ProblemaSaude", "ProblemaDeSaude", b1 => + { + b1.Property("ClienteId") + .HasColumnType("INTEGER"); + + b1.Property("Grau") + .HasColumnType("INTEGER") + .HasColumnName("Grau"); + + b1.Property("Nome") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("TEXT") + .HasColumnName("Problema"); + + b1.HasKey("ClienteId"); + + b1.ToTable("Cliente"); + + b1.WithOwner() + .HasForeignKey("ClienteId"); + }); + + b.Navigation("ProblemaDeSaude") + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj b/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj index 96ea5424..34f93476 100644 --- a/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj +++ b/dev/OliSaude/OliSaude.Infra/OliSaude.Infra.csproj @@ -8,6 +8,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj b/dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj index 69686909..609a721e 100644 --- a/dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj +++ b/dev/OliSaude/OliSaude.WebApi/OliSaude.WebApi.csproj @@ -8,7 +8,15 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/dev/OliSaude/OliSaude.WebApi/Program.cs b/dev/OliSaude/OliSaude.WebApi/Program.cs index f62472f7..e8a37011 100644 --- a/dev/OliSaude/OliSaude.WebApi/Program.cs +++ b/dev/OliSaude/OliSaude.WebApi/Program.cs @@ -1,9 +1,12 @@ +using OliSaude.Infra.Extensions; + var builder = WebApplication.CreateBuilder(args); // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); +builder.Services.AddDependece(builder.Configuration); var app = builder.Build(); diff --git a/dev/OliSaude/OliSaude.WebApi/appsettings.json b/dev/OliSaude/OliSaude.WebApi/appsettings.json index 4b559563..15de017c 100644 --- a/dev/OliSaude/OliSaude.WebApi/appsettings.json +++ b/dev/OliSaude/OliSaude.WebApi/appsettings.json @@ -5,8 +5,8 @@ "Microsoft.AspNetCore": "Warning" } }, - "ConnetionStrings": { - "DefaultConnetion": "Data Source =..\\OliSaude.Infra\\DbOliSaude.db" + "connectionStrings": { + "DefaultConnetion": "Data Source =..\\OliSaude.Infra\\DbOliSaude.db" }, "AllowedHosts": "*" } From 9ae2ee1f97f36b0e054d875f727dc7ed19aca620 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 3 Nov 2023 21:26:53 +0100 Subject: [PATCH 11/23] terminando com os endpoints da api --- .../Extensions/ConnectionsExtension.cs | 1 + .../Papiline/PapelineExtension.cs | 67 +++++++++++++++++++ dev/OliSaude/OliSaude.WebApi/Program.cs | 8 ++- 3 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index 2340c023..9d02b6a9 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using OliSaude.Application.Clientes.Queries; using OliSaude.Application.Interfaces; using OliSaude.Infra.Data; using OliSaude.Infra.Repostorio; diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs new file mode 100644 index 00000000..c8b54ac0 --- /dev/null +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -0,0 +1,67 @@ +using MediatR; +using Microsoft.AspNetCore.Mvc; +using OliSaude.Application.Clientes.CreateCliente; +using OliSaude.Application.Clientes.DeleteCliente; +using OliSaude.Application.Clientes.Queries; +using OliSaude.Application.Clientes.UpdateUser; + +namespace OliSaude.WebApi.Papiline +{ + public static class PapelineExtension + { + public static void Endpoints(this WebApplication app) + { + app.MapGet("api/v1/clientes", async ([FromQuery] GetAllClienteQuery query, + [FromServices] IMediator mediator) => + { + + var result = await mediator.Send(query); + if (result is null) + Results.NotFound("Resultado não encontrado"); + return Results.Ok(result); + }); + + app.MapGet("api/v1/clientes/{id}", async ([FromQuery] GetClienteByIdQuery query, + [FromServices] IMediator mediator) => + { + + var result = await mediator.Send(query); + if (result is null) + Results.BadRequest("Resultado não encontrado"); + return Results.Ok(result); + }); + + app.MapGet("api/v1/clientes/maiorRisco", async ([FromQuery] GetClienteMaiorRiscoQuery query, + [FromServices] IMediator mediator) => + { + + var result =await mediator.Send(query); + if (result is null) + Results.NotFound("Resultado não encontrado"); + return Results.Ok(result); + }); + + app.MapPost("api/v1/clientes", async ([FromBody] CreateClienteCommand command, + [FromServices] IMediator mediator) => + { + var result = await mediator.Send(command); + if (result > 1) + throw new Exception("Erro ao salvar o cliente"); + return Results.Created($"/{result}", result); + }); + + app.MapPut("api/v1/clientes", async ([FromBody] UpdateClienteCommand command, + [FromServices] IMediator mediator) => + { + await mediator.Send(command); + }); + + app.MapDelete("api/v1/clientes", async ([FromBody] DeleteClienteCommand command, + [FromServices] IMediator mediator) => + { + await mediator.Send(command); + }); + + } + } +} diff --git a/dev/OliSaude/OliSaude.WebApi/Program.cs b/dev/OliSaude/OliSaude.WebApi/Program.cs index e8a37011..5e4f574e 100644 --- a/dev/OliSaude/OliSaude.WebApi/Program.cs +++ b/dev/OliSaude/OliSaude.WebApi/Program.cs @@ -1,4 +1,8 @@ -using OliSaude.Infra.Extensions; +using MediatR; +using Microsoft.AspNetCore.Mvc; +using OliSaude.Application.Clientes.Queries; +using OliSaude.Infra.Extensions; +using OliSaude.WebApi.Papiline; var builder = WebApplication.CreateBuilder(args); @@ -19,7 +23,7 @@ app.UseHttpsRedirection(); -app.MapGet("/", () => { }); +app.Endpoints(); app.Run(); From c5d09b042c7681e81e96229ec79eb00580b076c7 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Sat, 4 Nov 2023 00:51:37 +0100 Subject: [PATCH 12/23] alterando os endpoints --- .../CreateCliente/CreateClienteHandler.cs | 4 ++-- .../Extensions/ConnectionsExtension.cs | 21 +++++++++++++++++-- .../Papiline/PapelineExtension.cs | 18 ++++++++-------- dev/OliSaude/OliSaude.WebApi/Program.cs | 3 --- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs index fa292bce..e26c36fc 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs @@ -5,11 +5,11 @@ namespace OliSaude.Application.Clientes.CreateCliente { - public class CreateUserHandler : IRequestHandler + public class CreateClienteHandler : IRequestHandler { private readonly IClienteRepositorio _repo; - public CreateUserHandler(IClienteRepositorio repo) + public CreateClienteHandler(IClienteRepositorio repo) { _repo = repo; } diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index 9d02b6a9..b0df2f84 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -1,7 +1,11 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using OliSaude.Application.Clientes.CreateCliente; +using OliSaude.Application.Clientes.DeleteCliente; using OliSaude.Application.Clientes.Queries; +using OliSaude.Application.Clientes.UpdateCliente; +using OliSaude.Application.Clientes.UpdateUser; using OliSaude.Application.Interfaces; using OliSaude.Infra.Data; using OliSaude.Infra.Repostorio; @@ -13,13 +17,26 @@ public static class ConnectionsExtension { public static IServiceCollection AddDependece(this IServiceCollection services, IConfiguration configuration) { - services.AddDbContext(options => + services.AddDbContext(options => options.UseSqlite(configuration.GetConnectionString("DefaultConnetion"))); - services.AddMediatR(cfg => + services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())); services.AddAutoMapper(Assembly.GetExecutingAssembly()); services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); return services; } diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs index c8b54ac0..58d826a2 100644 --- a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -11,37 +11,37 @@ public static class PapelineExtension { public static void Endpoints(this WebApplication app) { - app.MapGet("api/v1/clientes", async ([FromQuery] GetAllClienteQuery query, + app.MapGet("/api/v1/clientes", async (GetAllClienteQuery query, [FromServices] IMediator mediator) => { var result = await mediator.Send(query); if (result is null) - Results.NotFound("Resultado não encontrado"); + return Results.NotFound("Resultado não encontrado"); return Results.Ok(result); }); - app.MapGet("api/v1/clientes/{id}", async ([FromQuery] GetClienteByIdQuery query, + app.MapGet("/api/v1/clientes/{id}", async (GetClienteByIdQuery query, [FromServices] IMediator mediator) => { var result = await mediator.Send(query); if (result is null) - Results.BadRequest("Resultado não encontrado"); + return Results.BadRequest("Resultado não encontrado"); return Results.Ok(result); }); - app.MapGet("api/v1/clientes/maiorRisco", async ([FromQuery] GetClienteMaiorRiscoQuery query, + app.MapGet("/api/v1/clientes/maiorRisco", async (GetClienteMaiorRiscoQuery query, [FromServices] IMediator mediator) => { var result =await mediator.Send(query); if (result is null) - Results.NotFound("Resultado não encontrado"); + return Results.NotFound("Resultado não encontrado"); return Results.Ok(result); }); - app.MapPost("api/v1/clientes", async ([FromBody] CreateClienteCommand command, + app.MapPost("/api/v1/clientes", async ([FromBody] CreateClienteCommand command, [FromServices] IMediator mediator) => { var result = await mediator.Send(command); @@ -50,13 +50,13 @@ public static void Endpoints(this WebApplication app) return Results.Created($"/{result}", result); }); - app.MapPut("api/v1/clientes", async ([FromBody] UpdateClienteCommand command, + app.MapPut("/api/v1/clientes", async ([FromBody] UpdateClienteCommand command, [FromServices] IMediator mediator) => { await mediator.Send(command); }); - app.MapDelete("api/v1/clientes", async ([FromBody] DeleteClienteCommand command, + app.MapDelete("/api/v1/clientes", async ([FromBody] DeleteClienteCommand command, [FromServices] IMediator mediator) => { await mediator.Send(command); diff --git a/dev/OliSaude/OliSaude.WebApi/Program.cs b/dev/OliSaude/OliSaude.WebApi/Program.cs index 5e4f574e..f141d0be 100644 --- a/dev/OliSaude/OliSaude.WebApi/Program.cs +++ b/dev/OliSaude/OliSaude.WebApi/Program.cs @@ -1,6 +1,3 @@ -using MediatR; -using Microsoft.AspNetCore.Mvc; -using OliSaude.Application.Clientes.Queries; using OliSaude.Infra.Extensions; using OliSaude.WebApi.Papiline; From 3721a08b4dc458bf35cc19592a212c8477320a8a Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Wed, 8 Nov 2023 09:19:15 +0100 Subject: [PATCH 13/23] actualizado --- .../Clientes/Queries/GetAllClienteQuery.cs | 1 + .../Clientes/Queries/GetClienteByIdQuery.cs | 12 +++++++++ dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 0 -> 32768 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 0 -> 49472 bytes .../Extensions/ConnectionsExtension.cs | 23 ++++++++---------- .../Papiline/PapelineExtension.cs | 8 +++--- 6 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm create mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs index 2eefcefb..5d3ce20c 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs @@ -7,6 +7,7 @@ namespace OliSaude.Application.Clientes.Queries { public class GetAllClienteQuery : IRequest> { + public static bool TryParse(string value, out GetAllClienteQuery result) => TryParse(value, out result); } public class GetAllClienteHandler : IRequestHandler> diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs index 2a537806..2e23f2a4 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs @@ -8,6 +8,18 @@ namespace OliSaude.Application.Clientes.Queries public class GetClienteByIdQuery: IRequest { public int Id { get; set; } + + public static bool TryParse(string value, out GetClienteByIdQuery query) + { + if(value is null) + { + query = default; + return false; + } + query = new GetClienteByIdQuery { Id = int.Parse(value)}; + return true; + } + } public class GetClienteByIdHandler : IRequestHandler diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..452200bf4d2ab8cc47c18245d9d45c57a885d715 GIT binary patch literal 32768 zcmeI)y9q)u6b9g2->Nvo3YB@qE1MnSNaFA9-(ww4c(5 zmEQfPr!zu;009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZph^N+sKru!yH#J(VgVy@*gMvb_ijKG{v%NnvThHE!JR!@h((+0D!+ zlSBT`?|Gi!%#Qc0*=vtk*2C7IT|R$YUO6~@to+jFKki@n@-1^$F?;{}zkl}AuG-3_ zin%jaJ!hFO8UhF)fB*srAbqg}Bp5 zyY`XAe%x71U9I)4A$lEoDsp|tlVN^1f?vpv)35a_&j~&0>CqwlY?lcB+q}S6*IwEE z&4-6p*7E|ZR&{k7zwn$o0tg_000IagfB*srAb5b$C-u-0X z;~)QVVtG&(C`?^g%L|xaGz1Vp009ILKmY**5I_I{1h$mGQlV@;X=dT)>h+h??^aT~ z9(R(o>uOaSj^Mj8Qng5E$8+^?0Kb$Oz+dk+bMRdiC_e}`=<>DiZ>PM#YrDSvQ_PgE zlNZ=hmpcc800IagfB*srAbjG)IKuUn_QJac@iSfI1txz#f+v=CzF_u5c!<2fM7`NLSOgG2 z009ILKmY**5I_I{1nyTLn-?gVKN{o(N|(AN&5z+HYq*J+!}KmJ}%7&I?qo zk{7sNULJ=40tg_000IagfB*srY!!j==LO7}C;xblfIEu_u)e_2IO#Pz_ThB7)jpYa zJt4#};~~Om)7BRlsSCXG_Uerr^N;?pUKeOsl}7cz)CKASTjgENaUg&I0tg_000Iag zfWSlw^mAqFxw-Nlv!&ib+-am;d%oRE+o?U@==I~Ibvj;5Gava}6$u&n+R?&)qjjR+ zEoPJZrc*`IH<^DCYMI?#Z}3skkIcq(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + services.AddScoped>,GetAllClienteHandler>(); + services.AddScoped,GetClienteByIdHandler >(); + services.AddScoped>, GetClienteMaiorRiscoHandler >(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); + + services.AddScoped< IRequestHandler, CreateClienteHandler >(); + services.AddScoped< IRequestHandler < UpdateClienteCommand >, UpdateClienteHandler >(); + services.AddScoped< IRequestHandler < DeleteClienteCommand >, DeleteClienteHandler >(); return services; } diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs index 58d826a2..14cb2a69 100644 --- a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -11,7 +11,7 @@ public static class PapelineExtension { public static void Endpoints(this WebApplication app) { - app.MapGet("/api/v1/clientes", async (GetAllClienteQuery query, + app.MapGet("/api/v1/clientes", async ([FromQuery] GetAllClienteQuery query, [FromServices] IMediator mediator) => { @@ -21,7 +21,7 @@ public static void Endpoints(this WebApplication app) return Results.Ok(result); }); - app.MapGet("/api/v1/clientes/{id}", async (GetClienteByIdQuery query, + app.MapGet("/api/v1/clientes/{id}", async ([FromQuery] GetClienteByIdQuery query, [FromServices] IMediator mediator) => { @@ -31,7 +31,7 @@ public static void Endpoints(this WebApplication app) return Results.Ok(result); }); - app.MapGet("/api/v1/clientes/maiorRisco", async (GetClienteMaiorRiscoQuery query, + app.MapGet("/api/v1/clientes/maiorRisco", async ([AsParameters] GetClienteMaiorRiscoQuery query, [FromServices] IMediator mediator) => { @@ -45,7 +45,7 @@ public static void Endpoints(this WebApplication app) [FromServices] IMediator mediator) => { var result = await mediator.Send(command); - if (result > 1) + if (result == 0) throw new Exception("Erro ao salvar o cliente"); return Results.Created($"/{result}", result); }); From dc1d862c32bd16870fdb0c4ce639a44dbee4cfa4 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Wed, 8 Nov 2023 14:11:11 +0100 Subject: [PATCH 14/23] melhorando a parte das consultas --- .../Clientes/Queries/GetAllClienteQuery.cs | 15 +++++++++++++-- dev/OliSaude/OliSaude.Infra/DbOliSaude.db | Bin 20480 -> 20480 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 32768 -> 0 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 49472 -> 0 bytes .../Papiline/PapelineExtension.cs | 6 +++--- 5 files changed, 16 insertions(+), 5 deletions(-) delete mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm delete mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs index 5d3ce20c..5931916c 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetAllClienteQuery.cs @@ -7,7 +7,17 @@ namespace OliSaude.Application.Clientes.Queries { public class GetAllClienteQuery : IRequest> { - public static bool TryParse(string value, out GetAllClienteQuery result) => TryParse(value, out result); + public static bool TryParse(string value, out GetAllClienteQuery result) + { + if (!string.IsNullOrWhiteSpace(value)) + { + result = new GetAllClienteQuery(); + return true; + } + result = null; + return false; + + } } public class GetAllClienteHandler : IRequestHandler> @@ -26,8 +36,9 @@ public async Task> Handle(GetAllClienteQuery request, Ca { await Task.CompletedTask; var clientes = _repositorio.GetAllClientes(); + var clientesDto = _mapper.Map>(clientes); - return _mapper.Map>(clientes); + return clientesDto; } } } diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db index 6a5b6559badb21639d1929aa15c494194dcc6e40..7bfd0dbe4cbdaa9eb03f3d25d06d75250e5669ac 100644 GIT binary patch delta 736 zcmaKqyKdA#6ozNA*}{q(vlRu63n(Ipb>`;rnJv)Dp+Rf`LZTk+F38AukS|Rd=NWi{ zNW1`2n)JLy-hetUklC;X2MF!_qx0#%oSoCNbNY?K?C=%Y4_72yMUM|J!>jP>V)o#5 z*mpD_&*#BIn&(SfuUr!^s@7F5UaZ>Amc^-EI}QNHj2(lHnKB@azyv|OE#7y{J_jyF zqB2q>C?P|sM-pWI-H0sF5~W1`c^VKg4<7Y2Uo36aZOZsfSHx=@=dNij!&D7NrBRtt z${&?WTiUv?)6rq(Wi(tTz=T4c-7iI7NcqGgz0;TO`&Sp|wk~_uFjVP?l^Vc=GrWhT zjnYYqT7wdQuzpJtKTZPj7wjLb{=cwvn;27C2|W&T>v@m_3Q_I_YB$px D#15WaRZ|PD+3S+Y!-BQ#6NL@1RF037XZGk3Ag|N diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm deleted file mode 100644 index 452200bf4d2ab8cc47c18245d9d45c57a885d715..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)y9q)u6b9g2->Nvo3YB@qE1MnSNaFA9-(ww4c(5 zmEQfPr!zu;009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZph^N+sKru!yH#J(VgVy@*gMvb_ijKG{v%NnvThHE!JR!@h((+0D!+ zlSBT`?|Gi!%#Qc0*=vtk*2C7IT|R$YUO6~@to+jFKki@n@-1^$F?;{}zkl}AuG-3_ zin%jaJ!hFO8UhF)fB*srAbqg}Bp5 zyY`XAe%x71U9I)4A$lEoDsp|tlVN^1f?vpv)35a_&j~&0>CqwlY?lcB+q}S6*IwEE z&4-6p*7E|ZR&{k7zwn$o0tg_000IagfB*srAb5b$C-u-0X z;~)QVVtG&(C`?^g%L|xaGz1Vp009ILKmY**5I_I{1h$mGQlV@;X=dT)>h+h??^aT~ z9(R(o>uOaSj^Mj8Qng5E$8+^?0Kb$Oz+dk+bMRdiC_e}`=<>DiZ>PM#YrDSvQ_PgE zlNZ=hmpcc800IagfB*srAbjG)IKuUn_QJac@iSfI1txz#f+v=CzF_u5c!<2fM7`NLSOgG2 z009ILKmY**5I_I{1nyTLn-?gVKN{o(N|(AN&5z+HYq*J+!}KmJ}%7&I?qo zk{7sNULJ=40tg_000IagfB*srY!!j==LO7}C;xblfIEu_u)e_2IO#Pz_ThB7)jpYa zJt4#};~~Om)7BRlsSCXG_Uerr^N;?pUKeOsl}7cz)CKASTjgENaUg&I0tg_000Iag zfWSlw^mAqFxw-Nlv!&ib+-am;d%oRE+o?U@==I~Ibvj;5Gava}6$u&n+R?&)qjjR+ zEoPJZrc*`IH<^DCYMI?#Z}3skkIcq { - + var result = await mediator.Send(query); if (result is null) return Results.NotFound("Resultado não encontrado"); return Results.Ok(result); }); - app.MapGet("/api/v1/clientes/{id}", async ([FromQuery] GetClienteByIdQuery query, + app.MapGet("/api/v1/clientes/{id:int}", async ([AsParameters] GetClienteByIdQuery query, [FromServices] IMediator mediator) => { From 738c5e872a25dae561ed9b3acc0897fc2f5b3465 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Wed, 8 Nov 2023 16:42:23 +0100 Subject: [PATCH 15/23] =?UTF-8?q?afinando=20apalica=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Clientes/Queries/GetClienteByIdQuery.cs | 10 +++++--- .../UpdateCliente/UpdateClienteHandler.cs | 2 +- .../OliSaude.Application/Dto/ClienteDto.cs | 13 +++------- .../Dto/Mapper/ClienteToDtoAdapter.cs | 23 ++++++++++++++++++ .../Dto/Mapper/ProfileMaping.cs | 17 +++++++++++++ .../Interfaces/IAdapter.cs | 7 ++++++ .../OliSaude.Domain/Entities/Cliente.cs | 5 ++-- dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 0 -> 32768 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 0 -> 4152 bytes .../Extensions/ConnectionsExtension.cs | 5 ++++ 10 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs create mode 100644 dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs create mode 100644 dev/OliSaude/OliSaude.Application/Interfaces/IAdapter.cs create mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm create mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs index 2e23f2a4..1564c027 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs @@ -2,6 +2,7 @@ using MediatR; using OliSaude.Application.Dto; using OliSaude.Application.Interfaces; +using OliSaude.Domain.Entities; namespace OliSaude.Application.Clientes.Queries { @@ -24,19 +25,20 @@ public static bool TryParse(string value, out GetClienteByIdQuery query) public class GetClienteByIdHandler : IRequestHandler { - private readonly IMapper _mapper; + private readonly IAdapter _adapter; private readonly IClienteRepositorio _repositorio; - public GetClienteByIdHandler(IMapper mapper, IClienteRepositorio repositorio) + public GetClienteByIdHandler(IAdapter adapter, IClienteRepositorio repositorio) { - _mapper = mapper; + _adapter = adapter; _repositorio = repositorio; } public async Task Handle(GetClienteByIdQuery request, CancellationToken cancellationToken) { var cliente = await _repositorio.GetClienteAsync(request.Id); - return _mapper.Map(cliente); + var clienteDto = _adapter.Adapte(cliente); + return clienteDto; } } } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs index 1af87021..c861ba76 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs @@ -21,7 +21,7 @@ public async Task Handle(UpdateClienteCommand request, CancellationToken cancell if (cliente is null) throw new Exception("Cliente invalido"); var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); - cliente.UpdateCliente(request.Nome, request.DataNascimento, problema, DateTime.UtcNow); + cliente.UpdateCliente(request.Nome, request.DataNascimento, problema); await _repo.UpdateClienteAsync(cliente, cancellationToken); } } diff --git a/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs index 456e1769..7af966d9 100644 --- a/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs +++ b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs @@ -1,6 +1,4 @@ -using AutoMapper; -using OliSaude.Domain.Entities; -using OliSaude.Domain.Enums; +using OliSaude.Domain.Enums; namespace OliSaude.Application.Dto { @@ -10,14 +8,9 @@ public class ClienteDto public string Nome { get; set; } public DateTime DataNascimento { get; set; } public ESexo Sexo { get; set; } + public DateTime DataRegisto { get; set; } + public DateTime DataActualizacao { get; set; } public string NomeProblema { get; set; } public int GrauProblema { get; set; } - - private class Map : Profile - { - public Map() { - CreateMap().ReverseMap(); - } - } } } diff --git a/dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs b/dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs new file mode 100644 index 00000000..a491cb34 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs @@ -0,0 +1,23 @@ +using OliSaude.Application.Interfaces; +using OliSaude.Domain.Entities; + +namespace OliSaude.Application.Dto.Mapper +{ + public class ClienteToDtoAdapter : IAdapter + { + public ClienteDto Adapte(Cliente source) + { + return new ClienteDto + { + Id = source.Id, + Nome = source.Nome, + DataNascimento = source.DataNascimento, + Sexo = source.Sexo, + DataRegisto = source.DataCriacao, + DataActualizacao = source.DataActualizacao, + NomeProblema = source.ProblemaDeSaude.Nome, + GrauProblema = source.ProblemaDeSaude.Grau + }; + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs b/dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs new file mode 100644 index 00000000..2bb78fa9 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs @@ -0,0 +1,17 @@ +using AutoMapper; +using OliSaude.Domain.Entities; + +namespace OliSaude.Application.Dto.Mapper +{ + public class ProfileMaping : Profile + { + public ProfileMaping() + { + + CreateMap() + .ForMember(c=>c.NomeProblema, opt =>opt.MapFrom(ob=>ob.ProblemaDeSaude.Nome)) + .ForMember(c => c.GrauProblema, opt => opt.MapFrom(ob => ob.ProblemaDeSaude.Grau)) + .ForMember(c=>c.DataRegisto, opt=>opt.MapFrom(ob=>ob.DataCriacao)); + } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Interfaces/IAdapter.cs b/dev/OliSaude/OliSaude.Application/Interfaces/IAdapter.cs new file mode 100644 index 00000000..08513912 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Interfaces/IAdapter.cs @@ -0,0 +1,7 @@ +namespace OliSaude.Application.Interfaces +{ + public interface IAdapter + { + TDestiny Adapte(TSource source); + } +} diff --git a/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs index 8f3ea6f8..b2d360e3 100644 --- a/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs +++ b/dev/OliSaude/OliSaude.Domain/Entities/Cliente.cs @@ -29,12 +29,11 @@ public Cliente(string nome, DateTime public void UpdateCliente(string nome, DateTime dataNascimento, - ProblemaSaude problemaDeSaude, - DateTime dateActualizacao) + ProblemaSaude problemaDeSaude) { Nome =nome; DataNascimento=dataNascimento; ProblemaDeSaude =problemaDeSaude; - DataActualizacao= dateActualizacao; + DataActualizacao = DateTime.UtcNow; } } diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..90c702467ca5a6ffe25ecf8e5f6e27136b14a734 GIT binary patch literal 32768 zcmeI)p$)=N5C-6D0@XDnHLw8=RmCRVpd(bGG0edX1XsZTD8d#`K`WX(izChVCzp4* zT%Py_xca@1IYmS@R;<9_yce6r;8sb9?lF98As z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=C73QTvtga82o1PBlyK!5-N0t5&UAV7cs s0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csf&Uix0(NdEP5=M^ literal 0 HcmV?d00001 diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..8032f0303590bcfe3fb7e886cb780a3ad2aac6af GIT binary patch literal 4152 zcmeH~F^d#26vt<7cZDhT&h7;9NTGtohU6ug%*z(uGT4X!NL!)l?Z-_?ac1pdBedr+U7x;_vgKT-Y>6-KD}`kjegyVqMOkw%;C?a z{Ql+Rk8k;O|M~CxKGpYU@Hc-jiT~F5P?7-5C{YU zfj}S-2m}IwKp+qZ1Oop+!2ht`KO86fah^|Yee4=Cna$nIk;(DAwN?4S77iF=BhE)m z6Rr%CMj%Bdo|UiKrVk86M^r`%ijrk0bw^^E&l{0ZEm2B@w}T`SxMp=FNqpT)qW|_vSGc&+O6V@h)x?*QKq0D~BziE8 zHzd~&_^4=YT{w=27n3oMNEt3D$ZY3gv|i`_8(jg-K!Rt#O=9{@yq@fiUza1>R*oFG qdTtwEu-On!{QZC%0aT}uyLV+lI9|P2w${M_Qo)r%>|(sWB=85%DX@P4 literal 0 HcmV?d00001 diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index cc51b1ab..4eaa7925 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -8,7 +8,9 @@ using OliSaude.Application.Clientes.UpdateCliente; using OliSaude.Application.Clientes.UpdateUser; using OliSaude.Application.Dto; +using OliSaude.Application.Dto.Mapper; using OliSaude.Application.Interfaces; +using OliSaude.Domain.Entities; using OliSaude.Infra.Data; using OliSaude.Infra.Repostorio; using System.Reflection; @@ -25,11 +27,14 @@ public static IServiceCollection AddDependece(this IServiceCollection services, cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())); services.AddAutoMapper(Assembly.GetExecutingAssembly()); + services.AddAutoMapper(typeof(ProfileMaping)); + services.AddScoped(); services.AddScoped>,GetAllClienteHandler>(); services.AddScoped,GetClienteByIdHandler >(); services.AddScoped>, GetClienteMaiorRiscoHandler >(); + services.AddTransient, ClienteToDtoAdapter>(); services.AddScoped< IRequestHandler, CreateClienteHandler >(); services.AddScoped< IRequestHandler < UpdateClienteCommand >, UpdateClienteHandler >(); From e292e9d4aa77856b7cc6974408c5d7a5bc11d316 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Wed, 8 Nov 2023 16:54:41 +0100 Subject: [PATCH 16/23] Actualizacao e melhorias --- .../Clientes/Queries/GetClienteByIdQuery.cs | 8 +++---- .../OliSaude.Application/Dto/ClienteDto.cs | 4 ++-- .../Dto/Mapper/ClienteToDtoAdapter.cs | 23 ------------------- .../Dto/Mapper/ProfileMaping.cs | 2 +- .../Extensions/ConnectionsExtension.cs | 2 -- 5 files changed, 7 insertions(+), 32 deletions(-) delete mode 100644 dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs diff --git a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs index 1564c027..8568d613 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/Queries/GetClienteByIdQuery.cs @@ -25,19 +25,19 @@ public static bool TryParse(string value, out GetClienteByIdQuery query) public class GetClienteByIdHandler : IRequestHandler { - private readonly IAdapter _adapter; + private readonly IMapper _mapper; private readonly IClienteRepositorio _repositorio; - public GetClienteByIdHandler(IAdapter adapter, IClienteRepositorio repositorio) + public GetClienteByIdHandler(IMapper mapper, IClienteRepositorio repositorio) { - _adapter = adapter; + _mapper = mapper; _repositorio = repositorio; } public async Task Handle(GetClienteByIdQuery request, CancellationToken cancellationToken) { var cliente = await _repositorio.GetClienteAsync(request.Id); - var clienteDto = _adapter.Adapte(cliente); + var clienteDto = _mapper.Map(cliente); return clienteDto; } } diff --git a/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs index 7af966d9..dc2559c5 100644 --- a/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs +++ b/dev/OliSaude/OliSaude.Application/Dto/ClienteDto.cs @@ -5,12 +5,12 @@ namespace OliSaude.Application.Dto public class ClienteDto { public int Id { get; set; } - public string Nome { get; set; } + public string Nome { get; set; } = string.Empty; public DateTime DataNascimento { get; set; } public ESexo Sexo { get; set; } public DateTime DataRegisto { get; set; } public DateTime DataActualizacao { get; set; } - public string NomeProblema { get; set; } + public string NomeProblema { get; set; } = string.Empty; public int GrauProblema { get; set; } } } diff --git a/dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs b/dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs deleted file mode 100644 index a491cb34..00000000 --- a/dev/OliSaude/OliSaude.Application/Dto/Mapper/ClienteToDtoAdapter.cs +++ /dev/null @@ -1,23 +0,0 @@ -using OliSaude.Application.Interfaces; -using OliSaude.Domain.Entities; - -namespace OliSaude.Application.Dto.Mapper -{ - public class ClienteToDtoAdapter : IAdapter - { - public ClienteDto Adapte(Cliente source) - { - return new ClienteDto - { - Id = source.Id, - Nome = source.Nome, - DataNascimento = source.DataNascimento, - Sexo = source.Sexo, - DataRegisto = source.DataCriacao, - DataActualizacao = source.DataActualizacao, - NomeProblema = source.ProblemaDeSaude.Nome, - GrauProblema = source.ProblemaDeSaude.Grau - }; - } - } -} diff --git a/dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs b/dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs index 2bb78fa9..2a14fc06 100644 --- a/dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs +++ b/dev/OliSaude/OliSaude.Application/Dto/Mapper/ProfileMaping.cs @@ -11,7 +11,7 @@ public ProfileMaping() CreateMap() .ForMember(c=>c.NomeProblema, opt =>opt.MapFrom(ob=>ob.ProblemaDeSaude.Nome)) .ForMember(c => c.GrauProblema, opt => opt.MapFrom(ob => ob.ProblemaDeSaude.Grau)) - .ForMember(c=>c.DataRegisto, opt=>opt.MapFrom(ob=>ob.DataCriacao)); + .ForMember(c=>c.DataRegisto, opt=>opt.MapFrom(ob=>ob.DataCriacao)).ReverseMap(); } } } diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index 4eaa7925..b75cb60c 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -34,8 +34,6 @@ public static IServiceCollection AddDependece(this IServiceCollection services, services.AddScoped,GetClienteByIdHandler >(); services.AddScoped>, GetClienteMaiorRiscoHandler >(); - services.AddTransient, ClienteToDtoAdapter>(); - services.AddScoped< IRequestHandler, CreateClienteHandler >(); services.AddScoped< IRequestHandler < UpdateClienteCommand >, UpdateClienteHandler >(); services.AddScoped< IRequestHandler < DeleteClienteCommand >, DeleteClienteHandler >(); From 9cf1f07b62da9101fd1135213ec25b65bb0bc937 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Wed, 8 Nov 2023 17:05:08 +0100 Subject: [PATCH 17/23] Finalizando o Desenvolvimento --- dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 32768 -> 32768 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 4152 -> 70072 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm index 90c702467ca5a6ffe25ecf8e5f6e27136b14a734..4f9a58ed4795e1f0e873ae73a3a81d687bfc16c8 100644 GIT binary patch delta 245 zcmZo@U}|V!s+V}A%K!o#K+MR%ARq{&S%Fw&;>Dw}?o)fL93K2MIkkSm;f)3}9zEbX zPpW#LQD6Wv_dgPV3Qw%(wPgXaK~|DQZ=9&_Ey&2g1k}w2^aK|J4+9^Az{ZJhnfRH3 Vrm{0|GH^5SGVn79Zk+hr002*$G`Ii& delta 150 zcmZo@U}|V!s+V}A%K!t63=9H5%)ko7jCpeB>VC%mv~qax)8y3p32d@cMGxOcHXi%4dyeeicV_sPCcdJz{`h`PyGAQE|D%7n!Y;k=?ccuInZ5q> zpKn$#9a8_shp&Gyu3h=el`l>oxmPV(z3Wg9N%I- z6{fK0LU<<64%wDXOO1}ts41A`3C2rJmZx6#sb_K~7!&r&xUSK*{()L&W>&^|5E&=) z(CA8|lVm+fgzF6U$$ZE29Y^hx&B{oop&T#mm#Ajp+uXDWb%gD0-=u7!WBndGcPBr8 zCNVlPjgpKA$1Qc``j#+lBDU#@`wllhIjq2+%C-W#V=9080GxZB=-wF}1r9g!N?xFu?{65K9Rwf%0SG_<0uX=z1R$`B0;`j{re@;1 zK@Ge=5yWZua2~9UxHsm52W8d^)ueU(8a}Z{YxwiMG{~~iA@`n|^i55h=LnaN4!PfG zaw+lxn0Ihcz%NfOi1`JE^9!8zU%LHUkA3+*6%*&LFK6djTTPk2ki@-kF_;_~T`zp%m`ttv<~gGS?@LWK@&Z_o0P7SE zk_(lo2lil{!pi&tfBMP&`q6hMParR_PcQU1EeJpW0uX=z1Rwwb2tWV=5IE=p<-CBd zFe-V0-(Pz7#ro6Dmy5iB-gt6TUZC;hLFdEyLjVF0fB*y_009UH`TA&JF04b zUl1)z%4j2G2f_kr;#8Fpni&^MLv9cl`03x|vjy%+wV$r8v5 zU_AoC*sP3X8p`qEmxvq1Kz!lb+_VUFgzatLr2cnA$J%<4IqByij1JZ#*fJC#+>JC1 zH?FF@z^|Tq=XY=2lRk#Lz)oN5v403a00Izz00bZa0SG_<0uX?}o(Pol0#oV;DtUqL zfBhE=um9-Mx#GFN)RuVx6(qn00SG_<0uX=z1Rwwb2<)H$@&Z_oz^%_jL3&nYK)TXc z38G+h@dfT%uE_~!!W~V344Npj_{zAh(SG%QW>&^|5E&=)a7Wi8SZe6nhuiv%DlbrU zH4{A;q&>B;gv(o&vuR<8aCt@cLRrbTxV~lil$sv1DDgIm>YhO=OY2n*^I>p45`!2tQ9)@`*R@;wb8jfgbTP?{(idg@}V zw9iT?;401w{NU1sr8ijX0`dYoc$vqpApijgKmY;|fB*y_009U<00Mg_P|gc9)L~Te z0vDfu<8=40|N3F^T%ggoc8mE1j@;Y0cJB@zJwpHj5P$##AOHafKwx(S&Np@Kwzgi3 z@t>1UATOYj5Jl=@?fNs9q&=CbtA^FjCXiyr2b=iRHr2JHldOhagNTh8A=Cv&wcEZe zOiCO_2s*srs91yNGg_o1RN90wVcY7OT3L@^{-57{^w{g?zKXoS?)I#c;q9|n`fz=H=4LWULen8ER9Z*^&}DAmMbAFBylfX3?_%ANL8hDih1jaV=^^f+jA;|!>dj9 z>ZGpS(bjKJALof6PQ!=uz*w8Xeja%NR delta 8 Pcmdn7m}Q5;1`7cI5d8x% From 8c8e27a9528a8d26b0d6a9f9bc9e15e684a2ff11 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 10 Nov 2023 12:05:23 +0100 Subject: [PATCH 18/23] =?UTF-8?q?Adicionando=20o=20Readme=20particular=20e?= =?UTF-8?q?=20iniciando=20a=20padroniza=C3=A7=C3=A3o=20da=20resposta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Clientes/CreateCliente/ClienteResponse.cs | 24 ++++++++++++++++++ .../OliSaude.Application/Commom/Response.cs | 8 ++++++ dev/OliSaude/OliSaude.Infra/DbOliSaude.db | Bin 20480 -> 20480 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 32768 -> 0 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 70072 -> 0 bytes .../Extensions/ConnectionsExtension.cs | 6 ++--- .../Papiline/PapelineExtension.cs | 1 - 7 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs create mode 100644 dev/OliSaude/OliSaude.Application/Commom/Response.cs delete mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm delete mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs new file mode 100644 index 00000000..81764d9b --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs @@ -0,0 +1,24 @@ +using OliSaude.Application.Commom; + +namespace OliSaude.Application.Clientes.CreateCliente +{ + public class ClienteResponse : Response + { + public ClienteResponse() + { + + } + public ClienteResponse(int id, string mensagem, bool isSucess) + { + Id = id; + Mensagem = mensagem; + IsSucess = isSucess; + } + public ClienteResponse(string mensagem, bool isSucess) + { + Mensagem = mensagem; + IsSucess = isSucess; + } + public int Id { get; set; } + } +} diff --git a/dev/OliSaude/OliSaude.Application/Commom/Response.cs b/dev/OliSaude/OliSaude.Application/Commom/Response.cs new file mode 100644 index 00000000..630ce04b --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Commom/Response.cs @@ -0,0 +1,8 @@ +namespace OliSaude.Application.Commom +{ + public abstract class Response + { + public string Mensagem { get; set; } = string.Empty; + public bool IsSucess { get; set; } + } +} diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db index 7bfd0dbe4cbdaa9eb03f3d25d06d75250e5669ac..0752cb62d1bac9bae6f8585ae44caa65fc29e418 100644 GIT binary patch delta 1105 zcmZ{jL2J}N7>1LI+H7}Q5j;qd4ybr22{V~wCX=NtC0a#AmagbUkZCh5(`J)8Ns5Y) zdhzJN#e1R9v);UU@L%*l_!C5Dchz>&_BQasJm33%@3*&a?(LgjOgLv4Mze8f&U~7= zHT|u1)OykU*({rrQy-@vPhD*setrL;QEjy>W4>)&Go$D^PYR*H-K;0m%`8WZ1vYeT zgaPtHpM=PB5GD~3{>?Y239KM_ffgGX{> zLsY3ILmO&0<2EOjmC7~;({UicGcIEu3+v?nIujQ9*kROVK61~MAltTv=vj^KmN`#3 zh_bxkhy}1Z3;i@p3%M>PPko7e$D=+D{IQgWgZ!7=-AT(>YFpPe?SV*@d{qkYF#BCXRk~b;1 zU&=Hd!Jy`ivnDz`DXUoKy{yKgp%*yBBM76q(UIgr4|(X_CCi{~b6y)=5sB2B(#dv2 ztg?~cp~+#3|{MQ=rTu#?lXq_-xp>NelJ}y GTYmu8Y6>g> delta 332 zcmZozz}T>WaRZ})AfFEd3vV(5Z!*6M-wxheytg(B3Iy`jmojoP*jsaoGder_CKe^< z7b`gCmE`B;D>x>XlqTk6Rwbt78yOfF=o%X88kj2>npzo{SQ%UDSsECJWTurCvltl| z86!!WTA3K@S(+GFSelq4Nf}rG#jT7j^vq2xO-w9}3RpQAjIBAPCqJ^yV&R{}kTZFY zouit$m8rR&nWee8fvGW)WpdD=h&IGvrt6LU&Zixgb)b2IbO t^NW#O3$oS7%G6ZP)Y8N^F({`0y=l`e|rH&RsiRAQ3U`1 diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm deleted file mode 100644 index 4f9a58ed4795e1f0e873ae73a3a81d687bfc16c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)J8FVK6b8`i`~89xZbC?5Wo73o+>wPAg1ZpcAZgM_b|CH|RWkEqVXGkg#rfdQ zz%bky&I0cAHjA8gs!GIolJ-WbkKNDLdbQsyme=3;_i=kZeI9Pt?q&Mq{nV;R?)&$U z`*D7=NIk8&^4qWOMI#FV0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csff5Q-qMGJx zHPhU$ZuDaq;}ZVSmk7K^pqA#$wW1Tf7{n;@Y&s!8fB*pk1PBlyK!5-N0t5&UAV7cs m0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5(@Rp1}PSt@1# diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal deleted file mode 100644 index a3a749eea56ba3acc477caafc52453b75503c7be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70072 zcmeI*Uu@(?9S3ml=8}uEo4cx_DitbNqSvab*7bPC9*cHXi%4dyeeicV_sPCcdJz{`h`PyGAQE|D%7n!Y;k=?ccuInZ5q> zpKn$#9a8_shp&Gyu3h=el`l>oxmPV(z3Wg9N%I- z6{fK0LU<<64%wDXOO1}ts41A`3C2rJmZx6#sb_K~7!&r&xUSK*{()L&W>&^|5E&=) z(CA8|lVm+fgzF6U$$ZE29Y^hx&B{oop&T#mm#Ajp+uXDWb%gD0-=u7!WBndGcPBr8 zCNVlPjgpKA$1Qc``j#+lBDU#@`wllhIjq2+%C-W#V=9080GxZB=-wF}1r9g!N?xFu?{65K9Rwf%0SG_<0uX=z1R$`B0;`j{re@;1 zK@Ge=5yWZua2~9UxHsm52W8d^)ueU(8a}Z{YxwiMG{~~iA@`n|^i55h=LnaN4!PfG zaw+lxn0Ihcz%NfOi1`JE^9!8zU%LHUkA3+*6%*&LFK6djTTPk2ki@-kF_;_~T`zp%m`ttv<~gGS?@LWK@&Z_o0P7SE zk_(lo2lil{!pi&tfBMP&`q6hMParR_PcQU1EeJpW0uX=z1Rwwb2tWV=5IE=p<-CBd zFe-V0-(Pz7#ro6Dmy5iB-gt6TUZC;hLFdEyLjVF0fB*y_009UH`TA&JF04b zUl1)z%4j2G2f_kr;#8Fpni&^MLv9cl`03x|vjy%+wV$r8v5 zU_AoC*sP3X8p`qEmxvq1Kz!lb+_VUFgzatLr2cnA$J%<4IqByij1JZ#*fJC#+>JC1 zH?FF@z^|Tq=XY=2lRk#Lz)oN5v403a00Izz00bZa0SG_<0uX?}o(Pol0#oV;DtUqL zfBhE=um9-Mx#GFN)RuVx6(qn00SG_<0uX=z1Rwwb2<)H$@&Z_oz^%_jL3&nYK)TXc z38G+h@dfT%uE_~!!W~V344Npj_{zAh(SG%QW>&^|5E&=)a7Wi8SZe6nhuiv%DlbrU zH4{A;q&>B;gv(o&vuR<8aCt@cLRrbTxV~lil$sv1DDgIm>YhO=OY2n*^I>p45`!2tQ9)@`*R@;wb8jfgbTP?{(idg@}V zw9iT?;401w{NU1sr8ijX0`dYoc$vqpApijgKmY;|fB*y_009U<00Mg_P|gc9)L~Te z0vDfu<8=40|N3F^T%ggoc8mE1j@;Y0cJB@zJwpHj5P$##AOHafKwx(S&Np@Kwzgi3 z@t>1UATOYj5Jl=@?fNs9q&=CbtA^FjCXiyr2b=iRHr2JHldOhagNTh8A=Cv&wcEZe zOiCO_2s*srs91yNGg_o1RN90wVcY7OT3L@^{-57{^w{g?zKXoS?)I#c;q9|n`fz=H=4LWULen8ER9Z*^&}DAmMbAFBylfX3?_%ANL8hDih1jaV=^^f+jA;|!>dj9 z>ZGpS(bjKJALof6PQ!=uz*w8Xeja%NR diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index b75cb60c..a139969d 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -10,7 +10,6 @@ using OliSaude.Application.Dto; using OliSaude.Application.Dto.Mapper; using OliSaude.Application.Interfaces; -using OliSaude.Domain.Entities; using OliSaude.Infra.Data; using OliSaude.Infra.Repostorio; using System.Reflection; @@ -25,9 +24,8 @@ public static IServiceCollection AddDependece(this IServiceCollection services, options.UseSqlite(configuration.GetConnectionString("DefaultConnetion"))); services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())); - services.AddAutoMapper(Assembly.GetExecutingAssembly()); - - services.AddAutoMapper(typeof(ProfileMaping)); + services.AddAutoMapper(Assembly.GetExecutingAssembly()) + .AddAutoMapper(typeof(ProfileMaping)); services.AddScoped(); services.AddScoped>,GetAllClienteHandler>(); diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs index bee08f58..056440fc 100644 --- a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -61,7 +61,6 @@ public static void Endpoints(this WebApplication app) { await mediator.Send(command); }); - } } } From a79e915defb0ccdc69d7068604ec44631af74cfe Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 10 Nov 2023 12:06:13 +0100 Subject: [PATCH 19/23] Adionando o Readme --- dev/README.md | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/dev/README.md b/dev/README.md index d2c72e69..78e5b0fc 100644 --- a/dev/README.md +++ b/dev/README.md @@ -1 +1,31 @@ -# SEU Readme \ No newline at end of file +# Backend Developer Challenge + +## Introdução + +De Formas a testar meu conhecimento em desenvolvimento de API, alinhei no presente desafio que consiste em Desenvolver uma API de saude denominado OLisaude. + +## Modelo de dados + +### Cliente + +- Nome: Nome do cliente +- DataNascimento: data de nascimento do cliente +- Sexo: sexo do cliente +- ProblemaDeSaude: problemas de saude do Cliente +- DataCriacao: data de criação +- DataActualizacao: data de atualização + +### Problema de Saude + +- Nome: nome do problema +- Grau: Grau do problema + +## Funcionalidades + +- Cliente: Operações CRUD para gerenciar informações o Cliente. + +## Instrução de uso +* + +## Tecnologias Usadas +* From d20e74de7ced2542c21eaccbb3e8025e34f9bbfa Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 10 Nov 2023 12:59:59 +0100 Subject: [PATCH 20/23] =?UTF-8?q?finalizando=20a=20resposta=20para=20da=20?= =?UTF-8?q?cria=C3=A7=C3=A3o=20de=20cliente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Clientes/CreateCliente/ClienteResponse.cs | 10 +++++++-- .../CreateCliente/CreateClienteCommand.cs | 2 +- .../CreateCliente/CreateClienteHandler.cs | 20 ++++++++++++------ dev/OliSaude/OliSaude.Infra/DbOliSaude.db | Bin 20480 -> 20480 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 0 -> 32768 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 0 -> 16512 bytes .../Extensions/ConnectionsExtension.cs | 2 +- .../Papiline/PapelineExtension.cs | 4 ++-- 8 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm create mode 100644 dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs index 81764d9b..7a114309 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs @@ -8,9 +8,9 @@ public ClienteResponse() { } - public ClienteResponse(int id, string mensagem, bool isSucess) + public ClienteResponse(ResponseData obj, string mensagem, bool isSucess) { - Id = id; + Data = obj; Mensagem = mensagem; IsSucess = isSucess; } @@ -19,6 +19,12 @@ public ClienteResponse(string mensagem, bool isSucess) Mensagem = mensagem; IsSucess = isSucess; } + public ResponseData? Data { get; set; } + } + + public class ResponseData + { public int Id { get; set; } + public string Nome { get; set; } } } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs index 3db5709e..1fc638c3 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteCommand.cs @@ -3,7 +3,7 @@ namespace OliSaude.Application.Clientes.CreateCliente { - public class CreateClienteCommand : IRequest + public class CreateClienteCommand : IRequest { public string Nome { get; set; } public DateTime DataNascimento { get; set; } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs index e26c36fc..b7f222f3 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs @@ -5,20 +5,28 @@ namespace OliSaude.Application.Clientes.CreateCliente { - public class CreateClienteHandler : IRequestHandler + public class CreateClienteHandler : IRequestHandler { - private readonly IClienteRepositorio _repo; + private readonly IClienteRepositorio _repositorio; - public CreateClienteHandler(IClienteRepositorio repo) + public CreateClienteHandler(IClienteRepositorio repositorio) { - _repo = repo; + _repositorio = repositorio; } - public async Task Handle(CreateClienteCommand request, CancellationToken cancellationToken) + public async Task Handle(CreateClienteCommand request, CancellationToken cancellationToken) { var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); var cliente = new Cliente(request.Nome, request.DataNascimento, request.Sexo, problema); - return await _repo.SaveAsync(cliente, cancellationToken); + await _repositorio.SaveAsync(cliente, cancellationToken); + + if (cliente.Id == 0) + return new ClienteResponse("Não foi possivel salvar o cliente", false); + + var obj = new ResponseData { Id = cliente.Id, + Nome = cliente.Nome }; + + return new ClienteResponse(obj, "Cliente Salvo com sucesso", true) ; } } diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db index 0752cb62d1bac9bae6f8585ae44caa65fc29e418..111339f61d12a05b459b9ae8376d45a3191b576e 100644 GIT binary patch delta 179 zcmZozz}T>WaRZBi950tSBmX3R6}}z3w|HZC-tv_4aB%nW`EUzyE#orZ*eJ?XpUcO| zplQu1%joQ!n^=^bU##GmSCXHXnQv%mYNTsmq-$uPU}$J%Y++?;pl4}r>5`e4lvWUOmw2$Q$8GBVUNw=^&|v@pXVWoT(^k;Ti&pl!`53bZafF{dPT^EN9_QAR!h Dq~R*c delta 49 zcmZozz}T>WaRZBi3=h{bM*d0sDttS5Z}GLPxL$lgeyLz#lt~a;(bS%HTA6va5^?!WCd%G*` zyKU_bEC>)FK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*3Kp+c)9!y~b0>234A^kHa z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N I0{(^b literal 0 HcmV?d00001 diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..94bf0205f45639bf6fdd99e1d8743c5204e7eca8 GIT binary patch literal 16512 zcmeI2&uisW6vy*gJ2w5zfT)NV@fXAJLhi5J+&o3fn;+tIN|~yIpx|xaZAm9DsYzbZ zA_#-vN*DeGf*|NZH!fydMHedm0d9nGHJ}R}1UG^wdB6L^jk6er6Iv)aFZbN<=bU?9 z$vN`fQ`fEf&4(;&$ttfKw^rY~{{F#puZrJ(SpDVFpK$BG(fhxC{?*l+^zX0d;pT#U zP+R%?;i355s=aiyRab&*AdabC_gO{S-)M_HYa z;iour1(Tdpb%KfUAZRbx)|rO=D0pq_Y%|TB<)lcHC?!hJy4QEgf>3y_lImQfH%wvj ziSad=3Mp(#d5i@92_~XgurptYd|)W@T-uJ3?X(mbRQ{MlL@4}_aF;N@sWUy(U(gF2 z;)fm!x$pX3z-b^(G)c8TSNRg)YfX3J)VYx9WHZV)L7S3wPt?h{ujSZe+mUvzn0za7{uda6+?eXp9ht({BJ)|N@CNO};aamN$OS(a{> zo70YQUeQrYw~Re14Tz{vFo*zEg3uF9p1NjNo*x0v>z!OD+G(bFp@|B-`Z1ngN|Pem zG}A{`B*NuVut1Ct}mvdZ3Z z&Fe*G@?jd43}Nvgq{3BPC|@2HIW+mKeZOrz)2KaWH=F18O#F7@T>zZk0X;*C}@ff)M zglcJL*TiOUW_n^}==rWBk}LnP*uIHzPwr0H7HilL(dElJ>6qBL(uo{cvlmz&5}DLJ z=@4E56eU1@S;rdEcTg32W;mwO^#~J+1_Kt|Cr3;>v$pj_wx|gNdHI$&od?c0t{MLS^-b z(xfwH^5nHzrK~Ki-TJeZW`)jSEvV)YFj5ALl8{jsYDqKQi&_p*!-&C&06Pt-av?p1 zQfzb^LC9ID8nTCTMJarXO_jg>_XS^k|M6#kJ^RP&<$HnJ;%y6l@InGe00|%gB!C2v z01`j~NB{{S0VIF~?i~WNwMlrz5l1E|%p%Adn-}=;!L2v`xjp@5`CeerUir^?0ej`% zfr3hq01`j~NB{{S0VHrI3FJ$*^|-QG)x*-zXoe=?KJ=8T#$2y!5B)^wDajSHU$#e+ z)PeSLlJ1*09dws^pA151um;Q%+#mGlj+z+G3*fu}&I{nYKs7gk^8z?8@c-rozCHcH u)3<(_`3~m=?&N<4xE2yX0!RP}AOR$R1dsp{Kmter2_S*HhQR2&z|y}h@k%KG literal 0 HcmV?d00001 diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index a139969d..e6b19d73 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -32,7 +32,7 @@ public static IServiceCollection AddDependece(this IServiceCollection services, services.AddScoped,GetClienteByIdHandler >(); services.AddScoped>, GetClienteMaiorRiscoHandler >(); - services.AddScoped< IRequestHandler, CreateClienteHandler >(); + services.AddScoped< IRequestHandler, CreateClienteHandler >(); services.AddScoped< IRequestHandler < UpdateClienteCommand >, UpdateClienteHandler >(); services.AddScoped< IRequestHandler < DeleteClienteCommand >, DeleteClienteHandler >(); diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs index 056440fc..dd846587 100644 --- a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -45,9 +45,9 @@ public static void Endpoints(this WebApplication app) [FromServices] IMediator mediator) => { var result = await mediator.Send(command); - if (result == 0) + if (!result.IsSucess) throw new Exception("Erro ao salvar o cliente"); - return Results.Created($"/{result}", result); + return Results.Created($"/api/v1/cliente/{result.Data.Id}", result); }); app.MapPut("/api/v1/clientes", async ([FromBody] UpdateClienteCommand command, From e2efeb1445dafb6d0cdc6d2d6b6fdd996023cba0 Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 10 Nov 2023 14:36:41 +0100 Subject: [PATCH 21/23] afinando e melhorando o Delete --- .../Clientes/CreateCliente/ClienteResponse.cs | 14 +++------ .../CreateCliente/CreateClienteHandler.cs | 23 ++++++++------ .../DeleteCliente/DeleteClienteCommand.cs | 2 +- .../DeleteCliente/DeleteClienteHandler.cs | 29 ++++++++++++------ .../Clientes/DeleteCliente/DeleteResponse.cs | 29 ++++++++++++++++++ .../OliSaude.Application/Commom/Response.cs | 4 ++- .../Interfaces/IClienteRepositorio.cs | 2 +- dev/OliSaude/OliSaude.Infra/DbOliSaude.db | Bin 20480 -> 20480 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 32768 -> 32768 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 16512 -> 0 bytes .../Extensions/ConnectionsExtension.cs | 2 +- .../Repostorio/ClienteRepositorio.cs | 4 +-- .../Papiline/PapelineExtension.cs | 7 +++-- dev/README.md | 5 ++- 14 files changed, 84 insertions(+), 37 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteResponse.cs diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs index 7a114309..5dd9f708 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/ClienteResponse.cs @@ -8,23 +8,19 @@ public ClienteResponse() { } - public ClienteResponse(ResponseData obj, string mensagem, bool isSucess) + public ClienteResponse(ResponseData obj, string mensagem) { Data = obj; Mensagem = mensagem; - IsSucess = isSucess; + StatusCode = 201; } - public ClienteResponse(string mensagem, bool isSucess) + public ClienteResponse(string mensagem, int status) { Mensagem = mensagem; - IsSucess = isSucess; + StatusCode=status; } public ResponseData? Data { get; set; } } - public class ResponseData - { - public int Id { get; set; } - public string Nome { get; set; } - } + public record ResponseData(int Id, string Nome); } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs index b7f222f3..75782c39 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/CreateCliente/CreateClienteHandler.cs @@ -16,18 +16,23 @@ public CreateClienteHandler(IClienteRepositorio repositorio) public async Task Handle(CreateClienteCommand request, CancellationToken cancellationToken) { - var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); - var cliente = new Cliente(request.Nome, request.DataNascimento, request.Sexo, problema); - await _repositorio.SaveAsync(cliente, cancellationToken); + try + { + var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); + var cliente = new Cliente(request.Nome, request.DataNascimento, request.Sexo, problema); + await _repositorio.SaveAsync(cliente, cancellationToken); - if (cliente.Id == 0) - return new ClienteResponse("Não foi possivel salvar o cliente", false); + if (cliente.Id == 0) + return new ClienteResponse("Não foi possivel salvar o cliente", 404); - var obj = new ResponseData { Id = cliente.Id, - Nome = cliente.Nome }; + var obj = new ResponseData(cliente.Id, cliente.Nome); - return new ClienteResponse(obj, "Cliente Salvo com sucesso", true) ; - + return new ClienteResponse(obj, "Cliente Salvo com sucesso"); + + }catch (Exception ex) + { + return new ClienteResponse(ex.Message, 500); + } } } } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs index 78cd484d..093d20c2 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteCommand.cs @@ -2,7 +2,7 @@ namespace OliSaude.Application.Clientes.DeleteCliente { - public class DeleteClienteCommand : IRequest + public class DeleteClienteCommand : IRequest { public int Id { get; set; } } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs index c91f0228..be3e57d2 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteClienteHandler.cs @@ -3,21 +3,32 @@ namespace OliSaude.Application.Clientes.DeleteCliente { - public class DeleteClienteHandler : IRequestHandler + public class DeleteClienteHandler : IRequestHandler { - private readonly IClienteRepositorio _repo; + private readonly IClienteRepositorio _repositorio; - public DeleteClienteHandler(IClienteRepositorio repo) + public DeleteClienteHandler(IClienteRepositorio repositorio) { - _repo = repo; + _repositorio = repositorio; } - public async Task Handle(DeleteClienteCommand request, CancellationToken cancellationToken) + public async Task Handle(DeleteClienteCommand request, CancellationToken cancellationToken) { - var cliente = await _repo.GetClienteAsync(request.Id); - if (cliente is null) - throw new Exception("Não um cliente com esse Id"); - _repo.DeleteCliente(cliente); + try + { + var cliente = await _repositorio.GetClienteAsync(request.Id); + if (cliente is null) + return new DeleteResponse("Não foi encontrado um cliente com esse Id", 400); + _repositorio.DeleteCliente(cliente); + + var data = new DeleteData(cliente.Id, cliente.Nome, cliente.ProblemaDeSaude.Nome); + + return new DeleteResponse(data, "Cliente Removido com sucesso"); + }catch (Exception ex) + { + return new DeleteResponse(ex.Message, 500); + } + } } } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteResponse.cs b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteResponse.cs new file mode 100644 index 00000000..b37b99d2 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/DeleteCliente/DeleteResponse.cs @@ -0,0 +1,29 @@ +using OliSaude.Application.Commom; + +namespace OliSaude.Application.Clientes.DeleteCliente +{ + public class DeleteResponse : Response + { + public DeleteResponse() + { + + } + public DeleteResponse(string mensagem, int status) + { + Mensagem = mensagem; + StatusCode = status; + } + + public DeleteResponse(DeleteData data, string mensagem) + { + Data = data; + Mensagem = mensagem; + StatusCode = 200; + } + + public DeleteData? Data { get; set; } + + } + + public record DeleteData(int Id, string Name, string Problema); +} diff --git a/dev/OliSaude/OliSaude.Application/Commom/Response.cs b/dev/OliSaude/OliSaude.Application/Commom/Response.cs index 630ce04b..5118d7c7 100644 --- a/dev/OliSaude/OliSaude.Application/Commom/Response.cs +++ b/dev/OliSaude/OliSaude.Application/Commom/Response.cs @@ -3,6 +3,8 @@ public abstract class Response { public string Mensagem { get; set; } = string.Empty; - public bool IsSucess { get; set; } + public int StatusCode { get; set; } = 400; + public bool IsSucess => StatusCode >= 200 && StatusCode <= 299; + } } diff --git a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs index 5d0795b2..dbd88e06 100644 --- a/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs +++ b/dev/OliSaude/OliSaude.Application/Interfaces/IClienteRepositorio.cs @@ -4,7 +4,7 @@ namespace OliSaude.Application.Interfaces { public interface IClienteRepositorio { - Task SaveAsync(Cliente cliente, CancellationToken cancellationToken); + Task SaveAsync(Cliente cliente, CancellationToken cancellationToken); IEnumerable GetAllClientes(); Task GetClienteAsync(int id); Task UpdateClienteAsync(Cliente cliente, CancellationToken cancellationToken); diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db index 111339f61d12a05b459b9ae8376d45a3191b576e..f5891165b0e2ac4eb4095311c7a0fb257d1e521c 100644 GIT binary patch delta 324 zcmZozz}T>WaRZ})D&GzUUQQoI{z<&Icw>0p@|5y$aQE@~a0_uQ<1*(w$ms)u8ynR) z>x%_A85Au!jTxPtz48QWaRZ})A_D^hFPAwZ|0I4Dz8$=`cw>0p@|5y$aQE@~a0_uQ<1*jaD9W|j U+^Ug%?;i355s=aiyRab&*AdabC_gO{S-)M_HYa z;iour1(Tdpb%KfUAZRbx)|rO=D0pq_Y%|TB<)lcHC?!hJy4QEgf>3y_lImQfH%wvj ziSad=3Mp(#d5i@92_~XgurptYd|)W@T-uJ3?X(mbRQ{MlL@4}_aF;N@sWUy(U(gF2 z;)fm!x$pX3z-b^(G)c8TSNRg)YfX3J)VYx9WHZV)L7S3wPt?h{ujSZe+mUvzn0za7{uda6+?eXp9ht({BJ)|N@CNO};aamN$OS(a{> zo70YQUeQrYw~Re14Tz{vFo*zEg3uF9p1NjNo*x0v>z!OD+G(bFp@|B-`Z1ngN|Pem zG}A{`B*NuVut1Ct}mvdZ3Z z&Fe*G@?jd43}Nvgq{3BPC|@2HIW+mKeZOrz)2KaWH=F18O#F7@T>zZk0X;*C}@ff)M zglcJL*TiOUW_n^}==rWBk}LnP*uIHzPwr0H7HilL(dElJ>6qBL(uo{cvlmz&5}DLJ z=@4E56eU1@S;rdEcTg32W;mwO^#~J+1_Kt|Cr3;>v$pj_wx|gNdHI$&od?c0t{MLS^-b z(xfwH^5nHzrK~Ki-TJeZW`)jSEvV)YFj5ALl8{jsYDqKQi&_p*!-&C&06Pt-av?p1 zQfzb^LC9ID8nTCTMJarXO_jg>_XS^k|M6#kJ^RP&<$HnJ;%y6l@InGe00|%gB!C2v z01`j~NB{{S0VIF~?i~WNwMlrz5l1E|%p%Adn-}=;!L2v`xjp@5`CeerUir^?0ej`% zfr3hq01`j~NB{{S0VHrI3FJ$*^|-QG)x*-zXoe=?KJ=8T#$2y!5B)^wDajSHU$#e+ z)PeSLlJ1*09dws^pA151um;Q%+#mGlj+z+G3*fu}&I{nYKs7gk^8z?8@c-rozCHcH u)3<(_`3~m=?&N<4xE2yX0!RP}AOR$R1dsp{Kmter2_S*HhQR2&z|y}h@k%KG diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index e6b19d73..40851e1e 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -34,7 +34,7 @@ public static IServiceCollection AddDependece(this IServiceCollection services, services.AddScoped< IRequestHandler, CreateClienteHandler >(); services.AddScoped< IRequestHandler < UpdateClienteCommand >, UpdateClienteHandler >(); - services.AddScoped< IRequestHandler < DeleteClienteCommand >, DeleteClienteHandler >(); + services.AddScoped< IRequestHandler < DeleteClienteCommand, DeleteResponse >, DeleteClienteHandler >(); return services; } diff --git a/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs index 5746329d..b247f41d 100644 --- a/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs +++ b/dev/OliSaude/OliSaude.Infra/Repostorio/ClienteRepositorio.cs @@ -27,12 +27,10 @@ public async Task GetClienteAsync(int id) return cliente; } - public async Task SaveAsync(Cliente cliente, CancellationToken cancellationToken) + public async Task SaveAsync(Cliente cliente, CancellationToken cancellationToken = default) { _context.Add(cliente); await _context.SaveChangesAsync(); - - return cliente.Id; } public async Task UpdateClienteAsync(Cliente cliente, CancellationToken cancellationToken) diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs index dd846587..5f906d57 100644 --- a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -53,13 +53,16 @@ public static void Endpoints(this WebApplication app) app.MapPut("/api/v1/clientes", async ([FromBody] UpdateClienteCommand command, [FromServices] IMediator mediator) => { - await mediator.Send(command); + await mediator.Send(command); }); app.MapDelete("/api/v1/clientes", async ([FromBody] DeleteClienteCommand command, [FromServices] IMediator mediator) => { - await mediator.Send(command); + var result = await mediator.Send(command); + if (!result.IsSucess) + return Results.BadRequest(); + return Results.Ok(result); }); } } diff --git a/dev/README.md b/dev/README.md index 78e5b0fc..4609e340 100644 --- a/dev/README.md +++ b/dev/README.md @@ -26,6 +26,9 @@ De Formas a testar meu conhecimento em desenvolvimento de API, alinhei no presen ## Instrução de uso * - +## EndPoints da API +### Cliente +* ## Tecnologias Usadas * + From 17f5c7d287e9912391f6abd23140c1b20be5ad7b Mon Sep 17 00:00:00 2001 From: RaMadaSilva Date: Fri, 10 Nov 2023 15:45:06 +0100 Subject: [PATCH 22/23] finalizando o projecto --- .../UpdateCliente/UpdateClienteCommand.cs | 6 +-- .../UpdateCliente/UpdateClienteHandler.cs | 41 ++++++++++---- .../Clientes/UpdateCliente/UpdateResponse.cs | 35 ++++++++++++ dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 32768 -> 32768 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 0 -> 16512 bytes .../Extensions/ConnectionsExtension.cs | 2 +- .../Papiline/PapelineExtension.cs | 6 ++- dev/README.md | 51 ++++++++++++++++-- dev/image.png | Bin 0 -> 32238 bytes 9 files changed, 120 insertions(+), 21 deletions(-) create mode 100644 dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateResponse.cs create mode 100644 dev/image.png diff --git a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs index cb4cc9ff..3b36c3de 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteCommand.cs @@ -1,9 +1,9 @@ using MediatR; -using OliSaude.Domain.Enums; +using OliSaude.Application.Clientes.UpdateCliente; -namespace OliSaude.Application.Clientes.UpdateUser; +namespace OliSaude.Application.Clientes.UpdateUser; -public class UpdateClienteCommand : IRequest +public class UpdateClienteCommand : IRequest { public int Id { get; set; } public string Nome { get; set; } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs index c861ba76..7d8bd459 100644 --- a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs +++ b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateClienteHandler.cs @@ -5,24 +5,43 @@ namespace OliSaude.Application.Clientes.UpdateCliente { - public class UpdateClienteHandler : IRequestHandler + public class UpdateClienteHandler : IRequestHandler { - private readonly IClienteRepositorio _repo; + private readonly IClienteRepositorio _repositoio; - public UpdateClienteHandler(IClienteRepositorio repo) + public UpdateClienteHandler(IClienteRepositorio repositorio) { - _repo = repo; + _repositoio = repositorio; } - public async Task Handle(UpdateClienteCommand request, CancellationToken cancellationToken) + public async Task Handle(UpdateClienteCommand request, CancellationToken cancellationToken) { - var cliente =await _repo.GetClienteAsync(request.Id); + try + { + var cliente = await _repositoio.GetClienteAsync(request.Id); + + if (cliente is null) + return new UpdateResponse("Cliente invalido", 400); + + var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); + cliente.UpdateCliente(request.Nome, request.DataNascimento, problema); + await _repositoio.UpdateClienteAsync(cliente, cancellationToken); + + var data = new UpdateData(cliente.Id, + cliente.Nome, + Enum.GetName(cliente.Sexo), + cliente.DataNascimento, + cliente.ProblemaDeSaude.Nome, + cliente.ProblemaDeSaude.Grau, + cliente.DataCriacao, + cliente.DataActualizacao); + + return new UpdateResponse(data, "Cliente actualizado com sucesso"); + }catch (Exception ex) + { + return new UpdateResponse(ex.Message, 500); + } - if (cliente is null) - throw new Exception("Cliente invalido"); - var problema = new ProblemaSaude(request.NomeProblema, request.GrauProblema); - cliente.UpdateCliente(request.Nome, request.DataNascimento, problema); - await _repo.UpdateClienteAsync(cliente, cancellationToken); } } } diff --git a/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateResponse.cs b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateResponse.cs new file mode 100644 index 00000000..3ff993f3 --- /dev/null +++ b/dev/OliSaude/OliSaude.Application/Clientes/UpdateCliente/UpdateResponse.cs @@ -0,0 +1,35 @@ +using OliSaude.Application.Commom; + +namespace OliSaude.Application.Clientes.UpdateCliente +{ + public class UpdateResponse : Response + { + public UpdateResponse() + { + + } + public UpdateResponse(string mensagem, int status) + { + Mensagem = mensagem; + StatusCode = status; + } + + public UpdateResponse(UpdateData data, string mensagem) + { + Data = data; + Mensagem = mensagem; + StatusCode = 200; + } + + public UpdateData? Data { get; set; } + } + + public record UpdateData(int Id, + string Name, + string Sexo, + DateTime DataNascimento, + string Problema, + int Grau, + DateTime DataCriacao, + DateTime DataActualizacao); +} diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..1d9785dd438a83d7d2ace469bc89e7a81d81d04f 100644 GIT binary patch delta 171 zcmZo@U}|V!s+V}A%K!q*K+MR%Aix5oS%H{I_VUw}NedGq|LK3I*lY2-V^RO2YuOAI sq^buR1qL8<|04mY@WgsfUYM02nq^~SvNtOu&^bWXPbNmDjg6d!01s?1?f?J) delta 80 zcmZo@U}|V!;+1%$%K!t66BkO0TChv7nNGgVi7p`mlYpuI4+Il)WHxT_@ZPw=zytuE CK@2|(hA})iYwYmDYu>3nc3Oddr`twD>apnM2p}HCwJ4b?cQ$O z-3u`Yg717ID59@L5d07N#up;~1->bLDfqIY_)-v`xyxO8mmc_{l~SG~fv`_@zVm$M znTKWWyYl1XpE%85pLLuQj{Us*&-p+0eu)15`I%a}C%^g>E-W`|g{;yUMA?pYAMs?*98Ue|b+P1!F&nKWrIQWi0#z7)YFT@^`X zytj*vDfHab(8A77Fv)qKW`r1zqTaIWoNc+MK((ifPF{MeS(Rr=PL&9nWF*R>SP)-H zburP~rZQ!Ha!jV;04Ajfqfs~`L=}r}GzLjNeVF9Myq9FxbDLx|&|@AIu?SvnS5Gu}Ho>FTa=?@bMes8}#qfj|iw%nT8A(;XB^@(=WJIW0E(MFk1meLw#-U($-gPdt+~+{-4U-kg2Yo2n+-`_Xv#rZ2fj>c6 z4yt!D=gq1x=?@8BrwN-o3ZMR?BHR*?$cd4Ib-Juo% zxk;`1x=#Dur0nHWX~HIs{E&x~(djgYp@4A8=|{(1N49F`AWho}V3`2xy6G1AFxx?j z_klYqsIK;QOlrn^<{()alhBt`aurS|I|?yQb!zP54I09hN%jov^neg(u*25QVvkq&5{2g7TX+yAubkbtt!<7nLsIj)54VcCdiPEbyV1wDaAh z>rpipvqb{&AP$rdh+ z_RFdI``>JT-)P)%mgjH7dj#{hXS_#%=K>G*@c~Ce0!RP}AOR$R1RfHB0$j98S~uqE zmH|Vwb=T`o)z@I{*BvnVg9%g|d7|4gS()USnR=w7;L7AaXUh6bM~`$zeYAKkfad~u aE`a9(kH)zGydYjY*6$JExxfQ>kKkXCHx8Bn literal 0 HcmV?d00001 diff --git a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs index 40851e1e..601b53fd 100644 --- a/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs +++ b/dev/OliSaude/OliSaude.Infra/Extensions/ConnectionsExtension.cs @@ -33,7 +33,7 @@ public static IServiceCollection AddDependece(this IServiceCollection services, services.AddScoped>, GetClienteMaiorRiscoHandler >(); services.AddScoped< IRequestHandler, CreateClienteHandler >(); - services.AddScoped< IRequestHandler < UpdateClienteCommand >, UpdateClienteHandler >(); + services.AddScoped< IRequestHandler < UpdateClienteCommand, UpdateResponse >, UpdateClienteHandler >(); services.AddScoped< IRequestHandler < DeleteClienteCommand, DeleteResponse >, DeleteClienteHandler >(); return services; diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs index 5f906d57..a6044b57 100644 --- a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -53,7 +53,11 @@ public static void Endpoints(this WebApplication app) app.MapPut("/api/v1/clientes", async ([FromBody] UpdateClienteCommand command, [FromServices] IMediator mediator) => { - await mediator.Send(command); + var result = await mediator.Send(command); + if (!result.IsSucess) + return Results.NotFound("Não foi possivel actualizar o cliente"); + + return Results.Ok(result); }); app.MapDelete("/api/v1/clientes", async ([FromBody] DeleteClienteCommand command, diff --git a/dev/README.md b/dev/README.md index 4609e340..d64df295 100644 --- a/dev/README.md +++ b/dev/README.md @@ -24,11 +24,52 @@ De Formas a testar meu conhecimento em desenvolvimento de API, alinhei no presen - Cliente: Operações CRUD para gerenciar informações o Cliente. -## Instrução de uso -* ## EndPoints da API + ### Cliente -* -## Tecnologias Usadas -* +- GET /api/v1/clientes : Opter todos os cliente + +* GET /api/v1/clientes/{id} : opter um cliente por Id + +* GET /api/v1/clientes/maiorRiscos : Opter os 10 clientes com maior risco + +* POST /api/v1/clientes : Criar um novo cliente + +* PUT /api/v1/clientes :Actualizar um cliente + +* DELETE /api/v1/clientes : Remover um cliente + +## como usar + +- Clone este repositório. + +- Configure o ambiente de desenvolvimento e as dependências necessárias. + +- Execute a aplicação. + +- Comece a utilizar as funcionalidades da API. + +* Acesse a documentação da API (Swagger) para entender as rotas e funcionalidades disponíveis. + +![Alt text](image.png) + +## Tecnologias Usadas + +- .NET 7. + +- Asp.Net Core 7. + +- Entity Framework core. + +- SQLite. + +- CQRS. + +- AutoMapper. + +- Clean Architecture. + +* MediatR. + +* Minimal API. diff --git a/dev/image.png b/dev/image.png new file mode 100644 index 0000000000000000000000000000000000000000..644ac6a2fe06fd0307aa4d49013897997f50a39c GIT binary patch literal 32238 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 d`b~MA%1Ei$GJaA~qWS2wyQ|mN_%DxN_& Date: Fri, 10 Nov 2023 18:20:07 +0100 Subject: [PATCH 23/23] melhorando o restorno --- dev/OliSaude/OliSaude.Infra/DbOliSaude.db | Bin 20480 -> 20480 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm | Bin 32768 -> 32768 bytes dev/OliSaude/OliSaude.Infra/DbOliSaude.db-wal | Bin 16512 -> 0 bytes .../Papiline/PapelineExtension.cs | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db index f5891165b0e2ac4eb4095311c7a0fb257d1e521c..8133100dac135d2cab326c283bc2563c5d34e016 100644 GIT binary patch delta 334 zcmZozz}T>WaRZ})D(@`@K8_oV{F69t@W$}Gh0|wa z<0g*!B34cYOLI6$Z2 z0#*7Z=9Q-A0Nt0U;G7S1sF8u80fxJnf=h~0i;K~m1$4BDrJk9&p@Fff3Cvkg|5#WV bS?HMpon>lhlFi7;plZ#zd8U1u0HYuPr>;=> delta 210 zcmZozz}T>WaRZ})D&GzUUQQoI{z<&Icw>0p@|5y$aQE@~a0_uQ<1*(w$ms)u8ynR) zH~U!jv9J`daxzT5XM30N*5o~Qag+bsvDF(}8XM;@aWZIHGfFc$JNhOTCFd6_xTcgQ z7Nz7HT3TA_8XD>vm@61qS{a#I85-*unOHFSCgvm-WhOEk85kL($eSAJSs0lZS(=&R ck}@#QX5?g0wdRy%baoC%+&tetL4Z*J06`!$ssI20 diff --git a/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm b/dev/OliSaude/OliSaude.Infra/DbOliSaude.db-shm index 1d9785dd438a83d7d2ace469bc89e7a81d81d04f..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 100644 GIT binary patch delta 80 zcmZo@U}|V!;+1%$%K!t66BkO0TChv7nNGgVi7p`mlYpuI4+Il)WHxT_@ZPw=zytuE CK@2|(hA})iYwYmDYu>3nc3Oddr`twD>apnM2p}HCwJ4b?cQ$O z-3u`Yg717ID59@L5d07N#up;~1->bLDfqIY_)-v`xyxO8mmc_{l~SG~fv`_@zVm$M znTKWWyYl1XpE%85pLLuQj{Us*&-p+0eu)15`I%a}C%^g>E-W`|g{;yUMA?pYAMs?*98Ue|b+P1!F&nKWrIQWi0#z7)YFT@^`X zytj*vDfHab(8A77Fv)qKW`r1zqTaIWoNc+MK((ifPF{MeS(Rr=PL&9nWF*R>SP)-H zburP~rZQ!Ha!jV;04Ajfqfs~`L=}r}GzLjNeVF9Myq9FxbDLx|&|@AIu?SvnS5Gu}Ho>FTa=?@bMes8}#qfj|iw%nT8A(;XB^@(=WJIW0E(MFk1meLw#-U($-gPdt+~+{-4U-kg2Yo2n+-`_Xv#rZ2fj>c6 z4yt!D=gq1x=?@8BrwN-o3ZMR?BHR*?$cd4Ib-Juo% zxk;`1x=#Dur0nHWX~HIs{E&x~(djgYp@4A8=|{(1N49F`AWho}V3`2xy6G1AFxx?j z_klYqsIK;QOlrn^<{()alhBt`aurS|I|?yQb!zP54I09hN%jov^neg(u*25QVvkq&5{2g7TX+yAubkbtt!<7nLsIj)54VcCdiPEbyV1wDaAh z>rpipvqb{&AP$rdh+ z_RFdI``>JT-)P)%mgjH7dj#{hXS_#%=K>G*@c~Ce0!RP}AOR$R1RfHB0$j98S~uqE zmH|Vwb=T`o)z@I{*BvnVg9%g|d7|4gS()USnR=w7;L7AaXUh6bM~`$zeYAKkfad~u aE`a9(kH)zGydYjY*6$JExxfQ>kKkXCHx8Bn diff --git a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs index a6044b57..818893e7 100644 --- a/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs +++ b/dev/OliSaude/OliSaude.WebApi/Papiline/PapelineExtension.cs @@ -46,7 +46,7 @@ public static void Endpoints(this WebApplication app) { var result = await mediator.Send(command); if (!result.IsSucess) - throw new Exception("Erro ao salvar o cliente"); + return Results.BadRequest(result); return Results.Created($"/api/v1/cliente/{result.Data.Id}", result); }); @@ -55,7 +55,7 @@ public static void Endpoints(this WebApplication app) { var result = await mediator.Send(command); if (!result.IsSucess) - return Results.NotFound("Não foi possivel actualizar o cliente"); + return Results.NotFound(result); return Results.Ok(result); }); @@ -65,7 +65,7 @@ public static void Endpoints(this WebApplication app) { var result = await mediator.Send(command); if (!result.IsSucess) - return Results.BadRequest(); + return Results.Json(result, statusCode: result.StatusCode); return Results.Ok(result); }); }