Swagger en API

Instalar el paquete siguiente:

Install-Package Swashbuckle.AspNetCore -Version 6.6.2

Habilitar esto en program:

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}

APIs de ejemplo

https://jsonplaceholder.typicode.com/guide/

Vamos a consultar libros y artículos del nytimes. Aquí hay la lista de las apis:

https://developer.nytimes.com/apis

Yo me he creado una apikey: SFq0lnJwGzV4X8XyqV2kQvA3LgKAp3kN

Pero os podéis crear la vuestra.

Me gustaría que, desde el postman, accediéramos a la lista de los libros más vendidos y a los artículos de los tres últimos meses.

También podéis crear vuestra propia apikey y acceder, por ejemplo, a películas.

 

Ejercicio Pokemon

Vamos a crear una base de datos para almacenar mi colección de pokemons

Tendremos las siguientes tablas:

Categoría: id, nombre, descripcion

Pokemon: id, nombre,descripcion,tipo de energ´ía, categoría

Haremos un MVC que tenga un mantenimiento de la base de datos.

En el HomeController poned enlace al mantenimiento de categorías y al mantenimiento de pokemons.

Ejercicio controladores

using Microsoft.AspNetCore.Mvc;
using MVC01.Models;

namespace MVC01.Controllers
{
    public class CursoController : Controller
    {
        private readonly Contexto _context;

        public CursoController(Contexto context)
        {
            _context = context;
        }
        public IActionResult Index()
        {
            // Recuperar los datos de todos los cursos
            // Los vais a pasar a la vista
            // En la vista mostráis la información (id,nombre,descripcion)
            return View();
        }

        public IActionResult AddCurso()
            {
            // Llamar a una vista con un formulario
            // Para poner nombre y descripción
            return View();
        }
        public IActionResult NewCurso(Curso curso)
        {
            // Capturamos los datos del formulario
            // Y lo añadimos a la base de datos
            return View();
        }
    }
}

MVC + Consultas

Vamos a crear un controlador ConsultasController sobre la escuela. Tendrá las siguientes acciones:

Cursos

Nos mostrará la lista de cursos que tengan alumnos matriculados

Alumnos

Nos mostrará la lista de alumnos que estén matriculados en más de un curso

Direcciones
Nos mostrará la lista de alumnos que tengan más de una dirección

TotalPorCiudad
Nos mostrará el número de direcciones que tiene cada ciudad. Aquí tenemos una cadena y un número ¿Cómo lo haremos?

AlumnosCiudad
Nos mostrará los alumnos que sean de la ciudad que tiene más direcciones.

Como conectar

En program.cs

            // Add services to the container.
            builder.Services.AddControllersWithViews();
            // Añadimos la conexión al contexto
            builder.Services.AddDbContext<Contexto>(options =>
options.UseSqlServer("Data Source=.\\SQLEXPRESS;Initial Catalog=clase;Integrated Security=True;TrustServerCertificate=True"));
            var app = builder.Build();

En contexto.cs:

 public DbSet<Alumno> Alumnos { get; set; }
 public Contexto(DbContextOptions<Contexto> options) : base(options)
 {
 }

Pistas Poker

Poker

Pareja
trio
color
full
poker
escalera
ecalera de color

1.- Cuantas cartas repetidas tengo
(lo del diccionario del mus)
Si hay cinco unos (5 elementos)
SI hay un 2 y tres unos: pareja (4 elementos)
Si tengo dos 2 y un 1: Doble pareja (3 elementos)
SI tengo un 3 y dos 1: trío (3 elementos)
Si tengo un 4 y un 1: poker (2 elementos)

<2,3><7,2>
<5,3><1,2>

Crearía una función a la que le paso una mano y me devuelve el diccionario

2.- Color: son todas del mismo palo o no
Aprovechar el algoritmo del diccionario para que me agrupe por palo y no por valor
CUando el diccionario solo tenga un elemento tengo color

otro: cojo el palo de la primera carta y hago un bucle. Si alguna carta tiene un palo diferente devuelvo false

Crearía un función a la que le paso una mano y me devuelve true o false

3.- Escalera
Las cartas son consecutivas
Ordenar la mano (de menor a mayor)
Si cada carta es igual a la anterior +1 hay escalera, si no, no

Crearía una función a la que le paso una mano y me dice true o false si hay escalera o no

Cada cosa la probamos, y la probamos con datos creados por nosotros

 

Ejercicios sobre escuela

Insertad 10 alumnos llamados alumno1, alumno2…alumno10, con direcciones iguales (calle1 ciudad1,…) matriculados en cursos iguales (curso1,…)

Mostrad los cursos de los alumnos que tengan un ‘1’ en el nombre.

Matriculad a todos los alumnos en el curso de id ‘1’

Mostrad el total de alumnos matriculados por cada curso (nombre del curso y total alumnos).

Ordenadlo de mayor a menor.

Eliminad todas las matrículas del curso9.

Ejercicio EFCore

Cread las entidades en c# necesarias para implementar la siguiente base de datos:

Se desea crear una base de datos que contenga información sobre las revistas a las que estás suscrito o compras habitualmente. De cada revista, se pide su título, el ISSN (un código que identifica a la publicación), el número y el año de publicación. También se desea almacenar información de cada uno de los artículos publicados: el título, la página de inicio y la página de fin. Se asume que no hay dos artículos con el mismo título.

Cada artículo puede estar escrito por varios autores, de quienes interesa conocer su nombre, una dirección de correo electrónico y su país de nacimiento.

REVISTA     ARTÍCULO  AUTOR

Revista(1)—(N)Artículo(N)—(N)Autor

Revista: título, ISSN, número, año publicacion

Artículo: título, página inicio y fin

Autor: Nombre, email, país nacimiento

Autor-Artículo:

 

dotnet add package Microsoft.EntityFrameworkCore

dotnet add package Microsoft.EntityFrameworkCore.SqlServer # Para SQL Server dotnet add package Microsoft.EntityFrameworkCore.Tools

Prueba One to Many y Many to Many

Tenemos la tabla ‘Provincias’ con id y nombre
Y la tabla relacionada ‘Ciudades’ con id y nombre también.
Una provincia tiene varias y ciudades y una ciudad una sola provincia.

Añadimos la tabla cliente con id y nombre

Y una relación Many to Many entre cliente y ciudad