This commit is contained in:
Louis Mazin 2026-09-20 01:02:36 +02:00
parent 27587397db
commit 0937fbcbb9
4 changed files with 44 additions and 13 deletions

View File

@ -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)

View File

@ -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,
)

View File

@ -6,6 +6,7 @@ from .views import (
TimeEntryDetailView,
TimeEntryUpdateView,
WeeklySummaryView,
DebugDatabaseView
)
urlpatterns = [
@ -16,4 +17,5 @@ urlpatterns = [
path('entries/<int:entry_id>/update/', TimeEntryUpdateView.as_view(), name='time-entry-update'),
path('weekly-summary/', WeeklySummaryView.as_view(), name='user-weekly-summary'),
path('weekly-summary/<int:user_id>/', WeeklySummaryView.as_view(), name='weekly-summary'),
path('debug-database/', DebugDatabaseView.as_view()),
]

View File

@ -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))