Source code for api.views

"""
Views API per il sistema medico unificato
Endpoints REST per gestione pazienti, medici ed episodi
"""

from rest_framework import viewsets, status
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.parsers import MultiPartParser, FormParser
from rest_framework.views import APIView
from django.shortcuts import get_object_or_404
from django.conf import settings
import logging

from core.models import Patient, Doctor, Encounter
from .serializers import *

logger = logging.getLogger(__name__)


[docs] class DoctorViewSet(viewsets.ModelViewSet): """ ViewSet per gestione medici """ queryset = Doctor.objects.all() serializer_class = DoctorSerializer @action(detail=True, methods=['get']) def encounters(self, request, pk=None): """Ottieni tutti gli encounter di un medico""" doctor = self.get_object() encounters = Encounter.objects.filter(doctor=doctor) serializer = EncounterSerializer(encounters, many=True) return Response(serializer.data)
[docs] class PatientViewSet(viewsets.ModelViewSet): """ ViewSet per gestione pazienti """ queryset = Patient.objects.all() serializer_class = PatientSerializer @action(detail=True, methods=['get']) def encounters(self, request, pk=None): """Ottieni tutti gli encounter di un paziente""" patient = self.get_object() encounters = Encounter.objects.filter(patient=patient) serializer = EncounterSerializer(encounters, many=True) return Response(serializer.data)
[docs] class EncounterViewSet(viewsets.ModelViewSet): """ ViewSet per gestione encounters di Pronto Soccorso """ queryset = Encounter.objects.all() serializer_class = EncounterSerializer ordering_fields = ['admission_time', 'triage_priority'] ordering = ['-admission_time']
[docs] class TranscribeAudioView(APIView): """ Endpoint per trascrizione audio """ parser_classes = (MultiPartParser, FormParser)
[docs] def post(self, request, format=None): serializer = TranscribeAudioSerializer(data=request.data) if serializer.is_valid(): # Logica di trascrizione audio (da implementare) return Response({ 'message': 'Audio ricevuto per trascrizione', 'data': serializer.validated_data }, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
[docs] class ProcessClinicalDataView(APIView): """ Endpoint per processamento dati clinici """
[docs] def post(self, request, format=None): serializer = ProcessClinicalDataSerializer(data=request.data) if serializer.is_valid(): # Logica di processamento dati clinici (da implementare) return Response({ 'message': 'Dati clinici processati', 'data': serializer.validated_data }, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
[docs] class GenerateReportView(APIView): """ Endpoint per generazione report PDF """
[docs] def post(self, request, format=None): serializer = GenerateReportSerializer(data=request.data) if serializer.is_valid(): # Logica di generazione report (da implementare) return Response({ 'message': 'Report generato', 'data': serializer.validated_data }, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)