diff --git a/backend/time_tracking/models.py b/backend/time_tracking/models.py index 514d1e2..577150e 100644 --- a/backend/time_tracking/models.py +++ b/backend/time_tracking/models.py @@ -1,9 +1,9 @@ from django.db import models -from django.contrib.auth import get_user_model +from django.conf import settings from datetime import datetime class TimeEntry(models.Model): - user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='time_entries') + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='time_entries') date = models.DateField() start_time = models.TimeField(null=True, blank=True) end_time = models.TimeField(null=True, blank=True) diff --git a/backend/time_tracking/serializers.py b/backend/time_tracking/serializers.py index 0394b67..7550a50 100644 --- a/backend/time_tracking/serializers.py +++ b/backend/time_tracking/serializers.py @@ -1,15 +1,12 @@ from rest_framework import serializers -from django.contrib.auth import get_user_model +from django.conf import settings from .models import TimeEntry -User = get_user_model() - - class UserSerializer(serializers.ModelSerializer): class Meta: - model = User + model = settings.AUTH_USER_MODEL fields = ['id', 'username', 'first_name', 'last_name'] @@ -50,7 +47,7 @@ class TimeEntrySerializer(serializers.ModelSerializer): class TimeEntryCreateSerializer(serializers.ModelSerializer): user_id = serializers.PrimaryKeyRelatedField( source='user', - queryset=User.objects.all(), + queryset=settings.AUTH_USER_MODEL.objects.all(), write_only=True, required=False, ) diff --git a/backend/time_tracking/urls.py b/backend/time_tracking/urls.py index 83e7ac4..930310a 100644 --- a/backend/time_tracking/urls.py +++ b/backend/time_tracking/urls.py @@ -6,6 +6,7 @@ from .views import ( TimeEntryDetailView, TimeEntryUpdateView, WeeklySummaryView, + DebugDatabaseView ) urlpatterns = [ @@ -16,4 +17,5 @@ urlpatterns = [ path('entries//update/', TimeEntryUpdateView.as_view(), name='time-entry-update'), path('weekly-summary/', WeeklySummaryView.as_view(), name='user-weekly-summary'), path('weekly-summary//', WeeklySummaryView.as_view(), name='weekly-summary'), + path('debug-database/', DebugDatabaseView.as_view()), ] \ No newline at end of file diff --git a/backend/time_tracking/views.py b/backend/time_tracking/views.py index e4fec6c..3c6cb65 100644 --- a/backend/time_tracking/views.py +++ b/backend/time_tracking/views.py @@ -2,8 +2,8 @@ from rest_framework import generics, status from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from rest_framework.views import APIView -from django.contrib.auth import get_user_model -from django.db import transaction +from django.conf import settings +from django.db import transaction, connection from django.utils import timezone from datetime import timedelta from datetime import time as datetime_time @@ -16,8 +16,40 @@ from .serializers import ( WeeklySummarySerializer ) -User = get_user_model() +class DebugDatabaseView(APIView): + permission_classes = [] + def get(self, request): + with connection.cursor() as cursor: + cursor.execute(""" + SELECT + CONSTRAINT_NAME, + COLUMN_NAME, + REFERENCED_TABLE_NAME, + REFERENCED_COLUMN_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'time_tracking_timeentry' + AND COLUMN_NAME = 'user_id' + AND REFERENCED_TABLE_NAME IS NOT NULL + """) + + foreign_keys = [ + { + 'constraint': row[0], + 'column': row[1], + 'referenced_table': row[2], + 'referenced_column': row[3], + } + for row in cursor.fetchall() + ] + + return Response({ + 'database': connection.settings_dict.get('NAME'), + 'user_model': str(settings.AUTH_USER_MODEL), + 'foreign_keys': foreign_keys, + }) + class TimeEntryListView(generics.ListAPIView): serializer_class = TimeEntrySerializer permission_classes = [IsAuthenticated] @@ -253,8 +285,8 @@ class WeeklySummaryView(APIView): user = request.user if user_id and (request.user.is_staff or request.user.is_superuser): try: - user = User.objects.get(id=user_id) - except User.DoesNotExist: + user = settings.AUTH_USER_MODEL.objects.get(id=user_id) + except settings.AUTH_USER_MODEL.DoesNotExist: return Response({'error': 'Utilisateur non trouvé'}, status=status.HTTP_404_NOT_FOUND) serializer = WeeklySummarySerializer(build_weekly_summary(user))