diff --git a/README.md b/README.md
index 3cd3458..b1bc40f 100644
--- a/README.md
+++ b/README.md
@@ -1,133 +1,168 @@
# Sistema Mercadía - Gestión de Espacios Comerciales
+## Descripción
+
Sistema web para la gestión de espacios comerciales en tiendas Mercadía del Grupo Iconn. Permite digitalizar el proceso de asignación de espacios a proveedores dentro de las tiendas.
-## Características Principales
-
-- **Arquitectura MVC** con Spring Boot y Thymeleaf
-- **Interfaz responsiva** y sencilla para uso en computadoras y dispositivos móviles
-- **Sistema de roles** (Administrador, Comercial, Tienda)
-- **CRUD completo** de proveedores y formularios
-- **Validación** de campos obligatorios
-- **Búsqueda y filtrado** avanzado
-- **Reportes** por tienda y proveedor
-- **Seguridad** con autenticación, sesiones y encriptación de contraseñas
-- **Base de datos PostgreSQL**
-
-## Tecnologías Utilizadas
-
-- **Java 17**
-- **Spring Boot 3.5.4**
-- **Spring Security 6**
-- **Spring Data JPA**
-- **Thymeleaf**
-- **PostgreSQL**
-- **Bootstrap 5.3.0**
-- **Maven**
-
-## Requisitos Previos
-
-1. **Java 17** o superior
-2. **PostgreSQL 12** o superior
-3. **Maven 3.6** o superior
-
-## Configuración de la Base de Datos
-
-1. Crear la base de datos en PostgreSQL:
-```sql
-CREATE DATABASE mercadia_db;
-CREATE USER mercadia_user WITH PASSWORD 'mercadia_password';
-GRANT ALL PRIVILEGES ON DATABASE mercadia_db TO mercadia_user;
+### Problema Identificado
+
+Actualmente, el proceso de gestión y asignación de espacios comerciales a proveedores se realiza manualmente, lo que conlleva:
+- Duplicidad de información
+- Dificultad para rastrear acuerdos comerciales
+- Falta de visibilidad sobre espacios disponibles
+- Procesos administrativos lentos e ineficientes
+
+### Solución
+
+Mercadía digitaliza todo el proceso mediante:
+- Registro centralizado de proveedores
+- Control de espacios comerciales por tienda
+- Gestión de formularios digitales
+- Sistema de roles específicos para cada nivel operativo
+- Reportes y análisis en tiempo real
+
+## Tabla de Contenidos
+
+- [Arquitectura](#arquitectura)
+- [Requerimientos](#requerimientos)
+- [Instalación](#instalación)
+- [Configuración](#configuración)
+- [Uso](#uso)
+- [Pruebas](#pruebas-y-cicd)
+- [Despliegue](#-despliegue-en-producción)
+- [Contribución](#contribución)
+- [Licencia](#licencia)
+- [Contacto](#contacto)
+
+## Arquitectura
+
+El sistema Mercadía sigue una arquitectura MVC (Modelo-Vista-Controlador) implementada con Spring Boot:
+
+- **Modelo**: Entidades JPA para la persistencia de datos
+- **Vista**: Thymeleaf + Bootstrap para la interfaz de usuario
+- **Controlador**: Spring MVC para la lógica de negocio
+
+La arquitectura se compone de las siguientes capas:
+1. **Capa de Presentación**: Thymeleaf + Bootstrap
+2. **Capa de Controladores**: Spring MVC
+3. **Capa de Servicios**: Spring Services
+4. **Capa de Persistencia**: Spring Data JPA + PostgreSQL
+
+### Diagrama de Arquitectura
+
+```mermaid
+flowchart TD
+ Client[Cliente Web] --> FE[Frontend - Thymeleaf + Bootstrap]
+ FE --> Controller[Controladores Spring MVC]
+ Controller --> Service[Servicios de Negocio]
+ Service --> Repository[Repositorios JPA]
+ Repository --> DB[(PostgreSQL/Supabase)]
+
+ Security[Spring Security] --> Controller
+ Config[Configuración] --> Service
```
-2. Ajustar la configuración en `src/main/resources/application.properties` si es necesario:
-```properties
-spring.datasource.url=jdbc:postgresql://localhost:5432/mercadia_db
-spring.datasource.username=mercadia_user
-spring.datasource.password=mercadia_password
-```
+## Requerimientos
-## Instalación y Ejecución
+### Requerimientos de Servidor
-1. **Clonar el repositorio** (si corresponde) o descargar el código fuente
+- **Servidor de Aplicación**: Compatible con Servlet 6.0+ (Tomcat embebido incluido)
+- **Servidor Web**: Apache, Nginx o similar para producción
+- **Base de Datos**: PostgreSQL 12+
+- **JDK**: Java 17+
+- **Memoria**: Mínimo 512MB RAM (1GB+ recomendado)
+- **Almacenamiento**: 500MB+ para la aplicación y logs
-2. **Compilar el proyecto**:
-```bash
-./mvnw clean compile
-```
+### Dependencias Principales
-3. **Ejecutar el proyecto**:
-```bash
-./mvnw spring-boot:run
-```
+- **Spring Boot**: 3.3.2
+- **Spring Security**: 6
+- **Spring Data JPA**: Incluido en Spring Boot
+- **Thymeleaf**: Incluido en Spring Boot
+- **PostgreSQL Driver**: Runtime
+- **Bootstrap**: 5.3.0 (WebJars)
+- **Maven**: 3.6+ (Gestión de dependencias)
-4. **Acceder al sistema**:
- - URL: http://localhost:8080/mercadia
- - El sistema se ejecuta en el puerto 8080 con el contexto `/mercadia`
+## Instalación
-## Pruebas y CI/CD
+### Ambiente de Desarrollo
-### Ejecutar Tests Localmente
+1. **Requisitos previos**:
+ - Java 17+
+ - Maven 3.6+
+ - PostgreSQL 12+
+ - Git
-```bash
-# Ejecutar todos los tests
-./mvnw test
+2. **Clonar el repositorio**:
+ ```bash
+ git clone https://github.com/alexpardox/mercaproject.git
+ cd mercaproject
+ ```
-# Ejecutar tests específicos
-./mvnw test -Dtest=ProveedorTest
+3. **Configurar la base de datos PostgreSQL**:
+ ```sql
+ CREATE DATABASE mercadia_db;
+ CREATE USER mercadia_user WITH PASSWORD 'tu_contraseña_segura';
+ GRANT ALL PRIVILEGES ON DATABASE mercadia_db TO mercadia_user;
+ ```
-# Ejecutar tests con reportes
-./mvnw clean test jacoco:report
-```
+4. **Configurar variables de entorno**:
+ Crea un archivo `.env` en la raíz del proyecto (no incluirlo en Git):
+ ```env
+ DB_URL=jdbc:postgresql://localhost:5432/mercadia_db
+ DB_USERNAME=mercadia_user
+ DB_PASSWORD=tu_contraseña_segura
+ SPRING_PROFILES_ACTIVE=dev
+ ```
+
+5. **Compilar el proyecto**:
+ ```bash
+ ./mvnw clean compile
+ ```
+
+6. **Ejecutar la aplicación en modo desarrollo**:
+ ```bash
+ ./mvnw spring-boot:run
+ ```
-### Integración Continua con Travis CI
+7. **Acceder a la aplicación**:
+ - URL: http://localhost:8080/mercadia
+ - Credenciales predeterminadas: admin/password
-Este proyecto está configurado con Travis CI para ejecutar automáticamente las pruebas en cada push y pull request.
+## Configuración
-**Configuración Travis CI:**
-- ✅ **Archivo configurado**: `.travis.yml`
-- ✅ **Tests automáticos**: Se ejecutan en Java 17
-- ✅ **Base de datos de prueba**: H2 en memoria
-- ✅ **Notificaciones**: Email en fallos
+### Archivos de Configuración
-**Estados de Build:**
-- [](https://app.travis-ci.com/alexpardox/mercaproject)
+- **`application.properties`**: Configuración principal
+- **`application-dev.properties`**: Configuración para desarrollo
+- **`application-production.properties`**: Configuración para producción
+- **`.env`**: Variables de entorno (no incluir en Git)
+- **`system.properties`**: Configuración para Heroku (versión de Java)
+- **`Procfile`**: Configuración para Heroku (comandos de inicio)
-**Para configurar Travis CI en tu fork:**
+### Configuración de Base de Datos
-1. **Conectar a Travis CI:**
- - Ve a [travis-ci.com](https://travis-ci.com)
- - Inicia sesión con tu cuenta de GitHub
- - Autoriza Travis CI
- - Activa el repositorio `mercaproject`
+La aplicación usa PostgreSQL para todos los entornos. Configura las siguientes variables:
-2. **Variables de entorno (opcional):**
- ```bash
- # En la configuración de Travis CI del repositorio
- DB_URL=jdbc:h2:mem:testdb
- DB_USERNAME=sa
- DB_PASSWORD=
- ```
+- `DB_URL`: URL de conexión a PostgreSQL
+- `DB_USERNAME`: Usuario de la base de datos
+- `DB_PASSWORD`: Contraseña de la base de datos
-3. **Badge en README:**
- ```markdown
- [](https://app.travis-ci.com/TU_USUARIO/mercaproject)
- ```
+### Configuración de Seguridad
+
+- `JWT_SECRET`: Clave secreta para la generación de tokens JWT
+- `JWT_EXPIRATION`: Tiempo de expiración del token en milisegundos
-### Tests Incluidos
+### Configuración de Perfiles
-- **Tests de Entidad**: `ProveedorTest` - Validación del modelo de datos
-- **Tests de Integración**: `MercaApplicationTests` - Carga del contexto Spring
-- **Tests Básicos**: `BasicIntegrationTest` - Validaciones fundamentales
+- **`dev`**: Para desarrollo local
+- **`production`**: Para entorno de producción (Heroku)
-**Cobertura de Tests:**
-- ✅ Modelo de Proveedor: Estados, validaciones, constructores
-- ✅ Contexto de Spring: Carga de aplicación y dependencias
-- ✅ Configuración de Base de Datos: H2 para tests, PostgreSQL para producción
+## Uso
-## Usuarios de Prueba
+### Usuarios Predefinidos
-El sistema incluye usuarios de prueba que se crean automáticamente:
+El sistema inicializa automáticamente los siguientes usuarios (solo si no existen):
| Usuario | Contraseña | Rol | Descripción |
|---------|------------|-----|-------------|
@@ -135,6 +170,55 @@ El sistema incluye usuarios de prueba que se crean automáticamente:
| `comercial` | `password` | COMERCIAL | Gestión de formularios y proveedores |
| `tienda001` | `password` | TIENDA | Captura de formularios (Tienda TDA001) |
+### Funcionalidades por Rol
+
+#### Administrador
+- Gestión completa de usuarios
+- Gestión completa de proveedores
+- Gestión completa de formularios
+- Acceso a todos los reportes
+- Configuración del sistema
+
+#### Comercial
+- Visualización de todos los formularios
+- Gestión de proveedores
+- Reportes por tienda y proveedor
+- Edición de formularios de cualquier tienda
+
+#### Tienda
+- Captura de formularios para su tienda asignada
+- Visualización de formularios propios
+- Consulta de proveedores
+- Dashboard con estadísticas de su tienda
+
+## Pruebas y CI/CD
+
+### Ejecutar Tests Manualmente
+
+```bash
+# Ejecutar todos los tests
+./mvnw test
+
+# Ejecutar tests específicos
+./mvnw test -Dtest=ProveedorTest
+
+# Ejecutar tests con reportes
+./mvnw clean test jacoco:report
+```
+
+### Integración Continua con GitHub Actions
+
+Este proyecto está configurado con GitHub Actions para ejecutar automáticamente las pruebas en cada push y pull request.
+
+**Configuración GitHub Actions:**
+- ✅ **Archivos configurados**: `.github/workflows/`
+- ✅ **Tests automáticos**: Se ejecutan en Java 17
+- ✅ **Base de datos de prueba**: PostgreSQL
+- ✅ **Notificaciones**: Email en fallos
+
+**Estados de Build:**
+- [](https://github.com/alexpardox/mercaproject/actions)
+
## Estructura del Proyecto
```
@@ -155,27 +239,6 @@ src/
└── java/ # Pruebas unitarias
```
-## Funcionalidades por Rol
-
-### Administrador
-- Gestión completa de usuarios
-- Gestión completa de proveedores
-- Gestión completa de formularios
-- Acceso a todos los reportes
-- Configuración del sistema
-
-### Comercial
-- Visualización de todos los formularios
-- Gestión de proveedores
-- Reportes por tienda y proveedor
-- Edición de formularios de cualquier tienda
-
-### Tienda
-- Captura de formularios para su tienda asignada
-- Visualización de formularios propios
-- Consulta de proveedores
-- Dashboard con estadísticas de su tienda
-
## Entidades Principales
### Usuario
@@ -195,24 +258,6 @@ src/
- Vigencia y precio acordado
- Estados (Activo, Vencido, Cancelado)
-## Configuración de Desarrollo
-
-Para desarrollo, se recomienda:
-
-1. **Configurar perfil de desarrollo** en `application-dev.properties`:
-```properties
-spring.jpa.show-sql=true
-logging.level.com.merca.merca=DEBUG
-spring.thymeleaf.cache=false
-```
-
-2. **Usar H2 en memoria** para pruebas rápidas:
-```properties
-spring.datasource.url=jdbc:h2:mem:testdb
-spring.datasource.driver-class-name=org.h2.Driver
-spring.jpa.hibernate.ddl-auto=create-drop
-```
-
## Personalización
### Estilos CSS
@@ -328,6 +373,45 @@ java -jar target/merca-0.0.1-SNAPSHOT.jar --spring.profiles.active=production
- `application-production.properties` - Configuración para producción
- `database/mercadia_postgresql.sql` - Script de base de datos para Supabase
+## 🗺️ Roadmap del Proyecto
+
+El desarrollo del Sistema Mercadía sigue la siguiente hoja de ruta:
+
+### Fase 1: Fundación (Completado)
+- ✅ Análisis de requerimientos y diseño de arquitectura
+- ✅ Configuración del entorno de desarrollo
+- ✅ Implementación del modelo de datos básico
+- ✅ Autenticación y gestión de usuarios
+- ✅ Interfaz de usuario básica con Thymeleaf
+
+### Fase 2: Funcionalidades Core (En Progreso)
+- ✅ Gestión completa de proveedores
+- ✅ Sistema de formularios digitales
+- ✅ Asignación de espacios comerciales
+- 🔄 Dashboard para visualización de datos
+- 🔄 Notificaciones y alertas
+
+### Fase 3: Optimización (Q3 2025)
+- 📅 Mejoras de rendimiento en consultas de base de datos
+- 📅 Implementación de caché para operaciones frecuentes
+- 📅 Optimización de interfaz de usuario
+- 📅 Mejoras de accesibilidad y UX
+- 📅 Refactorización de código legacy
+
+### Fase 4: Escalabilidad (Q4 2025)
+- 📅 Arquitectura de microservicios para módulos clave
+- 📅 API RESTful para integración con sistemas externos
+- 📅 Implementación de sistema de eventos y mensajería
+- 📅 Soporte para múltiples bases de datos
+- 📅 Mejoras en la seguridad y auditoría
+
+### Fase 5: Expansión (Q1-Q2 2026)
+- 📅 Aplicación móvil para tiendas
+- 📅 Análisis avanzado de datos y reportes personalizados
+- 📅 Inteligencia artificial para recomendaciones
+- 📅 Integración con sistemas ERP del grupo Iconn
+- 📅 Expansión a nuevas unidades de negocio
+
## Contribución
Para contribuir al proyecto:
diff --git a/pom.xml b/pom.xml
index 1da0a45..e686c8c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,12 +102,7 @@
test
-
-
- com.h2database
- h2
- test
-
+
diff --git a/src/main/java/com/merca/merca/config/DataInitializer.java b/src/main/java/com/merca/merca/config/DataInitializer.java
index 0233cac..0b94447 100644
--- a/src/main/java/com/merca/merca/config/DataInitializer.java
+++ b/src/main/java/com/merca/merca/config/DataInitializer.java
@@ -1,61 +1,29 @@
package com.merca.merca.config;
-import com.merca.merca.entity.Proveedor;
import com.merca.merca.entity.Usuario;
-import com.merca.merca.service.ProveedorService;
import com.merca.merca.service.UsuarioService;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class DataInitializer implements CommandLineRunner {
- @Value("${app.initialize-data:false}")
- private boolean initializeData;
-
@Autowired
private UsuarioService usuarioService;
- @Autowired
- private ProveedorService proveedorService;
-
@Override
public void run(String... args) throws Exception {
- // Solo inicializar datos si está habilitado explícitamente
- if (initializeData) {
- System.out.println("🔄 Inicializando datos de ejemplo...");
- initializeUsers();
- initializeProveedores();
- } else {
- System.out.println("⏭️ Inicialización de datos deshabilitada");
- // Siempre intentar crear un usuario admin si no existe
- initializeAdminUser();
- }
- }
-
- private void initializeAdminUser() {
- try {
- if (usuarioService.buscarPorUsername("admin").isEmpty()) {
- Usuario admin = new Usuario();
- admin.setUsername("admin");
- admin.setEmail("admin@mercadia.com");
- admin.setPassword("password");
- admin.setNombreCompleto("Administrador del Sistema");
- admin.setRol(Usuario.Rol.ADMINISTRADOR);
- admin.setActivo(true);
-
- usuarioService.registrarUsuario(admin);
- System.out.println("✅ Usuario administrador creado: admin/password");
- }
- } catch (Exception e) {
- System.out.println("⚠️ Error al crear usuario admin: " + e.getMessage());
- }
+ // Siempre verificar si existen usuarios y crearlos solo si no existen
+ System.out.println("🔄 Verificando usuarios del sistema...");
+ initializeUsersIfNeeded();
+
+ // Ya no inicializamos proveedores automáticamente
+ System.out.println("⏭️ Inicialización de proveedores deshabilitada");
}
- private void initializeUsers() {
- // Crear usuario administrador
+ private void initializeUsersIfNeeded() {
+ // Crear usuario administrador solo si no existe
if (usuarioService.buscarPorUsername("admin").isEmpty()) {
Usuario admin = new Usuario();
admin.setUsername("admin");
@@ -67,13 +35,15 @@ private void initializeUsers() {
try {
usuarioService.registrarUsuario(admin);
- System.out.println("Usuario administrador creado: admin/password");
+ System.out.println("✅ Usuario administrador creado: admin/password");
} catch (Exception e) {
- System.err.println("Error creando usuario admin: " + e.getMessage());
+ System.out.println("⚠️ Error al crear usuario admin: " + e.getMessage());
}
+ } else {
+ System.out.println("✓ Usuario administrador ya existe");
}
- // Crear usuario comercial
+ // Crear usuario comercial solo si no existe
if (usuarioService.buscarPorUsername("comercial").isEmpty()) {
Usuario comercial = new Usuario();
comercial.setUsername("comercial");
@@ -85,13 +55,15 @@ private void initializeUsers() {
try {
usuarioService.registrarUsuario(comercial);
- System.out.println("Usuario comercial creado: comercial/password");
+ System.out.println("✅ Usuario comercial creado: comercial/password");
} catch (Exception e) {
- System.err.println("Error creando usuario comercial: " + e.getMessage());
+ System.out.println("⚠️ Error al crear usuario comercial: " + e.getMessage());
}
+ } else {
+ System.out.println("✓ Usuario comercial ya existe");
}
- // Crear usuario de tienda
+ // Crear usuario de tienda solo si no existe
if (usuarioService.buscarPorUsername("tienda001").isEmpty()) {
Usuario tienda = new Usuario();
tienda.setUsername("tienda001");
@@ -104,89 +76,12 @@ private void initializeUsers() {
try {
usuarioService.registrarUsuario(tienda);
- System.out.println("Usuario tienda creado: tienda001/password");
- } catch (Exception e) {
- System.err.println("Error creando usuario tienda: " + e.getMessage());
- }
- }
- }
-
- private void initializeProveedores() {
- // Crear proveedores de ejemplo
- if (proveedorService.buscarPorRfc("ABC123456789").isEmpty()) {
- Proveedor proveedor1 = new Proveedor();
- proveedor1.setNombre("Coca-Cola FEMSA");
- proveedor1.setRfc("ABC123456789");
- proveedor1.setRazonSocial("Coca-Cola FEMSA, S.A.B. de C.V.");
- proveedor1.setEmail("contacto@cocacola.com");
- proveedor1.setTelefono("5555551234");
- proveedor1.setContactoPrincipal("Juan Pérez");
- proveedor1.setDireccion("Av. Insurgentes Sur 1234, Ciudad de México");
- proveedor1.setEstado(Proveedor.Estado.ACTIVO);
-
- try {
- proveedorService.registrarProveedor(proveedor1);
- System.out.println("Proveedor Coca-Cola FEMSA creado");
- } catch (Exception e) {
- System.err.println("Error creando proveedor Coca-Cola: " + e.getMessage());
- }
- }
-
- if (proveedorService.buscarPorRfc("DEF987654321").isEmpty()) {
- Proveedor proveedor2 = new Proveedor();
- proveedor2.setNombre("Bimbo");
- proveedor2.setRfc("DEF987654321");
- proveedor2.setRazonSocial("Grupo Bimbo, S.A.B. de C.V.");
- proveedor2.setEmail("contacto@bimbo.com");
- proveedor2.setTelefono("5555559876");
- proveedor2.setContactoPrincipal("María García");
- proveedor2.setDireccion("Prolongación Paseo de la Reforma 1000, Ciudad de México");
- proveedor2.setEstado(Proveedor.Estado.ACTIVO);
-
- try {
- proveedorService.registrarProveedor(proveedor2);
- System.out.println("Proveedor Bimbo creado");
- } catch (Exception e) {
- System.err.println("Error creando proveedor Bimbo: " + e.getMessage());
- }
- }
-
- if (proveedorService.buscarPorRfc("GHI456789123").isEmpty()) {
- Proveedor proveedor3 = new Proveedor();
- proveedor3.setNombre("Nestlé México");
- proveedor3.setRfc("GHI456789123");
- proveedor3.setRazonSocial("Nestlé México, S.A. de C.V.");
- proveedor3.setEmail("contacto@nestle.com.mx");
- proveedor3.setTelefono("5555557890");
- proveedor3.setContactoPrincipal("Carlos López");
- proveedor3.setDireccion("Ejército Nacional 453, Ciudad de México");
- proveedor3.setEstado(Proveedor.Estado.ACTIVO);
-
- try {
- proveedorService.registrarProveedor(proveedor3);
- System.out.println("Proveedor Nestlé México creado");
- } catch (Exception e) {
- System.err.println("Error creando proveedor Nestlé: " + e.getMessage());
- }
- }
-
- if (proveedorService.buscarPorRfc("JKL789123456").isEmpty()) {
- Proveedor proveedor4 = new Proveedor();
- proveedor4.setNombre("Procter & Gamble");
- proveedor4.setRfc("JKL789123456");
- proveedor4.setRazonSocial("Procter & Gamble Manufacturing, S. de R.L. de C.V.");
- proveedor4.setEmail("contacto@pg.com");
- proveedor4.setTelefono("5555554567");
- proveedor4.setContactoPrincipal("Ana Rodríguez");
- proveedor4.setDireccion("Santa Fe 505, Ciudad de México");
- proveedor4.setEstado(Proveedor.Estado.ACTIVO);
-
- try {
- proveedorService.registrarProveedor(proveedor4);
- System.out.println("Proveedor Procter & Gamble creado");
+ System.out.println("✅ Usuario tienda creado: tienda001/password");
} catch (Exception e) {
- System.err.println("Error creando proveedor P&G: " + e.getMessage());
+ System.out.println("⚠️ Error al crear usuario tienda: " + e.getMessage());
}
+ } else {
+ System.out.println("✓ Usuario tienda ya existe");
}
}
}
diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties
index 35ae007..a491622 100644
--- a/src/main/resources/application-dev.properties
+++ b/src/main/resources/application-dev.properties
@@ -1,23 +1,20 @@
# =========================================
-# CONFIGURACIÓN PARA DESARROLLO LOCAL CON H2
+# CONFIGURACIÓN PARA DESARROLLO LOCAL CON POSTGRESQL (SUPABASE)
# =========================================
-# Configuración de H2 (base de datos en memoria para desarrollo)
-spring.datasource.url=jdbc:h2:mem:mercadia_dev
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.username=sa
-spring.datasource.password=password
+# Configuración de PostgreSQL (Supabase) - Misma que en producción
+# Se utilizan las mismas variables de entorno que en producción
+spring.datasource.url=${DB_URL}
+spring.datasource.driver-class-name=org.postgresql.Driver
+spring.datasource.username=${DB_USERNAME}
+spring.datasource.password=${DB_PASSWORD}
-# Configuración de JPA/Hibernate para H2
-spring.jpa.hibernate.ddl-auto=create-drop
+# Configuración de JPA/Hibernate para PostgreSQL
+spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.format_sql=true
-# Habilitar consola H2
-spring.h2.console.enabled=true
-spring.h2.console.path=/h2-console
-
# Inicializar datos de ejemplo en desarrollo
app.initialize-data=true
diff --git a/src/main/resources/application-h2.properties b/src/main/resources/application-h2.properties
deleted file mode 100644
index 5a52c36..0000000
--- a/src/main/resources/application-h2.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# =========================================
-# CONFIGURACIÓN PARA DESARROLLO LOCAL CON H2
-# =========================================
-
-# Base de datos H2 en memoria para desarrollo local
-spring.datasource.url=jdbc:h2:mem:mercadia
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.username=sa
-spring.datasource.password=
-spring.h2.console.enabled=true
-spring.h2.console.path=/h2-console
-
-# Configuración de JPA/Hibernate para H2
-spring.jpa.hibernate.ddl-auto=create-drop
-spring.jpa.show-sql=false
-spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
-spring.jpa.properties.hibernate.format_sql=true
-spring.jpa.properties.hibernate.jdbc.time_zone=UTC
-
-# Configuración de Thymeleaf
-spring.thymeleaf.cache=false
-spring.thymeleaf.prefix=classpath:/templates/
-spring.thymeleaf.suffix=.html
-
-# Configuración del servidor
-server.port=${SERVER_PORT:8080}
-server.servlet.context-path=${SERVER_CONTEXT_PATH:/mercadia}
-
-# Configuración de logging
-logging.level.com.merca.merca=DEBUG
-logging.level.org.springframework.security=DEBUG
-logging.level.org.hibernate.SQL=DEBUG
-
-# Configuración de sesiones
-server.servlet.session.timeout=30m
-server.servlet.session.cookie.name=MERCADIA_SESSION
-
-# Configuración de archivos estáticos
-spring.web.resources.static-locations=classpath:/static/