Creando un API RESTFul Completo con Net Core para un Sistema CRM desde cero (1 de 5)
Primera entrega: Crea tus entidades, configura tu contexto y Swagger y migra hacia tu base de datos! Sé un crack con este curso práctico.

Esta será la primera entrada de una serie de 5 donde haremos un API con arquitectura RESTFul completa, desde cero, esto es prácticamente un curso completo, así que mantente atento a todas las 5 entregas, al final serás capaz de ser un backend developer que no le teme a las cosas 💪😉.

Para que no te pierdas, aquí están todas las entradas de la serie:

Qué aprenderás...

No es imprescindible, pero sí recomendable que tengas conocimientos al menos básicos en C# .Net y Entity Framework al menos, y si no, en esta otra entrada que hice puedes comenzar con un API más sencillito e irte familiarizando, además de eso lee, pero en serio, documéntate bastante, recursos tienes, y siempre está la vieja confiable: Youtube para cuando quieras complementar un tema.

Al terminar todo el proyecto aprenderás a utilizar las siguientes tecnologías, técnicas y herramientas:

  • .NET Core 5.0
  • Entity Framework Core
  • SQL Server
  • Swagger
  • Automapper
  • Postman
  • EF Code First

Modelo de Datos

Primero lo primero, este es el modelado de la base de datos, no te lo muestro para que lo repliques en SQL Server sino para que tengas una idea de lo que plasmaremos en este sistema de seguimiento de prospectos y contactos, también podríamos llamarlo CRM.

Modelo de datos, hecho en LucidChart

El diagrama fue hecho en LucidChart y está disponible desde aquí https://lucid.app/lucidchart/93fef983-40ef-492d-9360-2a0fda0ed13d/edit?invitationId=inv_9a4d7e6a-f091-4e41-957c-ed99a1bf4270

La técnica que aplicaremos para este proyecto es Entity Framework Code first, por lo que no tendrás que crear este modelado en SQL Server sino que trabajaremos como más comúnmente lo hacemos los desarrolladores, con código puro y duro, a partir de clases llamadas entidades y luego con migraciones pasaremos esas clases hacia tablas en la base de datos, no te preocupes si aún no entiendes bien eso, lo iremos aprendiendo sobre la marcha, pero no estaría de más que leyeras este artículo escrito por el buen José Manuel Alarcón.

Todo el proyecto será subido a mi Github y trataré en lo posible de hacer buenos commits siguiendo estos mismos pasos aquí descritos.

Creacion del proyecto y librerías iniciales

Crear un proyecto en Visual Studio 2019 (es la versión que usaré pero tambien podrías usar 2022) del tipo ASP .NET Core Web API con .Net 5 yo la llamaré CRM

Luego Instalar las librerías que necesitaremos, son 3 las que sí o sí deben siempre estar desde un principio:

  • Microsoft.EntityFrameworkCore.SqlServer → Proveedor de base de datos para EF
  • Microsoft.EntityFrameworkCore.Tools → Para ejecutar migraciones
  • Microsoft.AspNetCore.Mvc.NewtonsoftJson

Cadena de Conexión

Lo que sigue es configurar la cadena de conexión, para eso editamos el archivo appsettings.Development.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "connectionStrings": {
    "defaultConnection": "Data Source=.;Initial Catalog=CRM;Integrated Security=true"
  }
}

En tu caso ponle el nombre del servidor, un punto o localhost ya que es local, el nombre de la base de datos que quieras y seguridad de windows como yo o usuario y password de tu usuario de base de datos, como sa o de preferencia cualquier otro.

Creando las primeras entidades: AGENTES y PROSPECTOS

Este blog es como ninguno, aquí te explicaré bien las cosas importantes, como debe ser, recuerda dev, antes de empezar cualquier proyecto debes entender bien antes de cualquier otra cosa, las REGLAS DEL NEGOCIO y parte fundamental es entender el porqué de las cosas, por ejemplo qué son son Agentes? y qué son prospectos?

Agentes: Son nuestros vendedores, llámalo como quieras, las personas encargadas de contactar a nuestros posibles clientes.

Prospectos: Son nuestros clientes potenciales los cuales serán contactados por nuestros agentes, los capos de las ventas.

Un agente puede tener uno o varios prospectos asignados a él, y un prospecto puede estar siendo visitado o atendido por más de un agente.

Por el momento eso es lo que tienes que entender del modelo de datos, no nos compliquemos la vida.

Cada entidad será una clase en nuestro proyecto y por eso crearé la carpeta Entidades y en ella estas dos clases:

    public class Agente
    {
        [Key]
        public int Id { get; set; }

        [Required]
        [StringLength(70,ErrorMessage = "El campo {0} no debe exceder de {1} caracteres.")]
        public string Nombre { get; set; }
    }
    public class Prospecto
    {
        [Key]
        public int Id { get; set; }

        [Required]
        [StringLength(70, ErrorMessage = "El campo {0} no debe exceder de {1} caracteres.")]
        public string Nombre { get; set; }
        public string UrlPerfil { get; set; }
    }

Clase ApplicationDbContext

En Entity Framework hay un concepto muy importante llamado Contexto, y el contexto no es más que una clase muy importante que servirá de nexo entre nuestra sistema de gestión de base de datos y nuestra aplicación. Es más complejo que eso pero en términos muy simples así es.

Entonces en el directorio del proyecto creamos la siguiente clase:

    public class ApplicationDBContext : DbContext
    {
        public ApplicationDBContext(DbContextOptions options) : base(options)
        {

        }
        public DbSet<Agente> Agentes { get; set; }
        public DbSet<Prospecto> Prospectos { get; set; }
    }

Configurando Startup

Actualizamos la clase Startup para configurar nuestro contexto y también el uso de Swagger:

Hay dos métodos en esta clase que actualizaremos primero el ConfigureServices

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddDbContext<ApplicationDBContext>(options =>
                {
                    options.UseSqlServer(Configuration.GetConnectionString("defaultConnection"));
                }
            );

            var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
            var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);

            services.AddSwaggerGen(config =>
            {
                config.SwaggerDoc("v1",
                    new Microsoft.OpenApi.Models.OpenApiInfo() //Swashbuckle.AspNetCore.Swagger.info() se usa en versiones anteriores
                    {
                        Title = "Ejemplo de swagger",
                        Description = "Esta es una documentación de swagger, aquí tambien puede ir información necesaria para utilizar el Api, etc..."
                    }
                );
                config.IncludeXmlComments(xmlPath);
            });
        }

Luego el Configure:

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "CRM v1"));
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

            //Configuración de middleware SWAGGER
            app.UseSwagger();
            app.UseSwaggerUI(config =>
            {
                config.SwaggerEndpoint("/swagger/v1/swagger.json", "API SWAGGER!");
                config.RoutePrefix = ""; //para evitar problemas con la ruta en la que se lanza la aplicación al correr el proyecto
            }
            );
        }

Ejecutar primera migración

Compila el proyecto y resuelve cualquier error si es que lo tienes.

Abre la Consola del administrador de paquetes y ejecuta uno después de otro, estos dos comandos

add-migration Initial

update-database

Si no hay errores se ha debido migrar tus entidades hacia la base de datos.

El proyecto hasta el momento va quedando así:

Y si te fijas en el Management Studio vemos que ya tenemos 2 de nuestras tablitas, genial! 😎

Por ahora nos vamos a quedar aquí, la próxima entrada continuaremos con la segunda parte de estas 5 geniales entregas donde serás todo un capo del backend con .Net Core y otras tecnologías que se usan mucho en el trabajo real 😉

Próxima entrega: Nuestro primer controlador y mapeo con Automapper.

No te la pierdas 💪 estará que quema 🔥

No la pienses tanto, simplemente HAZ las cosas crack 😉

Si esta entrada te ha encantado compártela crack! 😊

Estoy más que seguro que a muchos le ayudará, como a ti.

2 comentarios en «Creando un API RESTFul Completo con Net Core para un Sistema CRM desde cero (1 de 5)»

Deja una respuesta

Tu dirección de correo electrónico no será publicada.