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

Completado

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

Se necesita una clase model para representar una pizza del 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 va a ser un servicio de almacenamiento en caché en memoria local simple. En una aplicación real se recomienda usar una base de datos, como SQL Server, con Entity Framework Core.

Creación de un modelo de pizza

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

    mkdir Models
    

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

    Imagen de Visual Studio Code de la incorporación de un nuevo archivo a la carpeta Models.

    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 código siguiente a Models/Pizza.cs para definir una pizza. Guarde los cambios.

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

    Sugerencia

    Los métodos abreviados de teclado siguientes son útiles en el editor de Cloud Shell.

    Método abreviado de teclado Comando
    CTRL+V (Windows)
    ⌘+V (macOS)
    Pegar
    CTRL+S (Windows)
    ⌘+S (macOS)
    Guardar

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.

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

  2. Agregue el código siguiente a Services/PizzaService.cs para crear un servicio de datos de pizzas en memoria. Guarde los cambios.

    using ContosoPizza.Models;
    using System.Collections.Generic;
    using System.Linq;
    
    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 es un sencillo servicio de almacenamiento en caché de datos en memoria con dos pizzas de manera predeterminada que la API web va a usar 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 creador 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.

El controlador que creará en la siguiente unidad usará el modelo Pizza y la clase PizzaService.