o
    "i^                     @   sn   d Z ddl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 G dd dee	eef Zee	Zd	S )
z*
CRUD operations for KnowledgeBase model.
    )OptionalList)Session)CRUDBase)KnowledgeBase)KnowledgeBaseCreateKnowledgeBaseUpdatec                   @   sR  e Zd ZdZddddededee dee dee f
d	d
Z	dededee fddZ
dddededee dee fddZdddddededee dededee fddZdddddededee dededee fddZdddddededee dededee fddZdd d!ded"ededee d#edee fd$d%ZdS )&CRUDKnowledgeBasez2
    CRUD operations for KnowledgeBase model.
    N)
created_by	tenant_iddbnamer
   r   returnc                C   sJ   | ttj|k}|r|tj|k}|dur!|tj|k}| S )aC  
        Get knowledge base by name.

        Args:
            db: Database session
            name: Knowledge base name
            created_by: Optional user ID to filter by creator
            tenant_id: Optional tenant ID for multi-tenant isolation

        Returns:
            KnowledgeBase instance or None
        N)queryr   filterr   r
   r   first)selfr   r   r
   r   r    r   ?/lsinfo/ai/hellotax_ai/base_platform/app/crud/knowledge_base.pyget_by_name   s   zCRUDKnowledgeBase.get_by_nameidc                C   s   | j ||dS )z5Alias for delete() method for backward compatibility.)r   )delete)r   r   r   r   r   r   remove/   s   zCRUDKnowledgeBase.remove)r   codec                C   s6   | ttj|k}|dur|tj|k}| S )a  
        Get knowledge base by code.

        Args:
            db: Database session
            code: Knowledge base code
            tenant_id: Optional tenant ID for multi-tenant isolation

        Returns:
            KnowledgeBase instance or None
        N)r   r   r   r   r   r   )r   r   r   r   r   r   r   r   get_by_code3   s   zCRUDKnowledgeBase.get_by_coder   d   )r   skiplimitkb_typer   r   c                C   B   | ttj|k}|dur|tj|k}||| S )an  
        Get knowledge bases by type.

        Args:
            db: Database session
            kb_type: Knowledge base type
            tenant_id: Optional tenant ID for multi-tenant isolation
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of knowledge base instances
        N)r   r   r   typer   offsetr   all)r   r   r   r   r   r   r   r   r   r   get_by_typeL      zCRUDKnowledgeBase.get_by_typestatusc                C   r   )aq  
        Get knowledge bases by status.

        Args:
            db: Database session
            status: Knowledge base status
            tenant_id: Optional tenant ID for multi-tenant isolation
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of knowledge base instances
        N)r   r   r   r%   r   r!   r   r"   )r   r   r%   r   r   r   r   r   r   r   get_by_statusi   r$   zCRUDKnowledgeBase.get_by_statussearch_termc                C   sL   | ttjd| d}|dur|tj|k}||| S )av  
        Search knowledge bases by name.

        Args:
            db: Database session
            search_term: Search term
            tenant_id: Optional tenant ID for multi-tenant isolation
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of matching knowledge base instances
        %N)	r   r   r   r   liker   r!   r   r"   )r   r   r'   r   r   r   r   r   r   r   search_by_name   s   
z CRUDKnowledgeBase.search_by_nameT)r   commitkb_idr+   c                C   sh   | ttj|k}|dur|tj|k}| }|sdS ||_|| |r2|  |	| |S )aq  
        Update knowledge base status.

        Args:
            db: Database session
            kb_id: Knowledge base ID
            status: New status
            tenant_id: Optional tenant ID for multi-tenant isolation
            commit: Whether to commit the transaction

        Returns:
            Updated knowledge base instance or None if not found
        N)
r   r   r   r   r   r   r%   addr+   refresh)r   r   r,   r%   r   r+   r   kbr   r   r   update_status   s   

zCRUDKnowledgeBase.update_status)__name__
__module____qualname____doc__r   strr   intr   r   r   r   r   r#   r&   r*   boolr0   r   r   r   r   r	      s    	
	

"
"
%r	   N)r4   typingr   r   sqlalchemy.ormr   app.crud.baser   app.models.knowledge_baser   app.schemas.knowledge_baser   r   r	   knowledge_baser   r   r   r   <module>   s     E