diff --git a/.env b/.env index 747b2f7..f8f4030 100644 --- a/.env +++ b/.env @@ -1,5 +1,10 @@ # Seguridad -CONTAINER_NAME=django_local -PORT=8000 -DEBUG_MODE=1 -PROJECT_NAME=django_dev_local \ No newline at end of file +DEBUG=True +SECRET_KEY=una-clave-muy-secreta-y-larga-123456 + +# Base de Datos (Conectando al PostgreSQL que instalamos) +DB_NAME=gitea +DB_USER=gitea +DB_PASSWORD=gitea +DB_HOST=gitea-db +DB_PORT=5432 \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..f8f4030 --- /dev/null +++ b/.env.example @@ -0,0 +1,10 @@ +# Seguridad +DEBUG=True +SECRET_KEY=una-clave-muy-secreta-y-larga-123456 + +# Base de Datos (Conectando al PostgreSQL que instalamos) +DB_NAME=gitea +DB_USER=gitea +DB_PASSWORD=gitea +DB_HOST=gitea-db +DB_PORT=5432 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 29f322e..51deba6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,12 @@ -*.pyc +# Configuración personal y secretos .env +.env.local + +# Docker local (si decides no subirlo) +deployments/docker-compose.override.yml +deployments/docker-compose.yml + +# Archivos de datos de la DB local +postgres_data/ +local_postgres_data/ +*.pyc diff --git a/apps/backend_admin/actions.py b/apps/backend_admin/actions.py new file mode 100644 index 0000000..680a1f5 --- /dev/null +++ b/apps/backend_admin/actions.py @@ -0,0 +1,13 @@ +class Admin: + def get_status_action(self): + """ + Lógica para comprobar la salud del sistema. + Devuelve el estado básico del entorno. + """ + # En el futuro, podrías usar get_parameterized aquí si quisieras + # consultar estados en la base de datos. + return { + "status": "ok", + "message": "V-Encore API System is active", + "environment": "dev" # Esto podría venir de una variable de entorno + } \ No newline at end of file diff --git a/apps/backend_admin/urls.py b/apps/backend_admin/urls.py new file mode 100644 index 0000000..fc56f12 --- /dev/null +++ b/apps/backend_admin/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from .views import status_view + +urlpatterns = [ + # Ruta final: /admin/status/ + path('status/', status_view, name='admin_status'), +] \ No newline at end of file diff --git a/apps/backend_admin/views.py b/apps/backend_admin/views.py new file mode 100644 index 0000000..bf15dde --- /dev/null +++ b/apps/backend_admin/views.py @@ -0,0 +1,28 @@ +from django.http import JsonResponse +from .actions import Admin +import logging + +logger = logging.getLogger(__name__) + +def status_view(request): + # BLOQUE 1: Log de iniciación + logger.info("INICIO - Ejecutando Health Check de Administración.") + + # BLOQUE 2: Limpieza y validación de datos + # Para un status simple, el diccionario de limpieza está vacío + data_cleaned = {} + + # BLOQUE 3: Llamada a la acción + try: + # Instanciamos la clase Admin y llamamos al método + admin_logic = Admin() + response_data = admin_logic.get_status_action() + status_code = 200 + except Exception as e: + logger.error(f"ERROR - Fallo en get_status_action: {str(e)}") + response_data = {"status": "error", "message": "Internal Server Error"} + status_code = 500 + + # BLOQUE 4: Log de cierre y retorno + logger.info(f"FIN - Health Check completado. Status: {status_code}") + return JsonResponse(response_data, status=status_code) \ No newline at end of file diff --git a/apps/promociones/actions.py b/apps/promociones/actions.py index 919260d..c3840d5 100644 --- a/apps/promociones/actions.py +++ b/apps/promociones/actions.py @@ -1,6 +1,13 @@ from django.db import connection from apps.common.utils import clean_sql_string, clean_sql_int + +def get_status_action(): + """ + Acción simple para comprobar que la lógica de la API responde. + """ + return {"status": "ok", "message": "API is running"} + def getData(params): """ Función estándar para obtener datos de promociones. diff --git a/apps/promociones/urls.py b/apps/promociones/urls.py index cb85abd..6ec526f 100644 --- a/apps/promociones/urls.py +++ b/apps/promociones/urls.py @@ -1,7 +1,8 @@ from django.urls import path -from .views import get_promocion_view +from .views import get_promocion_view, status_view urlpatterns = [ # Capa 1: Definición del endpoint path('obtener/', get_promocion_view, name='get_promocion'), + ] \ No newline at end of file diff --git a/apps/promociones/views.py b/apps/promociones/views.py index 5624e22..85cb46a 100644 --- a/apps/promociones/views.py +++ b/apps/promociones/views.py @@ -2,6 +2,10 @@ import logging from django.http import JsonResponse from .actions import getData +from django.http import JsonResponse +from .actions import get_status_action + + # Configuración del logger para rastrear la ejecución logger = logging.getLogger(__name__) @@ -51,4 +55,19 @@ def get_promocion_view(request): return JsonResponse({ 'status': 'error', 'message': 'Error interno del servidor' - }, status=500) \ No newline at end of file + }, status=500) + +# En views.py +def status_view(request): + # BLOQUE 1: Log de iniciación + logger.info("Iniciando petición de status...") + + # BLOQUE 2: Limpieza y validación de datos (En este caso no hay datos de entrada) + data_cleaned = {} + + # BLOQUE 3: Llamada a la acción + response_data = get_status_action() + + # BLOQUE 4: Log de cierre y retorno + logger.info("Status enviado correctamente.") + return JsonResponse(response_data, status=200) \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index eaae147..d3fff72 100644 --- a/core/urls.py +++ b/core/urls.py @@ -3,4 +3,5 @@ from django.urls import path, include urlpatterns = [ # Redirigimos todas las peticiones de /api/promociones/ a nuestra app path('api/promociones/', include('apps.promociones.urls')), + path('admin/', include('apps.backend_admin.urls')), # El tuyo ]