
    Xj#               
          d dl mZmZ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mZ d dlmZmZmZmZ d dlmZ  ee          Z ed	g
          ZdedededefdZe                    dee                    ee           e e
d                    fdededefd            Ze                     de           ee           e e
d                    fdedededefd            Z!e"                    de           ee           e e
d                    fdedededefd            Z#e$                    dej%                   ee           e e
d                    fdededefd            Z&e                     dej'                   ee           e e
d                    fdee         dedefd            Z(dS )     )	APIRouterDependsHTTPExceptionstatus)Session)get_db)require_update)document_metadata_valuemetadata_field)KnowledgeBaseUser)FieldReorderMetadataFieldCreateMetadataFieldResponseMetadataFieldUpdate)
get_loggerzmetadata-fields)tagsdbknowledge_base_idcurrent_userreturnc                     |                      t                                        t          j        |k                                              }|st          t          j        d          |S )NzKnowledge base not foundstatus_codedetail)queryr   filteridfirstr   r   HTTP_404_NOT_FOUND)r   r   r   kbs       L/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/knowledge/metadata_fields.pycheck_knowledge_base_accessr#      sg     
-	 	 	'	'(8<M(M	N	N	T	T	V	VB 
1:T
 
 
 	
 I    z /bases/{base_id}/metadata-fields)response_modelknowledge_basesbase_idc                 l   t          || |           t          d| dddd d dddd d d	          t          d| d
ddd d dddd d d	          t          d| dddd d dddd d d	          t          d| dddd d dddd d d	          t          d| dddd d dddd d d	          g}t          j        ||           }||z   S )Nr   zDocument Namedocument_nametextFzDocument name (auto-populated)T)r   r   
field_name	field_key
field_typefield_optionsdefault_valueis_required
sort_orderdescription
created_at
updated_at	is_systemUploaderuploaderz/User who uploaded the document (auto-populated)zUpload Dateupload_datedatez0Date when document was uploaded (auto-populated)zLast Update Datelast_update_datez4Date when document was last updated (auto-populated)Sourcesourcez Document source (auto-populated))r   )r#   r   r   get_by_knowledge_base)r'   r   r   system_fieldscustom_fieldss        r"   get_metadata_fieldsrE   !   sg     G\:::%&%8	
 	
 	
 	%! I	
 	
 	
 	%$#J	
 	
 	
 	%)(N	
 	
 	
 	%:	
 	
 	
{LMZ #8wWWWM=((r$   field_inc                 D   t          || |           t          j        || |j                  }|r$t	          t
          j        d|j         d          g d}|j        |vr1t	          t
          j        dd                    |                     |j        dv r:|j	        rt          |j	                  d	k    rt	          t
          j        d
          t                              |j        |                               d           t          j        |||           }|S )N)r   r-   zField key 'z'' already exists in this knowledge baser   r*   textareanumberr;   selectmultiselect$Invalid field_type. Must be one of: , )rK   rL   r   z6field_options is required for select/multiselect types)r-   r'   zCreating metadata field)obj_inr   )r#   r   get_by_field_keyr-   r   r   HTTP_400_BAD_REQUESTr.   joinr/   lenloggerbindinfocreate_with_knowledge_base)r'   rF   r   r   existingvalid_typesfields          r"   create_metadata_fieldr[   y   s_     G\:::.
g1C  H  
3\!3\\\
 
 
 	
 RQQK+--3R$))K:P:PRR
 
 
 	
 777% 	X-C)D)D)I)I"7O    KK(,gK>>CCD]^^^5
8w  E Lr$   z/metadata-fields/{field_id}field_idc                 P   t          j        ||           }|st          t          j        d          t          ||j        |           |j        r>g d}|j        |vr1t          t          j        dd	                    |                     t          j
        |||          }|S )Nr   Metadata field not foundr   rH   rM   rN   )db_objrO   )r   getr   r   r    r#   r   r.   rQ   rR   update)r\   rF   r   r   rZ   rY   s         r"   update_metadata_fieldrc      s     rh///E 
1:T
 
 
 	
  E$;\JJJ UUUk11"7Vdii>T>TVV    !"U8DDDELr$   )r   c                 T   	 t          j        ||           }|st          t          j        d          t          ||j        |           t                              |           	                    d           t          j        ||            t                              |           	                    d           t          j        ||            d S # t          $ rH}t                              |                               d                              d	            d }~ww xY w)
Nr^   r_   r   )r\   z"Deleting document values for fieldzDeleting metadata fieldT)	exceptionzError deleting metadata field)r   ra   r   r   r    r#   r   rT   rU   rV   r
   delete_by_fielddelete	Exceptionopterror)r\   r   r   rZ   es        r"   delete_metadata_fieldrl      s(   "2(333 	"5>X    	$B(?NNNX&&++,PQQQ/XFFFFX&&++,EFFFbX....t   X&&**T*::@@A`aaas   CC 
D'AD""D'z/metadata-fields/batch-reorderreorder_datac                 @   | st          t          j        d          | D ]Y}t          j        ||j                  }|s$t          t          j        d|j         d          t          ||j        |           Zd | D             }t          j	        ||           dd	iS )
Nzreorder_data cannot be emptyr   r^   zMetadata field z
 not foundc                 ,    g | ]}|j         |j        d S )r\   r2   rp   ).0items     r"   
<listcomp>z(batch_reorder_fields.<locals>.<listcomp>   s1       GKT]$/BB  r$   )rm   messagezFields reordered successfully)
r   r   rQ   r   ra   r\   r    r#   r   batch_reorder)rm   r   r   rr   rZ   reorder_dicts         r"   batch_reorder_fieldsrw      s      
3<Z
 
 
 	
  O O"2$-888 	"5BBBB    	$B(?NNNN O[  L  ,????677r$   N))fastapir   r   r   r   sqlalchemy.ormr   app.api.depsr   app.api.permissionsr	   app.crud.metadatar
   r   
app.modelsr   r   app.schemas.metadatar   r   r   r   common_loggingr   __name__rT   routerintr#   ra   listrE   postr[   putrc   rg   HTTP_204_NO_CONTENTrl   HTTP_200_OKrw    r$   r"   <module>r      s   = = = = = = = = = = = = " " " " " "       . . . . . . E E E E E E E E * * * * * * * *            & % % % % %	H			*+	,	,	,$'7;    .tDY?Z[[ '&// 0A!B!BCCT) T)T)T) T) T) T) \[T)n /@UVV '&// 0A!B!BCC	 ! 	 	   WVD ):OPP '&// 0A!B!BCC	 ! 	 	   QP. ,&:TUU '&// 0A!B!BCC     VU, -6;MNN '&// 0A!B!BCC8 8|$88 8 8 8 ON8 8 8r$   