a
    +hb                     @   s  d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ ddlmZmZmZ dd	lmZmZmZmZ dd
lmZmZ d dlZG dd dejZG dd dejZG dd dejZG dd dejZ edgdd Z!edgdd Z"dS )    )genericsstatus)api_view)Response)IsAuthenticated)MultiPartParser
FormParser)User   )MedicalRecordChatSessionChatMessage)MedicalRecordSerializerChatSessionSerializerChatSessionListSerializerChatMessageSerializer)extract_text_from_imageprocess_chat_messageNc                   @   s.   e Zd ZeZegZeefZ	dd Z
dd ZdS )MedicalRecordListCreateViewc                 C   s   t jj| jjdS N)userr   objectsfilterrequestr   self r   0/home/qiu/health_record_app/backend/api/views.pyget_queryset   s    z(MedicalRecordListCreateView.get_querysetc                 C   sd   | j jd}|jdd  }|j| j j|d}|dv r`t|j	j
\}}||_||_|  d S )Nfile.)r   	file_typeZjpgZjpegZpngZgifZbmp)r   FILESgetnamesplitlowersaver   r   r    pathextracted_textmetadata)r   
serializerr    r#   instancer,   r-   r   r   r   perform_create   s    z*MedicalRecordListCreateView.perform_createN)__name__
__module____qualname__r   serializer_classr   permission_classesr   r   Zparser_classesr   r0   r   r   r   r   r      s
   r   c                   @   s   e Zd ZeZegZdd ZdS )MedicalRecordDetailViewc                 C   s   t jj| jjdS r   r   r   r   r   r   r   -   s    z$MedicalRecordDetailView.get_querysetN)r1   r2   r3   r   r4   r   r5   r   r   r   r   r   r6   )   s   r6   c                   @   s*   e Zd ZegZdd Zdd Zdd ZdS )ChatSessionListCreateViewc                 C   s   | j jdkrtS tS )NGET)r   methodr   r   r   r   r   r   get_serializer_class4   s    z.ChatSessionListCreateView.get_serializer_classc                 C   s   t jj| jjdS r   r   r   r   r   r   r   r   r   r   r   9   s    z&ChatSessionListCreateView.get_querysetc                 C   s   |j | jjd d S r   )r*   r   r   )r   r.   r   r   r   r0   <   s    z(ChatSessionListCreateView.perform_createN)r1   r2   r3   r   r5   r:   r   r0   r   r   r   r   r7   1   s   r7   c                   @   s   e Zd ZeZegZdd ZdS )ChatSessionDetailViewc                 C   s   t jj| jjdS r   r;   r   r   r   r   r   D   s    z"ChatSessionDetailView.get_querysetN)r1   r2   r3   r   r4   r   r5   r   r   r   r   r   r<   @   s   r<   POSTc                 C   s  | j jstdditjdS ztjj|| j d}W n& tjyV   tdditj	d Y S 0 | j
d}|sztdditjdS tjj|d|d	}t||| j \}}tjj|d
|d	}|r|j| |j dkr|jst|dkr|d d d n||_|  tt|j
t|j
dS )NerrorAuthentication requiredr   )idr   zSession not foundcontentzContent is requiredr   )sessionrolerB   	assistant   2   z...)user_message
ai_message)r   is_authenticatedr   r   HTTP_401_UNAUTHORIZEDr   r   r&   DoesNotExistZHTTP_404_NOT_FOUNDdataHTTP_400_BAD_REQUESTr   creater   referenced_recordssetmessagescounttitlelenr*   r   )r   
session_idrC   rB   rH   Zai_responserP   rI   r   r   r   send_messageH   sB    "rW   c              	   C   s   | j jstdditjdS | jd}|s<tdditjdS g }|D ]}|j	dd 
 }tjj| j | jd|j| jd	d
| jdd||d}|dv rt|jj\}}||_||_|  |t|d| idj qDtd|iS )Nr>   r?   r@   fileszNo files providedr!   r"   rT   record_typeotherdescription )r   rT   rY   r[   r    r#   r$   r   )contextrecords)r   rJ   r   r   rK   r%   getlistrN   r'   r(   r)   r   r   rO   rM   r&   r   r    r+   r,   r-   r*   appendr   )r   rX   resultsr    r#   recordr,   r-   r   r   r   upload_and_processy   s.    
rc   )#rest_frameworkr   r   Zrest_framework.decoratorsr   Zrest_framework.responser   Zrest_framework.permissionsr   Zrest_framework.parsersr   r   django.contrib.auth.modelsr	   modelsr   r   r   serializersr   r   r   r   utilsr   r   osZListCreateAPIViewr   ZRetrieveUpdateDestroyAPIViewr6   r7   r<   rW   rc   r   r   r   r   <module>   s"   
0