Skip to content

Aplicación Web desarrollada con el framework .NET MVC que utiliza PostgreSQL como motor de bases de datos

Notifications You must be signed in to change notification settings

informaticaort/postgres_test

Repository files navigation

🛍️ Sistema de Gestión de Productos

Aplicación web desarrollada con ASP.NET Core 8.0 y PostgreSQL que permite gestionar un catálogo de productos de manera sencilla y eficiente.

📋 Características

  • ✅ Listado de productos con información detallada (ID, Nombre, Precio)
  • ➕ Creación de nuevos productos con validación de datos
  • 🔒 Protección CSRF con validación de tokens anti-falsificación
  • 🏗️ Arquitectura limpia con separación de responsabilidades (MVC)
  • 💾 Acceso a datos encapsulado en una capa de modelo (patrón Repository simplificado)
  • ⚡ Operaciones asíncronas para mejor rendimiento
  • 🔐 Gestión segura de credenciales mediante inyección de dependencias y configuración externa

🛠️ Tecnologías Utilizadas

  • Framework: ASP.NET Core 8.0 MVC
  • Base de Datos: PostgreSQL
  • ORM/Micro-ORM: Dapper 2.1.66
  • Driver de PostgreSQL: Npgsql 9.0.4
  • Lenguaje: C# (.NET 8.0)
  • Frontend: Bootstrap, jQuery, Razor Views

📁 Estructura del Proyecto

postgres_test/
├── Controllers/
│   └── HomeController.cs          # Controlador principal
├── Models/
│   ├── Producto.cs                # Modelo de datos del producto
│   └── BD.cs                      # Capa de acceso a datos
├── Views/
│   ├── Home/
│   │   ├── Index.cshtml           # Vista listado de productos
│   │   └── Create.cshtml          # Vista formulario de creación
│   └── Shared/
│       └── _Layout.cshtml         # Layout principal
├── wwwroot/                       # Archivos estáticos (CSS, JS)
├── Program.cs                     # Punto de entrada de la aplicación
└── postgres_test.csproj           # Archivo de proyecto

🚀 Requisitos Previos

Antes de ejecutar el proyecto, asegúrate de tener instalado:

  1. .NET 8.0 SDK
  2. PostgreSQL (versión 12 o superior)
  3. Un editor de código (recomendado: Visual Studio Code o Visual Studio)

💾 Configuración de la Base de Datos

1. Crear la base de datos

CREATE DATABASE test_productos;

2. Conectarse a la base de datos

psql -U postgres -d test_productos

3. Crear la tabla de productos

CREATE TABLE productos (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    precio NUMERIC(10, 2) NOT NULL CHECK (precio > 0)
);

4. (Opcional) Insertar datos de prueba

INSERT INTO productos (nombre, precio) VALUES
    ('Laptop HP', 899.99),
    ('Mouse Logitech', 29.99),
    ('Teclado Mecánico', 149.99),
    ('Monitor LG 24"', 199.99),
    ('Auriculares Sony', 79.99);

⚙️ Configuración de la Aplicación

Configurar la cadena de conexión

La aplicación utiliza el sistema de configuración estándar de ASP.NET Core para gestionar las credenciales de forma segura.

Pasos para configurar (IMPORTANTE):

  1. Crear archivo de configuración de desarrollo: Crea el archivo appsettings.Development.json en la raíz del proyecto:
# Copia el archivo de ejemplo
cp appsettings.Development.example.json appsettings.Development.json
  1. Editar con tus credenciales: Abre appsettings.Development.json y configura tu cadena de conexión:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "PostgreSQL": "Host=localhost;Port=5432;Database=test_productos;Username=postgres;Password=TU_CONTRASEÑA_REAL"
  }
}

⚠️ IMPORTANTE: El archivo appsettings.Development.json está en .gitignore y NO se subirá al repositorio. Es seguro poner tus credenciales aquí.

  1. Archivo base (appsettings.json): Este archivo SÍ se sube al repositorio pero NO contiene credenciales sensibles, solo la estructura:
{
  "ConnectionStrings": {
    "PostgreSQL": ""
  }
}

🔄 Cómo funciona el sistema de configuración

ASP.NET Core carga los archivos en este orden (cada uno sobrescribe al anterior):

1️⃣ appsettings.json                    ← Base (sin credenciales) ✅ En Git
         ⬇️ (sobrescribe)
2️⃣ appsettings.Development.json        ← Desarrollo (con credenciales) 🚫 NO en Git
         ⬇️ (sobrescribe)  
3️⃣ Variables de entorno                ← Producción (opcional)

📁 Arquitectura de Archivos de Configuración

📁 Proyecto
├── appsettings.json                      ✅ En Git - SIN credenciales
├── appsettings.Development.json          🚫 NO en Git - CON credenciales (crear manualmente)
├── appsettings.Development.example.json  ✅ En Git - Plantilla sin credenciales
└── .gitignore                            ✅ Protege archivos sensibles

🌍 Diferentes Entornos

El entorno se detecta automáticamente:

  • Desarrollo local (dotnet run): Usa appsettings.Development.json
  • Producción: Usa appsettings.Production.json o variables de entorno

Para producción, puedes crear appsettings.Production.json (también ignorado por git) o usar variables de entorno.

Variables de entorno (Para producción)

En macOS/Linux:

export ASPNETCORE_ENVIRONMENT=Production
export ConnectionStrings__PostgreSQL="Host=localhost;Port=5432;Database=test_productos;Username=postgres;Password=TU_CONTRASEÑA"
dotnet run

En Windows (PowerShell):

$env:ASPNETCORE_ENVIRONMENT="Production"
$env:ConnectionStrings__PostgreSQL="Host=localhost;Port=5432;Database=test_productos;Username=postgres;Password=TU_CONTRASEÑA"
dotnet run

🔐 Arquitectura de Seguridad

La aplicación implementa las siguientes mejores prácticas:

Configuración por entornos: Usa el sistema estándar de ASP.NET Core
Inyección de dependencias: La clase BD se registra como servicio en Program.cs
Separación de configuración: Las credenciales están en archivos de configuración, no en código
Archivo .gitignore: Previene que appsettings.Development.json se suba al repositorio
Archivo de ejemplo: appsettings.Development.example.json sirve como plantilla sin credenciales reales
Carga automática: ASP.NET Core carga automáticamente el archivo según el entorno

Código en Program.cs:

// ASP.NET Core carga automáticamente appsettings.{Environment}.json
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddScoped<BD>(provider =>
{
    var configuration = provider.GetRequiredService<IConfiguration>();
    var connectionString = configuration.GetConnectionString("PostgreSQL");
    return new BD(connectionString);
});

Código en HomeController.cs:

public class HomeController : Controller
{
    private readonly BD _bd;

    // Inyección de dependencias - NO hay credenciales en el código
    public HomeController(BD bd)
    {
        _bd = bd;
    }
}

🏃‍♂️ Ejecutar la Aplicación

Opción 1: Usando la terminal

  1. Navega al directorio del proyecto:

    cd postgres_test
  2. Restaurar las dependencias:

    dotnet restore
  3. Ejecutar la aplicación:

    dotnet run
  4. Abre tu navegador en la URL que figura en la terminal

📖 Uso de la Aplicación

Página Principal (Index)

  • Muestra todos los productos en una tabla
  • Columnas: ID, Nombre, Precio
  • Botón para crear un nuevo producto

Crear Producto

  • Formulario con validación del lado del cliente y servidor
  • Campos:
    • Nombre: Obligatorio, máximo 100 caracteres
    • Precio: Obligatorio, debe estar entre 0.01 y 9,999,999.99

About

Aplicación Web desarrollada con el framework .NET MVC que utiliza PostgreSQL como motor de bases de datos

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published