o
    Ah#                     @   s,  d dl Z d dlmZ d dlmZ d dlmZ d dl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mZ dZG dd de jZdedefddZdedededee dee dee dee dee dee defddZdedefddZdededefd d!Zdedefd"d#ZdS )$    N)datetime)ObjectId)	InvalidId)DuplicateKeyError)HTTPException)Optional)get_next_sequence_value_int)VehicleBaseVehicleUpdate)	ASCENDING
DESCENDINGvehiclesc                       s   e Zd Z fddZ  ZS )CustomJSONEncoderc                    s0   t |tr	| S t |trt|S t |S N)
isinstancer   	isoformatr   strsuperdefault)selfobj	__class__ =/var/www/html/moveengine/app/v1/services/platform/vehicles.pyr      s
   

zCustomJSONEncoder.default)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s    r   vehicle_datareturnc              
   C   s   |t  }zSd| v r| d d u rd| d< d| v r!| d d u r!d| d< td|| d< || }t|j| d< t|j| d< dD ]}|| v rRt| | trR| |  | |< q=d| iW S  tyd   t	d	d
d t
yz } zt	ddt| dd }~ww )N	max_speedr   engine_capacitymodel_id_id
vehicle_idcreated_dateupdated_dater     zVehicle creation failedstatus_codedetaili  zServer error: )COLLECTION_NAMEr   
insert_oner   inserted_idr   r   r   r   r   	Exception)r   dbvehicles_collectionresultfielder   r   r   create_vehicle_service   s*   

r6   
account_idskiplimitstatuscreated_date_fromcreated_date_toqsort_by
sort_orderc
              
   C   sz  |	t  }
i }| dkr| |d< |r||d< |s|r2i }|r$t|d|d< |r.t|d|d< ||d< |rF|dd	}d
|id|id|ig|d< dd
dddddddd	}||d}|dkr^tnt}|
||||	|}t
|}g }|D ];}t|d |d< t|d |d< |dd |dd dD ]}||v rt|| tr||  ||< q|| qw|
|}||dS )Nallr7   r:   z%Y-%m-%dz$gtez$lter'   i)z$regexz$optionsmanufacturer_namevehicle_type	fuel_typez$oris_autonomouscan_flycapacity_jobsnumber_of_wheelsr!   )	rC   rB   rD   rE   rF   rG   rH   r!   r'   ascr$   r%    user_idr&   )total_countr   )r-   r   strptimegetr   r   findsortr8   r9   listr   
setdefaultr   r   appendcount_documents)r7   r8   r9   r:   r;   r<   r=   r>   r?   r1   r2   query
date_queryregex_querysort_fields
sort_fieldsort_directioncursorr   formatted_vehiclesvehicler4   rL   r   r   r   get_vehicles_service9   s\   


r^   r%   c                 C   s   zt | }W n ty   tdddw |t d|i}|s%tdddt|d |d< t|d |d< |dd	 |d
d	 dD ]}||v rXt|| trX|| 	 ||< qC|S Nr)   Invalid vehicle IDr*   r$     Vehicle not foundr%   r7   rJ   rK   r&   )
r   r   r   r-   find_oner   rR   r   r   r   )r%   r1   vehicle_object_idr]   r4   r   r   r   read_vehicle_servicew   s"   re   c           
      C   s  |t  }zt| }W n ty   tdddw |d|i}|s'tddddd |  D }t |d	< |	d|id
|i}|j
dkrMtddd|d|i}t|d |d< t|d |d< |dd |dd dD ]}	|	|v rt||	 tr||	  ||	< qr|S )Nr)   r`   r*   r$   ra   rb   c                 S   s   i | ]\}}|d ur||qS r   r   ).0kvr   r   r   
<dictcomp>   s    z*update_vehicle_service.<locals>.<dictcomp>r(   z$setr   r%   r7   rJ   rK   r&   )r-   r   r   r   rc   
model_dumpitemsr   utcnow
update_onematched_countr   rR   r   r   )
r%   r   r1   r2   rd   existing_vehicleupdate_datar3   updated_vehicler4   r   r   r   update_vehicle_service   s6   
rr   c                 C   s   |t  }zt| }W n ty   tdddw |d|i}|s'tddd|d|i t|d |d< t|d |d< |dd	 |d
d	 dD ]}||v rat|| t	ra|| 
 ||< qL|S r_   )r-   r   r   r   rc   
delete_oner   rR   r   r   r   )r%   r1   r2   rd   r]   r4   r   r   r   delete_vehicle_service   s&   rt   )jsonr   bsonr   bson.errorsr   pymongo.errorsr   fastapir   typingr   app.v1.services.sequencer   $app.v1.models.platform.vehiclesmodelr	   r
   pymongor   r   r-   JSONEncoderr   dictr6   r   intr^   re   rr   rt   r   r   r   r   <module>   s6    	
>$