o
    AhG                     @   s   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 d dl	m
Z
 d dlmZ e je  dZd	ed
edefddZdedejdefddZdd Zdd Zdd Zdee fddZdd Zdd Zdd  ZdS )!    N)datetime)DuplicateKeyError)ReturnDocument)database)get_model_for_collection)Optionaldatacollection_nameitemreturnc                 C   s2   |  d}| |t|d |d< |dd  |S )N_idid)getstrpop)r	   r
   
auto_field r   0/var/www/html/moveengine/app/v1/services/crud.pyserialize_item   s   
r   sequence_namedbc                 C   s,   |d j d| idddiidtjd}|d S )Ncountersr   z$incsequence_value   T)upsertreturn_document)find_one_and_updater   AFTER)r   r   retr   r   r   get_next_sequence_value   s   
r   c              
   C   s  zh|  dd\}}| dd dd  }dddd	d
dddd}||d}	tjt||}
tj|
dd | d| d|	 }tj|
|}t|}t	|d}|
| W d    |W S 1 saw   Y  |W S  ty } ztd| dt| d }~ww )N,r   ;r      pdfjpgpngdocdocxxlsxlsxcsv)zapplication/pdfz
image/jpegz	image/pngzapplication/mswordzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentzapplication/vnd.ms-excelzAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetztext/csvdatT)exist_ok_.wbzFailed to save file for field 'z': )splitr   ospathjoinUPLOAD_BASE_DIRmakedirsbase64	b64decodeopenwrite	Exception
ValueErrorr   )data_url
account_idr	   item_id
field_nameheaderencoded	mime_typeext_mapextdir_path	file_name	file_path
file_bytesfer   r   r   save_uploaded_file   s8   


rK   c                    s|   |   D ]7\}t|tr|drt| | < qt|tr;tdd |D r; fddt|D | < q| S )Ndata:c                 s   $    | ]}t |to|d V  qdS rL   N
isinstancer   
startswith).0vr   r   r   	<genexpr>;      " z&process_file_fields.<locals>.<genexpr>c              
      s*   g | ]\}}t |  d | qS )r-   )rK   )rR   irS   r=   r	   r>   keyr   r   
<listcomp><   s    z'process_file_fields.<locals>.<listcomp>)itemsrP   r   rQ   rK   listall	enumerate)payloadr=   r	   r>   valuer   rW   r   process_file_fields7   s   
r`   c                    s   t | }dd | D   fdd| D }|d	i | }|d|dd|d|  dt|  d|dt i ti | |d| ||  d }||  	|}t
| ||  d|jiS )
Nc                 S   F   i | ]\}}t |tr|d st |trtdd |D r||qS )rL   c                 s   rM   rN   rO   rR   rI   r   r   r   rT   E   rU   z1create_item_service.<locals>.<dictcomp>.<genexpr>rP   r   rQ   r[   r\   rR   krS   r   r   r   
<dictcomp>E      F z'create_item_service.<locals>.<dictcomp>c                       i | ]\}}| vr||qS r   r   rd   file_fieldsr   r   rf   F       r=   user_idr   r   created_dater   )r   rZ   dictupdater   r   r   utcnowr`   
insert_oner   find_oneinserted_id)r	   r^   r   current_usermodel_classnormal_fieldsvalid_payloadresultr   ri   r   create_item_serviceB   s   

&ry   statusc           	         sx   | ddkr	i nd| di} dkr|r||d< t|  |||}|  |}| fdd|D dS )	Nrolesr   r=   subscriptionsrz   c                    s   g | ]}t  |qS r   )r   )rR   rV   r	   r   r   rY   _   s    z%get_items_service.<locals>.<listcomp>)total_countrZ   )r   r[   findskiplimitcount_documents)	r	   r   r   rz   r   rt   filter_rZ   r~   r   r}   r   get_items_serviceV   s    r   c                 C   sF   |  d}|t |i}|ddkr|d|d< t| ||  |S )Nr   r{   r   r=   )intr   r   rr   )r	   r>   r   rt   r   queryr   r   r   get_item_servicea   s
   
r   c           
         s   t | }dd | D   fdd| D }|di | }||d|dt d ti | |d| |}|  dt|i}|dd	krW|d|d< ||  	|d
|i}	|	j
dkrjtdt| ||  |S )Nc                 S   ra   )rL   c                 s   rM   rN   rO   rb   r   r   r   rT   k   rU   z1update_item_service.<locals>.<dictcomp>.<genexpr>rc   rd   r   r   r   rf   k   rg   z'update_item_service.<locals>.<dictcomp>c                    rh   r   r   rd   ri   r   r   rf   l   rk   r=   r   )r=   rl   updated_dater   r{   r   z$setr   Item not foundr   )r   rZ   rn   ro   r   r   rp   r`   r   
update_onematched_countr;   r   rr   )
r	   r>   r^   r   rt   ru   rv   rw   r   rx   r   ri   r   update_item_serviceh   s"   
r   c                 C   s`   |  dt |i}|ddkr|d|d< ||  |}|s$td||  | t| |S )Nr   r{   r   r=   r   )r   r   rr   r;   
delete_oner   )r	   r>   r   rt   r   r
   r   r   r   delete_item_service   s   
r   )r1   r6   r   pymongo.errorsr   pymongor   app.dbr   app.v1.models.crudmodelr   typingr   r2   r3   getcwdr4   r   rn   r   MongoDBr   r   rK   r`   ry   r   r   r   r   r   r   r   r   <module>   s$    	