diff --git a/src/Supermarket.API/Controllers/CategoriaController.cs b/src/Supermarket.API/Controllers/CategoriaController.cs index 184e821..88eaab8 100644 --- a/src/Supermarket.API/Controllers/CategoriaController.cs +++ b/src/Supermarket.API/Controllers/CategoriaController.cs @@ -19,25 +19,12 @@ public class CategoriaController : ControllerBase /// Metodo contructor de la clase /// /// - public CategoriaController(ICategoriaRepo CategoriaContexto) + public CategoriaController(ICategoriaRepo CategoriaContext) { - context = CategoriaContexto; + context = CategoriaContext; } - // GET api/values - [HttpGet] - - //Secuencial - public ActionResult> Get() - { - //return new string[] { "value1", "value2" }; - /// - /// Retorna lista de categoria - /// - /// - return context.GetCategorias().ToList(); - } - //Asincrona --> Usa paralelismo en el servidor + [HttpGet] public async Task> GetAsync() { @@ -50,9 +37,36 @@ public async Task> GetAsync() // GET api/values/5 [HttpGet("{id}")] - public ActionResult FindCategoriaById(int id) + public async Task HallarCategoriaById(int id) + { + Categoria resultado = await context.GetCategoriasAsyncById(id); + return resultado; + } + + [HttpPost] + public async Task crearCategoria([FromBody] Categoria categoria) + { + if(!ModelState.IsValid) + { + return BadRequest(ModelState); + } + context.crearCategoria(categoria); + var guardadoOk = await context.guardarCategoria(categoria); + return Ok(); + } + + //DELETE api/categoria/1 + [HttpDelete("{id}")] + public async Task eliminarCategoria(int id) { - return "value"; + Categoria existe = await context.GetCategoriasAsyncById(id); + if(existe == null) + { + return NotFound(); + } + context.eliminarCategoria(existe); + var guardadoOk = await context.guardarCategoria(existe); + return Ok(); } } diff --git a/src/Supermarket.API/Dominio/Modelos/Producto.cs b/src/Supermarket.API/Dominio/Modelos/Producto.cs index 53d6add..0cab9d5 100644 --- a/src/Supermarket.API/Dominio/Modelos/Producto.cs +++ b/src/Supermarket.API/Dominio/Modelos/Producto.cs @@ -1,22 +1,29 @@ +using System; +using System.Net.Http.Headers; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; namespace Supermarket.API.Dominio.Modelos { public class Producto { + [Key] /// /// Contiene el id del producto /// /// public int id { get; set;} + + [Required] /// /// Contiene el nombre del producto /// /// - public string Nombre {get; set;} + public string nombre {get; set;} /// /// Contiene la cantidad de producto /// /// - public int CantidadxPaquete {get; set;} + public int cantidadxPaquete {get; set;} //public EUnidadDeMedida unidadDeMedida {get; set;} /// /// Contiene el Id de la categoria a la que pertenece el producto diff --git a/src/Supermarket.API/Dominio/Persistencia/SupermarketApiContext.cs b/src/Supermarket.API/Dominio/Persistencia/SupermarketApiContext.cs index cd82b33..442e45a 100644 --- a/src/Supermarket.API/Dominio/Persistencia/SupermarketApiContext.cs +++ b/src/Supermarket.API/Dominio/Persistencia/SupermarketApiContext.cs @@ -8,32 +8,53 @@ public class SupermarketApiContext : DbContext ///constructor public SupermarketApiContext(DbContextOptions options) : base(options) { - PoblarBase(); + //PoblarBase(); Database.EnsureCreated(); } //Tablas "props de la clase" public DbSet categorias {get; set;} - public DbSet productos {get; set;} + public DbSet productos {get; set;} - //Seed de la base(semillas de informacion) -- BD en memoria - public void PoblarBase() + /// + /// Metodo indicado para definir la estructura de la BD + /// + protected override void OnModelCreating(ModelBuilder builder) { - this.categorias.Add( - new Categoria{ - id = 1, - nombre = "Categoria 1", - } - ); + //Fluent API + builder.Entity().ToTable("Categorias"); + builder.Entity().HasKey(categoria => categoria.id); + builder.Entity().Property(categoria => categoria.id).ValueGeneratedOnAdd(); + builder.Entity().Property(categoria => categoria.nombre).HasColumnName("NombreCompleto"); + builder.Entity() + .Property(categoria => categoria.nombre) + .IsRequired() + .HasMaxLength(30); - this.categorias.Add( - new Categoria{ - id = 2, - nombre = "Categoria 2", - } + builder.Entity().HasData( + new Categoria(){ id =1, nombre = "Categoria 1" }, + new Categoria(){ id =2, nombre = "Categoria 2" }, + new Categoria(){ id =3, nombre = "Categoria 3" } ); - //commit - this.SaveChanges(); } + //Seed de la base(semillas de informacion) -- BD en memoria + //public void PoblarBase() + //{ + // this.categorias.Add( + // new Categoria{ + // id = 1, + // nombre = "Categoria 1", + //} + //); + + //this.categorias.Add( + //new Categoria{ + // id = 2, + // nombre = "Categoria 2", + //} + //); + //commit + //this.SaveChanges(); + //} } } \ No newline at end of file diff --git a/src/Supermarket.API/Dominio/Repositorios/CategoriaRepo.cs b/src/Supermarket.API/Dominio/Repositorios/CategoriaRepo.cs index 6b4e37c..e99eeae 100644 --- a/src/Supermarket.API/Dominio/Repositorios/CategoriaRepo.cs +++ b/src/Supermarket.API/Dominio/Repositorios/CategoriaRepo.cs @@ -19,22 +19,29 @@ public CategoriaRepo(SupermarketApiContext apicontext) db = apicontext; } - /// - /// Excepcion de FinsCategoriaById - /// - /// - /// + public void crearCategoria(Categoria categoria) + { + db.categorias.AddAsync(categoria); + } - /// - /// Devuelve lista de Categorias - /// - /// - public IEnumerable GetCategorias() + public void editarCategoria(int id, Categoria categoria) { - IEnumerable lista = db.categorias.ToList(); - return lista; + db.Entry(categoria).State = EntityState.Modified; + db.categorias.Update(categoria); } + public void eliminarCategoria(Categoria categoria) + { + db.categorias.Remove(categoria); + } + + public async Task guardarCategoria(Categoria categoria) + { + await db.SaveChangesAsync(); + return categoria; + } + + /// /// Metodo Asincrono /// Devuelve lista de Categorias @@ -46,9 +53,11 @@ public async Task> GetCategoriasAsync() return lista; } - public Categoria FindCategoriaById(int id) + public async Task GetCategoriasAsyncById(int id) { - throw new System.NotImplementedException(); + Categoria resultado = await db.categorias.FindAsync(id); + return resultado; } + } } \ No newline at end of file diff --git a/src/Supermarket.API/Dominio/Repositorios/ICategoriaRepo.cs b/src/Supermarket.API/Dominio/Repositorios/ICategoriaRepo.cs index d7e6562..15895ea 100644 --- a/src/Supermarket.API/Dominio/Repositorios/ICategoriaRepo.cs +++ b/src/Supermarket.API/Dominio/Repositorios/ICategoriaRepo.cs @@ -6,13 +6,6 @@ namespace Supermarket.API.Dominio.Repositorios { public interface ICategoriaRepo { - /// - ///Metodo Sincrono - /// Devuelve la lista de categorias desde la base de datos - /// - /// - IEnumerable GetCategorias(); - /// /// Permite obtener lista categorias/Metodo Asincrono /// @@ -24,6 +17,25 @@ public interface ICategoriaRepo /// /// Identificador de la categoria /// - Categoria FindCategoriaById(int id); + Task GetCategoriasAsyncById(int id); + + /// + /// Metodo que permite la creacion de una categoria, recibe como parametro una instancia de tipo Categoria + /// + /// + void crearCategoria(Categoria categoria); + /// + /// Metodo para editar una categoria, recibe una Categoria como parametro + /// + /// + void editarCategoria(int id, Categoria categoria); + /// + /// Metodo de eliminacion de una categoria, Recibe una instancia de + /// tipo Categoria como parametro + /// + /// + void eliminarCategoria(Categoria categoria); + + Task guardarCategoria(Categoria categoria); } } \ No newline at end of file