common api

This commit is contained in:
Mikan
2025-05-19 17:10:30 +03:00
parent 59df2c55d9
commit a0a337045b
13 changed files with 659 additions and 6 deletions

34
events/filters.py Normal file
View File

@@ -0,0 +1,34 @@
import django_filters
from .models import Event, EventParticipant, MethodicalFile
class EventFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr="icontains")
location = django_filters.CharFilter(lookup_expr="icontains")
date_after = django_filters.DateFilter(field_name="date", lookup_expr="gte")
date_before = django_filters.DateFilter(field_name="date", lookup_expr="lte")
class Meta:
model = Event
fields = ["name", "location", "date_after", "date_before"]
class EventParticipantFilter(django_filters.FilterSet):
student_name = django_filters.CharFilter(
field_name="student__account__first_name", lookup_expr="icontains"
)
event_name = django_filters.CharFilter(field_name="event__name", lookup_expr="icontains")
class Meta:
model = EventParticipant
fields = ["student_name", "event_name", "points"]
class MethodicalFileFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr="icontains")
specialty_name = django_filters.CharFilter(
field_name="specialty__name", lookup_expr="icontains"
)
class Meta:
model = MethodicalFile
fields = ["name", "specialty_name", "upload_date"]

68
events/serializers.py Normal file
View File

@@ -0,0 +1,68 @@
from rest_framework import serializers
from .models import (
EventStatus,
ActivityType,
Event,
EventOrganizer,
EventDetail,
EventParticipant,
MethodicalFile,
RelevantMethodicalFile,
)
class EventStatusSerializer(serializers.ModelSerializer):
class Meta:
model = EventStatus
fields = "__all__"
class ActivityTypeSerializer(serializers.ModelSerializer):
class Meta:
model = ActivityType
fields = "__all__"
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = "__all__"
class EventOrganizerSerializer(serializers.ModelSerializer):
employee_name = serializers.SerializerMethodField()
class Meta:
model = EventOrganizer
fields = ["id", "employee", "event", "employee_name"]
def get_employee_name(self, obj):
return f"{obj.employee.account.first_name} {obj.employee.account.last_name}"
class EventDetailSerializer(serializers.ModelSerializer):
class Meta:
model = EventDetail
fields = "__all__"
class EventParticipantSerializer(serializers.ModelSerializer):
student_name = serializers.SerializerMethodField()
class Meta:
model = EventParticipant
fields = ["id", "student", "event", "points", "student_name"]
def get_student_name(self, obj):
return f"{obj.student.account.last_name} {obj.student.account.first_name}"
class MethodicalFileSerializer(serializers.ModelSerializer):
class Meta:
model = MethodicalFile
fields = "__all__"
class RelevantMethodicalFileSerializer(serializers.ModelSerializer):
class Meta:
model = RelevantMethodicalFile
fields = "__all__"

26
events/urls.py Normal file
View File

@@ -0,0 +1,26 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import (
EventStatusViewSet,
ActivityTypeViewSet,
EventViewSet,
EventOrganizerViewSet,
EventDetailViewSet,
EventParticipantViewSet,
MethodicalFileViewSet,
RelevantMethodicalFileViewSet,
)
router = DefaultRouter()
router.register(r"event-statuses", EventStatusViewSet, basename="event-status")
router.register(r"activity-types", ActivityTypeViewSet, basename="activity-type")
router.register(r"events", EventViewSet, basename="event")
router.register(r"event-organizers", EventOrganizerViewSet, basename="event-organizer")
router.register(r"event-details", EventDetailViewSet, basename="event-detail")
router.register(r"event-participants", EventParticipantViewSet, basename="event-participant")
router.register(r"methodical-files", MethodicalFileViewSet, basename="methodical-file")
router.register(r"relevant-methodical-files", RelevantMethodicalFileViewSet, basename="relevant-methodical-file")
urlpatterns = [
path("", include(router.urls)),
]

View File

@@ -1,3 +1,97 @@
from django.shortcuts import render
from rest_framework import viewsets
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
from .models import (
EventStatus,
ActivityType,
Event,
EventOrganizer,
EventDetail,
EventParticipant,
MethodicalFile,
RelevantMethodicalFile,
)
from .serializers import (
EventStatusSerializer,
ActivityTypeSerializer,
EventSerializer,
EventOrganizerSerializer,
EventDetailSerializer,
EventParticipantSerializer,
MethodicalFileSerializer,
RelevantMethodicalFileSerializer,
)
from .filters import (
EventFilter,
EventParticipantFilter,
MethodicalFileFilter,
) # Фильтры будут добавлены позже
# Create your views here.
class EventStatusViewSet(viewsets.ModelViewSet):
queryset = EventStatus.objects.all()
serializer_class = EventStatusSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ["name"]
ordering_fields = ["name"]
class ActivityTypeViewSet(viewsets.ModelViewSet):
queryset = ActivityType.objects.all()
serializer_class = ActivityTypeSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ["name"]
ordering_fields = ["name"]
class EventViewSet(viewsets.ModelViewSet):
queryset = Event.objects.all()
serializer_class = EventSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = EventFilter
search_fields = ["name", "location", "description"]
ordering_fields = ["date", "name"]
class EventOrganizerViewSet(viewsets.ModelViewSet):
queryset = EventOrganizer.objects.all()
serializer_class = EventOrganizerSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["employee", "event"]
search_fields = ["employee__account__first_name", "employee__account__last_name"]
ordering_fields = ["employee", "event"]
class EventDetailViewSet(viewsets.ModelViewSet):
queryset = EventDetail.objects.all()
serializer_class = EventDetailSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["activity_type", "event"]
search_fields = ["activity_type__name"]
ordering_fields = ["activity_type", "event"]
class EventParticipantViewSet(viewsets.ModelViewSet):
queryset = EventParticipant.objects.all()
serializer_class = EventParticipantSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = EventParticipantFilter
search_fields = ["student__account__first_name", "student__account__last_name"]
ordering_fields = ["event", "student", "points"]
class MethodicalFileViewSet(viewsets.ModelViewSet):
queryset = MethodicalFile.objects.all()
serializer_class = MethodicalFileSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = MethodicalFileFilter
search_fields = ["name", "specialty__name"]
ordering_fields = ["specialty", "name", "upload_date"]
class RelevantMethodicalFileViewSet(viewsets.ModelViewSet):
queryset = RelevantMethodicalFile.objects.all()
serializer_class = RelevantMethodicalFileSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["methodical_file", "activity_type"]
search_fields = ["methodical_file__name", "activity_type__name"]
ordering_fields = ["methodical_file", "activity_type"]