Buscar

Aula_17 12 18 (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Treinamento em C# WebDeveloper
	
Aula
20
	
	Segunda-feira, 17 de Dezembro de 2018
	
	
	
Acesso a banco de dados com EntityFramework.
Desenvolvimento com Asp.Net WebApi
	
virtual
Permite que um método seja sobrescrito pelas 
subclasses que herdarem a classe principal.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Projeto.Repository.Context; //importando..
using System.Data.Entity; //importando..
namespace Projeto.Repository.Persistence
{
 public class BaseRepository<T>
 where T : class
 {
 public virtual void Inserir(T obj)
 {
 using (DataContext ctx = new DataContext())
 {
 ctx.Entry(obj).State = EntityState.Added; //insert
 ctx.SaveChanges(); //executando..
 }
 }
 public virtual void Atualizar(T obj)
 {
 using (DataContext ctx = new DataContext())
 {
 ctx.Entry(obj).State = EntityState.Modified; //update
 ctx.SaveChanges(); //executando..
 }
 }
 public virtual void Excluir(T obj)
 {
 using (DataContext ctx = new DataContext())
 {
 ctx.Entry(obj).State = EntityState.Deleted; //delete
 ctx.SaveChanges(); //executando..
 }
 }
 public virtual List<T> Consultar()
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Set<T>().ToList();
 }
 }
 public virtual T ConsultarPorId(int id)
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Set<T>().Find(id);
 }
 }
 }
}
Realizando uma sobrescrita do método 
"Consultar()" na classe ProdutoRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using Projeto.Entities;
using Projeto.Repository.Context;
namespace Projeto.Repository.Persistence
{
 public class ProdutoRepository
 : BaseRepository<Produto>
 {
 //sobrescrita do método Consultar()
 public override List<Produto> Consultar()
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Produto
 .Include(p => p.Estoque) //JOIN..
 .ToList();
 }
 }
 }
}
Realizando uma sobrescrita do método 
"ConsultarPorId()" na classe ProdutoRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using Projeto.Entities;
using Projeto.Repository.Context;
namespace Projeto.Repository.Persistence
{
 public class ProdutoRepository
 : BaseRepository<Produto>
 {
 //sobrescrita do método Consultar()
 public override List<Produto> Consultar()
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Produto
 .Include(p => p.Estoque) //JOIN..
 .ToList();
 }
 }
 //sobrescrita do método ConsultarPorId()
 public override Produto ConsultarPorId(int id)
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Produto
 .Include(p => p.Estoque) //JOIN
 .FirstOrDefault(p => p.IdProduto == id);
 }
 }
 }
}
Modificando a classe de modelo 
de consulta de produtos:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Projeto.Presentation.Models
{
 public class ProdutoConsultaModel
 {
 public int IdProduto { get; set; }
 public string Nome { get; set; }
 public decimal Preco { get; set; }
 public int Quantidade { get; set; }
 public int IdEstoque { get; set; }
 //Relacionamento..
 public EstoqueConsultaModel Estoque { get; set; }
 }
}
/ProdutoController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Projeto.Presentation.Models;
using Projeto.Business;
using Projeto.Entities;
using Projeto.Presentation.Utils;
namespace Projeto.Presentation.Controllers
{
 [RoutePrefix("api/produto")]
 public class ProdutoController : ApiController
 {
 [HttpPost] //verbo HTTP POST
 [Route("cadastrar")] //ENDPOINT -> /api/produto/cadastrar
 public HttpResponseMessage Cadastrar(ProdutoCadastroModel model)
 {
 //verificar se os dados da model passaram nas validações
 if (ModelState.IsValid)
 {
 try
 {
 Produto produto = new Produto();
 produto.Nome = model.Nome;
 produto.Preco = model.Preco;
 produto.Quantidade = model.Quantidade;
 produto.IdEstoque = model.IdEstoque;
 ProdutoBusiness business = new ProdutoBusiness();
 business.Cadastrar(produto);
 return Request.CreateResponse(HttpStatusCode.OK,
 "Produto cadastrado com sucesso.");
 }
 catch (Exception e)
 {
 return Request.CreateResponse
					 (HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);
 }
 }
 else
 {
 var erros = ValidationUtil.ObterErros(ModelState);
 return Request.CreateResponse(HttpStatusCode.BadRequest, erros);
 }
 }
 [HttpPut] //verbo HTTP PUT
 [Route("atualizar")] //ENDPOINT -> /api/produto/atualizar
 public HttpResponseMessage Atualizar(ProdutoEdicaoModel model)
 {
 //verificar se os dados da model passaram nas validações
 if (ModelState.IsValid)
 {
 try
 {
 Produto produto = new Produto();
 produto.IdProduto = model.IdProduto;
 produto.Nome = model.Nome;
 produto.Preco = model.Preco;
 produto.Quantidade = model.Quantidade;
 produto.IdEstoque = model.IdEstoque;
 ProdutoBusiness business = new ProdutoBusiness();
 business.Atualizar(produto);
 return Request.CreateResponse(HttpStatusCode.OK,
 "Produto atualizado com sucesso.");
 }
 catch (Exception e)
 {
 return Request.CreateResponse
					 (HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);
 }
 }
 else
 {
 var erros = ValidationUtil.ObterErros(ModelState);
 return Request.CreateResponse(HttpStatusCode.BadRequest, erros);
 }
 }
 [HttpDelete] //verbo HTTP DELETE
 [Route("excluir")] //ENDPOINT -> /api/produto/excluir
 public HttpResponseMessage Excluir(int id)
 {
 try
 {
 ProdutoBusiness business = new ProdutoBusiness();
 Produto produto = business.ConsultarPorId(id);
 //excluindo..
 business.Excluir(produto);
 return Request.CreateResponse(HttpStatusCode.OK,
 "Produto excluido com sucesso.");
 }
 catch (Exception e)
 {
 return Request.CreateResponse(HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);}
 }
 [HttpGet]
 [Route("consultar")]
 public HttpResponseMessage Consultar()
 {
 try
 {
 ProdutoBusiness business = new ProdutoBusiness();
 //declarando uma lista da model..
 List<ProdutoConsultaModel> lista 
				= new List<ProdutoConsultaModel>();
 //varrer os estoques obtidos da base
 foreach (Produto produto in business.Consultar())
 {
 ProdutoConsultaModel model = new ProdutoConsultaModel();
 model.Estoque = new EstoqueConsultaModel();
 model.IdProduto = produto.IdProduto;
 model.Nome = produto.Nome;
 model.Preco = produto.Preco;
 model.Quantidade = produto.Quantidade;
 model.IdEstoque = produto.IdEstoque;
 model.Estoque.IdEstoque = produto.Estoque.IdEstoque;
 model.Estoque.Nome = produto.Estoque.Nome;
 lista.Add(model); //adicionar na lista
 }
 return Request.CreateResponse(HttpStatusCode.OK, lista);
 }
 catch (Exception e)
 {
 return Request.CreateResponse(HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);
 }
 }
 [HttpGet]
 [Route("consultarporid")]
 public HttpResponseMessage ConsultarPorId(int id)
 {
 try
 {
 ProdutoBusiness business = new ProdutoBusiness();
 Produto produto = business.ConsultarPorId(id);
 ProdutoConsultaModel model = new ProdutoConsultaModel();
 model.Estoque = new EstoqueConsultaModel();
 model.IdProduto = produto.IdProduto;
 model.Nome = produto.Nome;
 model.Preco = produto.Preco;
 model.Quantidade = produto.Quantidade;
 model.IdEstoque = produto.IdEstoque;
 model.Estoque.IdEstoque = produto.Estoque.IdEstoque;
 model.Estoque.Nome = produto.Estoque.Nome;
 return Request.CreateResponse(HttpStatusCode.OK, model);
 }
 catch (Exception e)
 {
 return Request.CreateResponse(HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);
 }
 }
 }
}
Executando:
Voltando para o frontend Angular:
<!DOCTYPE html>
<html ng-app="appProduto">
<head>
 <meta charset="utf-8" />
 <title></title>
 <link href="../../Content/bootstrap.min.css" rel="stylesheet" />
</head>
<body class="container">
 <div id="carregamento" class="text-center">
 <img src="https://upload.wikimedia.org/wikipedia/commons/b/b1/Loading_icon.gif"/>
 </div>
 <div id="conteudo" style="display: none;">
 <h2>Consulta de Produtos</h2>
 <a href="/index.html">Página inicial</a>
 <hr />
 <div ng-controller="produtoConsulta">
 <!-- INICIO -->
 <div class="row">
 <div class="col-md-3">
 <label>Filtrar Produtos:</label>
 <input type="text" class="form-control"
 placeholder="Digite aqui" ng-model="filtro" />
 </div>
 <div class="col-md-3">
 <label>Ordenar Registros:</label>
 <select class="form-control" ng-model="ordenacao">
 <option value="">Selecione</option>
 <option value="IdProduto">Código</option>
 <option value="Nome">Nome do Produto</option>
 <option value="Preco">Preço</option>
 <option value="Quantidade">Quantidade</option>
 <option value="Estoque.Nome">
			Nome do Estoque</option>
 </select>
 </div>
 </div>
 <!-- FIM -->
 <br />
 <table class="table table-hover table-bordered"
 ng-init="consultar()">
 <thead>
 <tr>
 <th>Código</th>
 <th>Nome do Produto</th>
 <th>Preço</th>
 <th>Quantidade</th>
 <th>Total</th>
 <th>Nome do Estoque</th>
 <th>Operações</th>
 </tr>
 </thead>
 <tbody>
 <tr ng-repeat="p in produtos | filter : filtro 
				| orderBy : ordenacao">
 <td>{{p.IdProduto}}</td>
 <td>{{p.Nome}}</td>
 <td>{{p.Preco | currency : 'R$'}}</td>
 <td>{{p.Quantidade}}</td>
 <td>{{(p.Preco * p.Quantidade) | currency : 'R$'}}</td>
 <td>{{p.Estoque.Nome}}</td>
 <td>
 <button class="btn btn-primary btn-sm"
 data-target="#janelaedicao"
 data-toggle="modal"
 ng-click="obter(p.IdProduto)">
 Atualizar
 </button>
 <button class="btn btn-danger btn-sm"
 data-target="#janelaexclusao"
 data-toggle="modal"
 ng-click="obter(p.IdProduto)">
 Excluir
 </button>
 </td>
 </tr>
 </tbody>
 <tfoot>
 <tr>
 <td colspan="7">
 Quantidade de registros: 
				{{(produtos | filter : filtro).length}}
 </td>
 </tr>
 </tfoot>
 </table>
 <!-- JANELA DE EDIÇÃO -->
 <div id="janelaedicao" class="modal fade">
 <div class="modal-dialog">
 <div class="modal-content">
 <div class="modal-header bg-primary">
 <h3 class="text-white">Atualizar Produto</h3>
 </div>
 <div class="modal-body">
 <label>Código:</label>
 <input type="text" class="form-control"
 readonly="readonly"
 ng-model="produto.IdProduto" />
 <br />
 <label>Nome do Produto:</label>
 <input type="text" class="form-control"
 ng-model="produto.Nome" />
 <br />
 <label>Preço:</label>
 <input type="text" class="form-control"
 ng-model="produto.Preco" />
 <br />
 <label>Quantidade:</label>
 <input type="text" class="form-control"
 ng-model="produto.Quantidade" />
 <br />
 <label>Selecione o Estoque:</label>
 <select class="form-control" 
				ng-model="produto.IdEstoque"
 ng-init="consultarEstoques()">
 <option value="">Escolha uma opção</option>
 <option ng-repeat="e in estoques" 
					value="{{e.IdEstoque}}"
 ng-selected="produto.IdEstoque 
					== e.IdEstoque">
 {{e.Nome}}
 </option></select>
 <br />
 <div class="alert alert-primary" 
				ng-show="mensagemEdicao">
 	{{mensagemEdicao}}
 </div>
 </div>
 <div class="modal-footer">
 <button class="btn btn-info" data-dismiss="modal">
 Fechar Janela
 </button>
 <button class="btn btn-primary"
 ng-click="atualizar()">
 Atualizar Dados
 </button>
 </div>
 </div>
 </div>
 </div>
 <!-- FIM DA JANELA -->
 <!-- JANELA DE EXCLUSÂO -->
 <div id="janelaexclusao" class="modal fade">
 <div class="modal-dialog">
 <div class="modal-content">
 <div class="modal-header bg-danger">
 <h3 class="text-white">Excluir Produto</h3>
 </div>
 <div class="modal-body">
 Deseja realmente excluir este produto?
 <hr />
 Código: <strong>{{produto.IdProduto}}</strong>
 <br />
 Nome do Produto: 
				<strong>{{produto.Nome}}</strong>
 <br />
 Preço: <strong>{{produto.Preco}}</strong>
 <br />
 Quantidade: 
				<strong>{{produto.Quantidade}}</strong>
 <br />
 <br />
 <div class="alert alert-danger" ng-
				show="mensagemExclusao">
 {{mensagemExclusao}}
 </div>
 </div>
 <div class="modal-footer">
 <button class="btn btn-info" data-dismiss="modal">
 Fechar Janela
 </button>
 <button class="btn btn-danger"
 ng-click="excluir()">
 Excluir Estoque
 </button>
 </div>
 </div>
 </div>
 </div>
 <!-- FIM DA JANELA -->
 </div>
 </div> 
 <script src="../../Scripts/jquery-3.0.0.min.js"></script>
 <script src="../../Scripts/bootstrap.min.js"></script>
 <script src="../../Scripts/angular.min.js"></script>
 <script>
 $(document).ready(function () {
 setTimeout(
 function () {
 $("#carregamento").hide();
 $("#conteudo").show(1000);
 }, 2000); 
 });
 </script>
 <script>
 var app = angular.module('appProduto', []);
 app.controller('produtoConsulta',
 function ($scope, $http) {
 //função para executar o serviço de consulta na API
 $scope.consultar = function () {
 //executar o serviço da API..
 $http.get("http://localhost:51269/api/produto/consultar")
 .then(function (d) {
 //capturar o resultado (lista)
 $scope.produtos = d.data; //JSON ARRAY..
 })
 .catch(function (e) {
 console.log(e);
 })
 };
 //função para obter a consulta de estoques
 $scope.consultarEstoques = function () {
 $http.get("http://localhost:51269/api/estoque/consultar")
 .then(function (d) {
 $scope.estoques = d.data;
 })
 .catch(function (e) {
 console.log(e);
 });
 };
 //função para buscar 1 produto pelo id..
 $scope.obter = function (id) {
 $scope.mensagemEdicao = "";
 $scope.mensagemExclusao = "";
 $scope.produto = {}; //vazio..
 //executar o serviço da API..
 $http.get("http://localhost:51269/
			api/produto/consultarporid?id=" + id)
 .then(function (d) {
 $scope.produto = d.data;
 })
 .catch(function (e) {
 console.log(e);
 });
 };
 //função para atualizar os dados do produto..
 $scope.atualizar = function () {
 //executar o serviço da API..
 $http.put("http://localhost:51269
			/api/produto/atualizar", $scope.produto)
 .then(function (d) {
 $scope.mensagemEdicao = d.data;
 $scope.consultar();
 })
 .catch(function (e) {
 console.log(e);
 });
 };
 //função para excluir o produto selecionado..
 $scope.excluir = function () {
 //executar o serviço da API..
 $http.delete("http://localhost:51269/
			api/produto/excluir?id=" + $scope.produto.IdProduto)
 .then(function (d) {
 $scope.mensagemExclusao = d.data;
 $scope.consultar();
 })
 .catch(function (e) {
 console.log(e);
 });
 };
 })
 </script>
</body>
</html>
14

Outros materiais

Outros materiais