PetHealth-CVH / PetHealth

4 stars 1 forks source link

Criação das `Controllers` #22

Open Tiallysson opened 4 months ago

Tiallysson commented 4 months ago

@Tiallysson Adicionei a pasta Models 378020f @Tiallysson Adicionei linhas de código em Program.cs af789dd @Tiallysson Adicionei dados em UsuarioModel.cs ce63ffd @Tiallysson Adicionei dados em UsuarioModel.cs d01e7c6 @Tiallysson Adicionei o ./Models/ProdutosModel.cs 812c130 @Tiallysson Adicionei um HttpGet em ProdutosConstrollers.cs 1ec0ebc

Tiallysson commented 4 months ago

Criei a versão 1.0 do código


using Contexts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Models;
using Models.HttpResponse;

namespace Controllers
{
    [Route("api/[controller]")]
    [ApiController]

    public class ProdutosController : ControllerBase
    {
        private readonly PetHealthDbContext _contexto;

        public ProdutosController(PetHealthDbContext contexto)
        {
            _contexto = contexto;
        }

        [HttpGet("{idProduto}")]
        public async Task<ActionResult<ProdutosResponse>> ObterProdutoPelaId(Guid id)
        {
            try
            {
                var Produtos = await _contexto.Produtos
                                .FirstOrDefaultAsync(tb_produtos => tb_produtos.Id == id);

                if (Produtos == null)
                {
                    return NotFound();
                }

                new ProdutosResponse
                {
                    Id = Produtos.Id,
                    Nome_Produto = Produtos.Nome_Produto,
                    Descricao = Produtos.Descricao,
                    Quantidade = Produtos.Quantidade,
                    Preco = Produtos.Preco
                };

                return Ok(Produtos);
            }
            catch (Exception)
            {
                return StatusCode(500, "Não foi possível realizar a consulta.");
            }
        }
    }
}
Tiallysson commented 4 months ago

Criei a versão 1.0 do código

UsuariosController


using Contexts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Models.HttpResponse;
using Models;
using Models.HttpRequests;

namespace Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsuariosControllers : ControllerBase
    {
        private readonly PetHealthDbContext _contexto;
        public UsuariosControllers(PetHealthDbContext contexto)
        {
            _contexto = contexto;
        }
        // Rota "api/UsuariosControllers/{id}"
        // Ele retorna um objeto UsuarioResponse com informações do usuário com o ID fornecido
        [HttpGet("{idUsuarioQueEstaBuscando}")]
        public async Task<ActionResult<UsuariosResponse>> ObterPelaId(Guid idUsuarioQueEstaBuscando)
        {
            try
            {
                var usuarioQueEstaBuscando = await _contexto.Usuarios
                    .Include(tb_usuarios => tb_usuarios.Endereco)
                    .FirstOrDefaultAsync(tb_usuarios => tb_usuarios.Id == idUsuarioQueEstaBuscando);

                bool usuarioNaoEncontrado = usuarioQueEstaBuscando == null;

                if (usuarioNaoEncontrado)
                {
                    return NotFound();
                }

                return Ok(

                    new UsuariosResponse

                    {
                        Id = usuarioQueEstaBuscando.Id,
                        Nome = usuarioQueEstaBuscando.Nome,
                        Sobrenome = usuarioQueEstaBuscando.Sobrenome,
                        Endereco = new EnderecosResponse

                        {
                            Rua = usuarioQueEstaBuscando.Endereco.Rua,
                            Numero = usuarioQueEstaBuscando.Endereco.Numero,
                            Complemento = usuarioQueEstaBuscando.Endereco.Complemento,
                            Bairro = usuarioQueEstaBuscando.Endereco.Bairro,
                            Cidade = usuarioQueEstaBuscando.Endereco.Cidade,
                            Estado = usuarioQueEstaBuscando.Endereco.Estado,
                            CEP = usuarioQueEstaBuscando.Endereco.CEP
                        }
                    }
                );
            }
            catch (Exception)
            {
                return StatusCode(500, "Não foi possível realizar a consulta.");
            }

        }

        // Rota "api/UsuariosControllers/{id}"
        // Ele atualiza as informações do usuário com o ID fornecido 

        [HttpPut("{id}")]
        public async Task<IActionResult> AtualizarPorId(Guid id, [FromBody] UsuarioRequest request)
        {
            if (request == null)
            {
                return BadRequest("O corpo da requisição não pode estar vazio.");
            }

            var usuarioQueEstaBuscando = await _contexto.Usuarios.FindAsync(id);
            if (usuarioQueEstaBuscando == null)
            {
                return NotFound("Usuário não encontrado.");
            }

            // Atualize os campos do usuário existente com os dados do request
            usuarioQueEstaBuscando.Nome = request.Nome;
            usuarioQueEstaBuscando.Sobrenome = request.Sobrenome;
            usuarioQueEstaBuscando.Cpf = request.Cpf;

            // Salve as mudanças
            var resultado = await _contexto.AtualizarPorId(usuarioQueEstaBuscando);

            if (!resultado)
            {
                return StatusCode(500, "Ocorreu um problema ao atualizar o usuário.");
            }

            return NoContent(); // 204 No Content
        }
    }

}
wagnerluann commented 4 months ago

FornecedoresConstrollers.cs


using Contexts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Models;
using Models.HttpResponse;

namespace Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class FornecedoresControllers : ControllerBase
    {
        // Rota "api/FornecedoresControllers/{id}"
        // Ele retorna um objeto FornecedorResponse, que representa as informações de um fornecedor
        private readonly PetHealthDbContext _contexto;

        public FornecedoresControllers(PetHealthDbContext contexto)
        {
            _contexto = contexto;
        }

        [HttpGet("{idFornecedor}")]
        public async Task<ActionResult<FornecedorResponse>> ObterProdutoPelaId(Guid id)
        {
            try
            {
                var Fornecedor = await _contexto.Fornecedor
                                .FirstOrDefaultAsync(tb_fornecedores => tb_fornecedores.id == id);

                if (Fornecedor == null)
                {
                    return NotFound();
                }

                new FornecedorResponse
                {
                    Id = Fornecedor.id,
                    Razao = Fornecedor.Razao,
                    CNPJ = Fornecedor.CNPJ,
                    Telefone = Fornecedor.Telefone,
                    Email = Fornecedor.Email
                };

                return Ok(Fornecedor);
            }
            catch (Exception)
            {
                return StatusCode(500, "Não foi possível realizar a consulta.");
            }
        }
    }
}
wagnerluann commented 4 months ago

EnderecosConstrollers.cs


using Contexts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Models;
using Models.HttpRequests;
using Models.HttpResponse;

namespace Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class EnderecosControllers : ControllerBase
    {
        // Rota "api/EnderecosControllers/{id}"
        // Ele retorna as informações de um endereço com base no ID fornecido
          private readonly PetHealthDbContext _contexto;

        public EnderecosControllers (PetHealthDbContext contexto)
        {
            _contexto = contexto;
        }

        [HttpGet("{idFornecedor}")]

        public async Task<ActionResult<EnderecosResponse>> ObterProdutoPelaId(Guid id)

        {
            try
            {
                var Enderecos = await _contexto.Enderecos
                                .FirstOrDefaultAsync(tb_enderecos => tb_enderecos.Id == id);

                if (Enderecos == null)
                {
                    return NotFound();
                }

                new EnderecosResponse
                {
                            Rua = Enderecos.Rua,
                            Numero = Enderecos.Numero,
                            Complemento = Enderecos.Complemento,
                            Bairro = Enderecos.Bairro,
                            Cidade = Enderecos.Cidade,
                            Estado = Enderecos.Estado,
                            CEP = Enderecos.CEP
                };

                return Ok(Enderecos);
            }
            catch (Exception)
            {
                return StatusCode(500, "Não foi possível realizar a consulta.");
            }
        }

        // Rota "api/EnderecosControllers"
        // Ele cria um novo endereço com base no objeto Enderecos fornecido no corpo da requisição
        [HttpPost]
        public void Registrar([FromBody] EnderecosControllers enderecos)
        {

        }

        // Rota "api/EnderecosControllers/{id}"
        // Ele atualiza as informações de um endereço com base no ID fornecido
        [HttpPut("{id}")]
        public void AtualizarEnderecoId(Guid id)
        {

        }
    }
}
wagnerluann commented 4 months ago

CredenciaisControllers.cs


using Contexts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Models.HttpRequests;
using Models.HttpResponse;
using Models;

namespace Controllers
{

    [Route("api/[controller]")]
    [ApiController]
    public class CredenciaisControllers : ControllerBase
    {
        private readonly PetHealthDbContext _contexto;
        // Este é o construtor da classe CredenciaisControllers, que recebe o contexto do banco de dados como parâmetro
        public CredenciaisControllers(PetHealthDbContext contexto)
        {
            _contexto = contexto;
        }
        // Rota "api/CredenciaisControllers/autenticarusuario"
        // Ele autentica um usuário com base nas credenciais fornecidas no objeto CredencialRequest
        [HttpPost("autenticarusuario")]
        public void AutenticarUsuario(CredenciaisRequest credenciais) 
        {

        }

        // Rota "api/CredenciaisControllers/registrar"
        // Ele registra um novo usuário com base no objeto UsuarioRequest fornecido no corpo da requisição
        [HttpPost("registrar")]
        public async Task<ActionResult> Registrar(
            // Esse parâmetro representa a ficha de cadastro do usuário que 
            // será enviada no corpo da requisição [FromBody].
            [FromBody] UsuarioRequest registroUsuario
        )
        {
            // Esse techo de código representa o monitoramento do cadastro.
            var transacaoCadastro = await _contexto.Database.BeginTransactionAsync();

            try
            {
                // Nesse trecho do código é realizado o cadastro o endereço no banco de dados.
                var enderecos = new Models.Endereco

                // Verificar CredencialRequest, não contém referência
                {
                            Rua = registroUsuario.Endereco.Rua,
                            Numero = registroUsuario.Endereco.Numero,
                            Complemento = registroUsuario.Endereco.Complemento,
                            Bairro = registroUsuario.Endereco.Bairro,
                            Cidade = registroUsuario.Endereco.Cidade,
                            Estado = registroUsuario.Endereco.Estado,
                            CEP = registroUsuario.Endereco.CEP

                };
                _contexto.Enderecos.Add(enderecos);
                // Após realizar o cadastro do endereço no banco de dados é necessário confirmar a operação.
                await _contexto.SaveChangesAsync();

                registroUsuario.Endereco.Id = enderecos.Id;

                var usuario = new Usuario

                {
                    Nome            = registroUsuario.Nome,
                    Sobrenome       = registroUsuario.Sobrenome,
                    EnderecoId      = registroUsuario.Endereco.Id,
                    Cpf             = registroUsuario.Cpf
                };

                _contexto.Usuarios.Add(usuario);

                await _contexto.SaveChangesAsync();

                registroUsuario.Id = usuario.Id;

                _contexto.Credenciais.Add(new Credencial
                {
                    Email = registroUsuario.Credencial.Email,
                    Senha = registroUsuario.Credencial.Senha,
                    UsuarioId = registroUsuario.Id
                });

                await _contexto.SaveChangesAsync();

                await transacaoCadastro.CommitAsync();

                return StatusCode(201, new { id = registroUsuario.Id});

            }
            catch(Exception)
            {
                transacaoCadastro.Rollback();

                return StatusCode(500, "Não foi possível realizar o cadastro!");
            }
        }
    }
}
wagnerluann commented 4 months ago

ContatoControllers.cs


using Contexts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Models;
using Models.HttpRequests;

namespace Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ContatoControllers : ControllerBase
    {
        private readonly PetHealthDbContext _contexto;

        public ContatoControllers(PetHealthDbContext contexto)
        {
            _contexto = contexto;
        }
        // Rota "api/ContatoControllers/AddContato"
        // Ele adiciona um novo contato com base no objeto ContatoRequest fornecido no corpo da requisição
        [HttpPost("AddContato")]

        public void AddContato([FromBody] ContatoRequest contato)

        {
            // Aguardando verificação
        }
    }
}