Ejercicio: Adición de un almacén de datos

Completado

Antes de empezar a implementar una API web para pizzas, es necesario tener un almacén de datos en el que puede realizar operaciones.

Necesita una clase model para representar una pizza en el inventario. El modelo contiene propiedades que representan las características de una pizza. El modelo se usa para pasar datos en la API web y para conservar opciones de pizza en el almacén de datos.

En esta unidad, ese almacén de datos es un servicio de almacenamiento en caché en memoria local simple. En una aplicación real se consideraría el uso de una base de datos, como SQL Server, con Entity Framework Core.

Creación de un modelo de pizza

  1. Ejecute el siguiente comando para crear una carpeta Models:

    mkdir Models
    

    Seleccione la carpeta Models en Visual Studio Code y agregue un nuevo archivo de nombre Pizza.cs.

    Captura de pantalla de la adición de un nuevo archivo a la carpeta Models en Visual Studio Code.

    La raíz del proyecto ahora contiene un directorio Models con un archivo Pizza.cs vacío. El nombre del directorio Models es una convención. El nombre del directorio procede de la arquitectura Modelo-Vista-Controlador que usa la API web.

  2. Agregue el siguiente código a Models/Pizza.cs y guarde los cambios. Esta clase define una pizza.

    namespace ContosoPizza.Models;
    
    public class Pizza
    {
        public int Id { get; set; }
        public string? Name { get; set; }
        public bool IsGlutenFree { get; set; }
    }
    

Incorporación de un servicio de datos

  1. Ejecute el comando siguiente para crear una carpeta Services.

    mkdir Services
    

    Seleccione la carpeta en Visual Studio Code y agregue un nuevo archivo de nombre PizzaService.cs.

    Captura de pantalla de Visual Studio Code de la incorporación de un nuevo archivo a la carpeta Services.

  2. Agregue el siguiente código a Services/PizzaService.cs y guarde los cambios. Este código crea un servicio de datos de pizza en memoria.

    using ContosoPizza.Models;
    
    namespace ContosoPizza.Services;
    
    public static class PizzaService
    {
        static List<Pizza> Pizzas { get; }
        static int nextId = 3;
        static PizzaService()
        {
            Pizzas = new List<Pizza>
            {
                new Pizza { Id = 1, Name = "Classic Italian", IsGlutenFree = false },
                new Pizza { Id = 2, Name = "Veggie", IsGlutenFree = true }
            };
        }
    
        public static List<Pizza> GetAll() => Pizzas;
    
        public static Pizza? Get(int id) => Pizzas.FirstOrDefault(p => p.Id == id);
    
        public static void Add(Pizza pizza)
        {
            pizza.Id = nextId++;
            Pizzas.Add(pizza);
        }
    
        public static void Delete(int id)
        {
            var pizza = Get(id);
            if(pizza is null)
                return;
    
            Pizzas.Remove(pizza);
        }
    
        public static void Update(Pizza pizza)
        {
            var index = Pizzas.FindIndex(p => p.Id == pizza.Id);
            if(index == -1)
                return;
    
            Pizzas[index] = pizza;
        }
    }
    

    Este servicio proporciona un sencillo servicio de almacenamiento en caché de datos en memoria con dos pizzas de forma predeterminada. Nuestra API web usa ese servicio con fines de demostración. Cuando se detiene y se inicia la API web, la caché de datos en memoria se restablece a las dos pizzas predeterminadas del constructor de PizzaService.

Compilación del proyecto de API web

Ejecute el siguiente comando para compilar la aplicación:

dotnet build

La compilación se ejecuta correctamente sin advertencias. Si se produce un error en la compilación, compruebe la salida con el fin de obtener información para solucionar problemas.

En la unidad siguiente, creará un controlador que usará el modelo Pizza y la clase PizzaService.