
    n4hP                     N   d dl m Z mZmZ d dlmZ d dlmZmZmZ d dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZ d d
lmZmZ d dlmZ d dlmZmZ d dl m!Z!m"Z"m#Z#m$Z$  eddg      Z%d Z&e%jO                  dejP                  e"      edededefd              Z)e%jU                  dejV                  e#      e ed d        eddd       edd      fdeded e,d!e,d"ee   f
d#              Z-e%jO                  d$ejV                  e$      d%e,dedefd&       Z.y)'    )datetimetimezonedate)Optional)	APIRouterQuerystatusN)ServiceRepository)UserRepository)AppointmentRepository)ServiceSchemaCreateServiceRequestUpdateServiceRequest)CreateAppointmentRequestAppointmentResponseSchema)handles_authenticationuser_dependency)db_dependency)NotFoundExceptionAuthenticationError)ResponseObjectResponseModelListResponseModelBaseResponseModelz/api/appointmentsAppointments)prefixtagsc                     dj                  t        j                  t        j                  d            } t        j
                  t        j                        }t        j                  dt        |             }| d | |z   | |d  z   }|S )N    )kr   )	joinrandomchoicesstringdigitschoiceascii_uppercaserandintlen)r&   letterposcodes       H/var/www/html/phonemate/phone_mate_backend/app/api/appointment_router.pygenerate_coder/      si    WWV^^FMMQ78F]]6112F ..CK
(C$3<& 6#$</DK    z/create)status_coderesponse_modeluserrequestdbc           
        K   | t         t        |      }t        |      }|j                  | j	                  d      d       d {   } | r| j
                  st        d      t               }|j                  | j
                  ||j                  |j                  |j                  |j                  |j                  |j                         d {   }t        j                   |d      S 7 7 w)NemailFconvert_to_entityCompany)
company_idappointment_nonamephonestart_datetimeend_datetime
service_idsummaryAppointment)r   r   r   get_by_emailgetdefault_companyr   r/   create_appointmentr=   r>   r?   r@   rA   rB   r   post)r3   r4   r5   	user_repoappointment_repoappointment_codecreated_appointments          r.   rG   rG       s      |!!r"I,R0''(9U'SSDt++	**$ 0 C C''(\\mm--))%% !D 	! 	 ==,m<< T	s%   AC/C+B	C/C-C/-C/z	/read_all)ge
      d   )rM   lezFilter appointments by date)descriptionstartlimitappointment_datec                 N  K   t        |      }t        |      }|j                  | j                  d      d       d {   } | r| j                  st        d      |j                  | j                  |||       d {   }t        j                  d|d   ||d         S 7 b7 %w)	Nr7   Fr8   r:   r   datatotal_count)r=   
collection	page_sizetotal)	r   r   rD   rE   rF   r   get_by_companyr   get_list)r3   r5   rS   rT   rU   rI   rJ   results           r.   get_appointmentsr_   ?   s      r"I,R0''(9U'SSDt++	**#22	 F &>]#	  Ts!   <B%B!>B%=B#>$B%#B%z/{appointment_id}/cancelappointment_idc                 b  K   |t         t        |      }t        |      }|j                  |j	                  d      d       d {   }|r|j
                  st        d      |j                  | |j
                         d {   }|st        d      t        j                  d      S 7 d7 )w)Nr7   Fr8   r:   rC   )r=   )
r   r   r   rD   rE   rF   r   cancel_appointmentr   cancel)r`   r3   r5   rI   rJ   	cancelleds         r.   rb   rb   ]   s      |!!r"I,R0''(9U'SSDt++	**&99.$J^J^__I..??.. T `s$   AB/B+<B/B-(B/-B/)/r   r   r   typingr   fastapir   r   r	   r#   r%   repositories.service_repositoryr
   repositories.user_repositoryr   #repositories.appointment_repositoryr   schemas.servicer   r   r   schemas.appointmentr   r   utils.auth_dependencyr   r   utils.databaser   utils.exceptionsr   r   utils.responser   r   r   r   routerr/   rH   HTTP_201_CREATEDrG   rE   HTTP_200_OKintr_   rb    r0   r.   <module>ru      sj   - -  , ,   = 7 E U U S I ( C ^ ^	-^4D	E	 YF$;$;L_`=
=%= 	=  a=: KV%7%7HYZ qQraC(',T?\']
  	
 tn  [8 'V5G5GXij//
/ 	/ k/r0   