+
    `ô›j  ã                   ó¨  € R t ^ RIHtHtHtHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHtHtHtHt ]! R.R	7      tR
 R lt]P/                  R]]P0                  R7      ]! ]	4      3R R ll4       t]P5                  R]],          R7      ]! ]	4      3R R ll4       t]P5                  R]],          R7      ]! ]	4      3R R ll4       t]P5                  R]R7      ]! ]	4      3R R ll4       t]P5                  R]],          R7      ]! ]	4      3R R ll4       t]P/                  R]]P0                  R7      ]! ]	4      3R R ll4       t R# )zHPatients addressed by a doctor, and the BLE measurements saved for them.)Ú	APIRouterÚDependsÚHTTPExceptionÚstatus©ÚSession)Úget_db)ÚDoctor)ÚPatient)ÚMeasurement)ÚPatientCreateÚ
PatientOutÚMeasurementCreateÚMeasurementOutÚPatients)Útagsc                óL   € V ^8„  d   QhR\         R,          R\         R,          /# )é   ÚsNÚreturn)Ústr)Úformats   "Ú/D:\projects\ble_backend\app\routers\patients.pyÚ__annotate__r      s"   € ÷ >ñ >Œc�D�jð >œS 4�Zñ >ó    c                óV   € \        V \        4      '       d   V P                  RR4      # T # )uu   Strip NUL (0x00) bytes â€” BLE device names often carry null padding and
Postgres text columns reject NUL characters.Ú Ú )Ú
isinstancer   Úreplace)r   s   &r   Ú_cleanr       s&   € ô %/¨q´#×$6Ò$6ˆ1�9‰9�V˜RÓ Ð=¸AÐ=r   z	/patients)Úresponse_modelÚstatus_codec                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚpayloadÚdb)r   r   )r   s   "r   r   r      s   € ÷ ñ œMð ¬wñ r   c                 ó°  € VP                  \        V P                  4      '       g   \        \        P
                  R 4      h\        V P                  V P                  V P                  V P                  V P                  V P                  V P                  V P                  R7      pVP                  V4       VP                  4        VP!                  V4       V# )úDoctor not found)Ú	doctor_idÚ	full_nameÚfather_husband_nameÚageÚgenderÚmarital_statusÚmobile_numberÚaddress)Úgetr	   r(   r   r   ÚHTTP_404_NOT_FOUNDr
   r)   r*   r+   r,   r-   r.   r/   ÚaddÚcommitÚrefresh)r$   r%   Úpatients   && r   Úcreate_patientr6      s    € à�6‰6”&˜'×+Ñ+×,Ò,ÜœF×5Ñ5Ð7IÓJÐJÜØ×#Ñ#Ø×#Ñ#Ø#×7Ñ7Ø�K‰KØ�~‰~Ø×-Ñ-Ø×+Ñ+Ø—‘ô	€Gð ‡F�Fˆ7„OØ‡I�I„KØ‡J�JˆwÔØ€Nr   )r!   c                ó$   € V ^8„  d   QhR\         /# )r   r%   r   )r   s   "r   r   r   ,   s   € ÷ ñ œ'ñ r   c                ó  € V P                  \        4      P                  \        P                  P	                  4       4      P                  4       pV F2  pVP                  '       d   VP                  P                  MRVn        K4  	  V# )zAEvery patient across all doctors (admin dashboard), newest first.N)	Úqueryr
   Úorder_byÚ
created_atÚdescÚallÚdoctorr)   Údoctor_name)r%   ÚpatientsÚps   &  r   Úlist_all_patientsrB   +   s_   € ð �x‰xœÓ ×)Ñ)¬'×*<Ñ*<×*AÑ*AÓ*CÓD×HÑHÓJ€HÛˆØ./¯h¯h¨h˜Ÿ™×*Ò*¸DˆŽñ à€Or   z/doctors/{doctor_id}/patientsc                ó0   € V ^8„  d   QhR\         R\        /# )r   r(   r%   ©Úintr   )r   s   "r   r   r   5   s   € ÷ 	ñ 	¤sð 	´ñ 	r   c                óJ  € VP                  \        V 4      '       g   \        \        P                  R4      hVP                  \        4      P                  \        P                  V 8H  4      P                  \        P                  P                  4       4      P                  4       # )z:Patients this doctor has already addressed (newest first).r'   )r0   r	   r   r   r1   r9   r
   Úfilterr(   r:   r;   r<   r=   )r(   r%   s   &&r   Úlist_patients_of_doctorrH   4   so   € ð �6‰6”&˜)×$Ò$ÜœF×5Ñ5Ð7IÓJÐJà
�‰”Óß	‰”×!Ñ! YÑ.Ó	/ß	‰”'×$Ñ$×)Ñ)Ó+Ó	,ß	‰‹ð	r   z/patients/{patient_id}c                ó0   € V ^8„  d   QhR\         R\        /# ©r   Ú
patient_idr%   rD   )r   s   "r   r   r   B   s   € ÷ ñ œCð ¤Wñ r   c                 óâ   € VP                  \        V 4      pV'       g   \        \        P                  R 4      hVP
                  '       d   VP
                  P                  Vn        V# RVn        V# )úPatient not foundN)r0   r
   r   r   r1   r>   r)   r?   )rK   r%   r5   s   && r   Úget_patientrN   A   sY   € à�f‰f”W˜jÓ)€GßÜœF×5Ñ5Ð7JÓKÐKØ6=·n·n°n˜'Ÿ.™.×2Ñ2€GÔØ€Nð KO€GÔØ€Nr   z#/patients/{patient_id}/measurementsc                ó0   € V ^8„  d   QhR\         R\        /# rJ   rD   )r   s   "r   r   r   N   s   € ÷ ñ ¤#ð ¬7ñ r   c                 óJ  € VP                  \        V 4      '       g   \        \        P                  R 4      hVP                  \        4      P                  \        P                  V 8H  4      P                  \        P                  P                  4       4      P                  4       # )rM   )r0   r
   r   r   r1   r9   r   rG   rK   r:   r;   r<   r=   )rK   r%   s   &&r   Úlist_measurementsrQ   M   sm   € à�6‰6”'˜:×&Ò&ÜœF×5Ñ5Ð7JÓKÐKà
�‰”Óß	‰”×&Ñ&¨*Ñ4Ó	5ß	‰”+×(Ñ(×-Ñ-Ó/Ó	0ß	‰‹ð	r   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   rK   r$   r%   )rE   r   r   )r   s   "r   r   r   ^   s"   € ÷ ñ ¤ð Ô.?ð ÄWñ r   c                 ó
  € VP                  \        V 4      '       g   \        \        P                  R 4      h\        V \        VP                  4      \        VP                  4      \        VP                  4      \        VP                  4      \        VP                  4      \        VP                  4      VP                  VP                  R7	      pVP                  V4       VP                  4        VP!                  V4       V# )rM   )	rK   Ú	test_typeÚvalueÚunitÚpulser   Údevice_nameÚlatitudeÚ	longitude)r0   r
   r   r   r1   r   r    rT   rU   rV   rW   rX   rY   rZ   r2   r3   r4   )rK   r$   r%   Úms   &&& r   Úadd_measurementr\   Y   sº   € ð �6‰6”'˜:×&Ò&ÜœF×5Ñ5Ð7JÓKÐKÜØÜ˜×*Ñ*Ó+Ü�W—]‘]Ó#Ü�G—L‘LÓ!Ü�W—]‘]Ó#Ü�g—n‘nÓ%Ü˜7×.Ñ.Ó/Ø×!Ñ!Ø×#Ñ#ô
	€Að ‡F�Fˆ1„IØ‡I�I„KØ‡J�Jˆq„MØ€Hr   N)!Ú__doc__Úfastapir   r   r   r   Úsqlalchemy.ormr   Údatabaser   Úmodel.doctorr	   Úmodel.patientr
   Úmodel.measurementr   Úschemasr   r   r   r   Úrouterr    ÚpostÚHTTP_201_CREATEDr6   r0   ÚlistrB   rH   rN   rQ   r\   © r   r   Ú<module>rj      sW  ðÙ Nß =Ó =Ý "å Ý Ý !Ý )ß PÓ Pá	˜˜Ô	%€õ>ð ‡�ˆ[¨À×AXÑAX€ÓYÙ9@À»ö ó Zðð& ‡�ˆK¨¨ZÕ(8€Ó9Ù$+¨F£Oö ó :ðð ‡�Ð+¸DÀÕ<L€ÓMÙ:AÀ&»/ö 	ó Nð	ð ‡�Ð$°Z€Ó@Ù/6°v«ö ó Aðð ‡�Ð1À$À~ÕBV€ÓWÙ5<¸V³_ö ó Xðð ‡�Ø)Ø!Ø×'Ñ'ð ó ñ
 PWÐW]Ëö óò
r   