Procházet zdrojové kódy

Api e importación listo

Celestino Rey před 1 rokem
rodič
revize
db3e68a881

+ 5 - 2
src/eventos/management/commands/importar_listaespera.py

@@ -27,8 +27,8 @@ class Command(BaseCommand):
             listaesperas_creados = 0
             for listaespera_data in datos:
                 try:
-                    evento = Evento.objects.get(id=listaespera_data["evento"])
-                    usuario = ReyMotaUser.objects.get(id=listaespera_data["usuario"])
+                    evento = Evento.objects.get(nombre=listaespera_data["evento_nombre"])
+                    usuario = ReyMotaUser.objects.get(email=listaespera_data["usuario_email"])
 
                     creado = ListaEspera.objects.create(
                         evento_id=evento.id,
@@ -41,6 +41,9 @@ class Command(BaseCommand):
                 except Evento.DoesNotExist:
                     self.stderr.write(self.style.ERROR(f"Evento '{listaespera_data['evento']}' no encontrado."))
 
+                except ReyMotaUser.DoesNotExist:
+                    self.stderr.write(self.style.ERROR(f"Usuario con email '{listaespera_data['usuario_email']}' no encontrado."))
+
             self.stdout.write(self.style.SUCCESS(f'Se importaron {listaesperas_creados} listaesperas correctamente.'))
 
         except FileNotFoundError:

+ 3 - 2
src/eventos/management/commands/importar_noticias.py

@@ -27,12 +27,13 @@ class Command(BaseCommand):
             noticias_creados = 0
             for noticia_data in datos:
                 try:
-                    usuario = ReyMotaUser.objects.get(id=noticia_data["autor"])
+                    usuario = ReyMotaUser.objects.get(email=noticia_data["usuario_email"])
 
                     creado = Noticia.objects.create(
-                        autor_id=usuario.id,
+                        autor=usuario,
                         titulo=noticia_data['titulo'],
                         fecha_publicacion=noticia_data['fecha_publicacion'],
+                        contenido=noticia_data['contenido'],
                         publicado=noticia_data['publicado']
                     )
                     if creado:

+ 3 - 4
src/eventos/management/commands/importar_reservas.py

@@ -27,14 +27,13 @@ class Command(BaseCommand):
             reservas_creados = 0
             for reserva_data in datos:
                 try:
-                    evento = Evento.objects.get(id=reserva_data["evento"])
+                    evento = Evento.objects.get(nombre=reserva_data["evento_nombre"])
                     usuario = ReyMotaUser.objects.get(email=reserva_data["usuario_email"])
 
                     creado = Reserva.objects.create(
-                        evento_id=evento.id,
-                        usuario_id=usuario.id,
                         fecha_reserva=reserva_data['fecha_reserva'],
-                        evento=evento
+                        evento=evento,
+                        usuario=usuario
                     )
                     if creado:
                         reservas_creados += 1

+ 10 - 4
src/eventos/serializers.py

@@ -10,20 +10,26 @@ class EventoSerializer(serializers.ModelSerializer):
 
 class ReservaSerializer(serializers.ModelSerializer):
     usuario_email = serializers.CharField(source='usuario.email', read_only=True)
+    evento_nombre = serializers.CharField(source='evento.nombre', read_only=True)
 
     class Meta:
         model = Reserva
-#        fields = '__all__'  # Incluir todos los campos del modelo
-        fields = ['id', 'usuario', 'usuario_email', 'evento', 'fecha_reserva']
+        fields = ['id', 'usuario', 'usuario_email', 'evento', 'fecha_reserva', 'evento_nombre']
 
 
 class ListaEsperaSerializer(serializers.ModelSerializer):
+    usuario_email = serializers.CharField(source='usuario.email', read_only=True)
+    evento_nombre = serializers.CharField(source='evento.nombre', read_only=True)
+
     class Meta:
         model = ListaEspera
-        fields = '__all__'  # Incluir todos los campos del modelo
+        fields = ['id', 'fecha_apuntado', 'usuario_email', 'evento_nombre']
 
 
 class NoticiaSerializer(serializers.ModelSerializer):
+    usuario_email = serializers.CharField(source='autor.email', read_only=True)
+
     class Meta:
         model = Noticia
-        fields = '__all__'  # Incluir todos los campos del modelo
+        fields = ['id', 'titulo', 'contenido', 'fecha_publicacion', 'publicado', 'usuario_email']
+

+ 0 - 0
src/gestion_reservas/management/__init__.py


+ 0 - 0
src/gestion_reservas/management/commands/__init__.py


+ 41 - 0
src/gestion_reservas/management/commands/importar_ayuda.py

@@ -0,0 +1,41 @@
+import json
+from django.core.management.base import BaseCommand
+from gestion_reservas.models import Ayuda
+
+
+class Command(BaseCommand):
+    help = "Importa la ayuda desde un archivo JSON"
+
+    def add_arguments(self, parser):
+        parser.add_argument('archivo_json', type=str, help="Ruta del archivo JSON")
+
+    def handle(self, *args, **kwargs):
+        archivo_json = kwargs['archivo_json']
+
+        try:
+            with open(archivo_json, 'r', encoding='utf-8') as file:
+                datos = json.load(file)
+
+            self.stdout.write(self.style.WARNING(f"\nSe encontraron {len(datos)} elementos de ayuda en el archivo '{archivo_json}'."))
+            confirmar = input("¿Deseas continuar con la importación? (s/n): ").strip().lower()
+
+            if confirmar != 's':
+                self.stdout.write(self.style.ERROR("Importación cancelada."))
+                return
+
+            ayuda_creados = 0
+            for ayuda_data in datos:
+                creado = Ayuda.objects.create(
+                    titulo=ayuda_data['titulo'],
+                    descripcion=ayuda_data['descripcion'],
+                    apartado=ayuda_data['apartado'],
+                )
+                if creado:
+                    ayuda_creados += 1
+
+            self.stdout.write(self.style.SUCCESS(f'Se importaron {ayuda_creados} entradas de ayuda correctamente.'))
+
+        except FileNotFoundError:
+            self.stderr.write(self.style.ERROR(f"El archivo {archivo_json} no se encontró."))
+        except json.JSONDecodeError:
+            self.stderr.write(self.style.ERROR("Error al leer el archivo JSON. Asegúrate de que el formato sea correcto."))

+ 4 - 5
src/gestion_reservas/serializers.py

@@ -1,9 +1,8 @@
 from rest_framework import serializers
-from eventos.models import Evento
+from .models import Ayuda
 
 
-class EventoSerializer(serializers.ModelSerializer):
+class AyudaSerializer(serializers.ModelSerializer):
     class Meta:
-        model = Evento
-        fields = ['id', 'nombre', 'descripcion', 'fecha', 'hora', 'plazas_restantes', 'publicado']
-
+        model = Ayuda
+        fields = '__all__'  # Incluir todos los campos del modelo

+ 13 - 9
src/gestion_reservas/settings.py

@@ -26,7 +26,7 @@ SECRET_KEY = 'hey'
 # SECURITY WARNING: don't run with debug turned on in production!
 DEBUG = os.environ["DEBUG"] == 'True'
 
-ALLOWED_HOSTS = [".ocp-cluster.reymota.lab"]
+ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS").split(" ")
 
 
 # Application definition
@@ -85,14 +85,15 @@ WSGI_APPLICATION = 'gestion_reservas.wsgi.application'
 
 DATABASES = {
     "default": {
-        "ENGINE": "django.db.backends.postgresql",
-        "NAME": "jugaralpadel",
-        "USER": "creylopez",
-        "PASSWORD": "Dsa-0213",
-        "HOST": "postgresql",
-        "PORT": "5432",
+        "ENGINE": os.environ.get("SQL_ENGINE", "django.db.backends.sqlite3"),
+        "NAME": os.environ.get("SQL_DATABASE", BASE_DIR / "db.sqlite3"),
+        "USER": os.environ.get("SQL_USER", "user"),
+        "PASSWORD": os.environ.get("SQL_PASSWORD", "password"),
+        "HOST": os.environ.get("SQL_HOST", "localhost"),
+        "PORT": os.environ.get("SQL_PORT", "5432"),
     }
-} 
+}
+
 
 # Password validation
 # https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators
@@ -149,7 +150,10 @@ AUTH_USER_MODEL = "reymotausers.ReyMotaUser"
 MEDIA_ROOT = BASE_DIR / "mediafiles"
 MEDIA_URL = '/media/'
 
-CSRF_TRUSTED_ORIGINS = ["https://*.ocp-cluster.reymota.lab"]
+if DEBUG is False:
+    CSRF_TRUSTED_ORIGINS = os.environ.get("CSRF_TRUSTED_ORIGINS").split(" ")
+
+CSRF_TRUSTED_ORIGINS = os.environ.get("CSRF_TRUSTED_ORIGINS").split(" ")
 
 # Configuración de correo con Gmail
 if DEBUG is True:

+ 3 - 0
src/gestion_reservas/urls.py

@@ -21,6 +21,7 @@ from django.conf import settings
 from django.views.generic.base import TemplateView  # new
 
 from . import views
+from .views import api_lista_ayuda
 
 
 urlpatterns = [
@@ -36,5 +37,7 @@ urlpatterns = [
     path('entorno/', views.ver_variables_entorno, name='ver_variables_entorno'),
     path('ayuda/', views.ayuda, name='ayuda'),
 
+    path('api/ayuda/', api_lista_ayuda, name='api_lista_ayuda'),
+
 ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 

+ 15 - 1
src/gestion_reservas/views.py

@@ -8,8 +8,10 @@ from django.contrib.auth.decorators import user_passes_test
 from django.shortcuts import render, get_object_or_404
 from django.http import HttpResponseForbidden
 
+from rest_framework.decorators import api_view
+
 from eventos.models import Noticia, Evento
-from .serializers import EventoSerializer
+from .serializers import AyudaSerializer
 from .models import Ayuda
 
 import markdown  # Importa la biblioteca de markdown
@@ -60,3 +62,15 @@ def ayuda(request):
         item.descripcion = markdown.markdown(item.descripcion)
 
     return render(request, 'ayuda.html', {'elementos': elementos_ayuda, 'apartados': apartados})
+
+
+#
+# API
+#
+
+@api_view(['GET'])
+def api_lista_ayuda(request):
+    """Devuelve la lista de toda la ayuda."""
+    ayuda = Ayuda.objects.all()
+    serializer = AyudaSerializer(ayuda, many=True)
+    return Response(serializer.data)

+ 3 - 1
src/reymotausers/management/commands/importar_usuarios.py

@@ -32,7 +32,9 @@ class Command(BaseCommand):
                     is_staff=usuario_data['is_staff'],
                     is_active=usuario_data['is_active'],
                     nombre=usuario_data['nombre'],
-                    email=usuario_data['email']                )
+                    email=usuario_data['email'],
+                    last_login=usuario_data['last_login']
+                )
                 if creado:
                     usuarios_creados += 1
 

+ 1 - 1
src/reymotausers/serializers.py

@@ -5,4 +5,4 @@ from .models import ReyMotaUser
 class ReyMotaUserSerializer(serializers.ModelSerializer):
     class Meta:
         model = ReyMotaUser
-        fields = '__all__'  # Incluir todos los campos del modelo
+        fields = ['email', 'password', 'foto', 'is_superuser', 'is_staff', 'is_active', 'nombre', 'last_login']

+ 2 - 2
src/templates/_head.html

@@ -10,7 +10,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     
-    <meta name="description" content="Portal - Bootstrap 5 Admin Dashboard Template For Developers">
+    <meta name="description" content="Jugar al pádel entre amigos">
     <meta name="author" content="Celestino Rey" >    
     <link rel="shortcut icon" href="{% static 'images/favicon.ico' %}"> 
     
@@ -20,4 +20,4 @@
     <!-- App CSS -->  
     <link id="theme-style" rel="stylesheet" href="{% static 'css/portal.css' %}">
 
-</head> 
+</head> 

+ 7 - 0
src/templates/eventos/detalle_evento.html

@@ -1,5 +1,7 @@
 {% extends 'base.html' %}
 
+{% load static %}
+
 {% block menuapp %}
 
 {% endblock menuapp %}
@@ -59,6 +61,11 @@
             </div>
 
         </div><!--//card-header-->
+         {% if evento.url_imagen %}
+           <div class="app-card-thumb">
+               <img src="https://lh3.googleusercontent.com/d/{{ evento.url_imagen }}" alt="Imagen de {{ evento.nombre }}" width="820" height="612">
+           </div>
+         {% endif %}
         <div class="row g-3 align-items-center">
             <div class="col-12 col-lg-auto text-center text-lg-start">
                 {% if reservas %}

+ 5 - 1
src/templates/eventos/lista_eventos.html

@@ -37,7 +37,11 @@
 							<div class="app-card app-card-doc shadow-sm h-100"> 
 								<div class="app-card-thumb-holder p-3">
 									<div class="app-card-thumb">
-										<img class="thumb-image" src="{% static 'images/padel-court.jpg' %}" alt="">
+                                        {% if evento.url_imagen %}
+                                           <img src="https://lh3.googleusercontent.com/d/{{ evento.url_imagen }}" alt="Imagen de {{ evento.nombre }}" width="205px" height="153px">
+                                        {% else %}
+										   <img class="thumb-image" src="{% static 'images/padel-court.jpg' %}" alt="">
+                                        {% endif %}
 									</div>
 									<a class="app-card-link-mask" href="{% url 'eventos:detalle_evento' evento.id %}"></a>
 								 </div>