o
    5)i                     @   sL   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 G dd deZ
dS )    )	BaseModel)ApiResponseMixin)
get_logger)OptionalDictAnyc                	   @   s   e Zd ZdZdd Zdeeef dede	e
 fddZd	ed
ede	e
 fddZdedede
fddZddedede	e de
fddZdS )BaseControllerz
    Base controller class that provides PHP trait-like functionality.
    All controllers can inherit from this to get direct access to response methods.
    c                 C   s   t | jj | _d S N)r   	__class____name__lowerlogger)self r   =/var/www/html/oms-prod-mcp/app/controllers/base_controller.py__init__   s   zBaseController.__init__paramsrequired_fieldsreturnc                 C   sl   t |tr	| }g }|D ]}||vs|| du s|| dkr$|| q|r4| d|t| dS dS )aA  
        Validate required parameters and return error response if validation fails.

        Args:
            params: Dictionary of parameters to validate
            required_fields: List of required field names

        Returns:
            Error response tuple if validation fails, None if validation passes
        N zMissing required parameters)messagemissing_fieldsprovided_params)
isinstancer   
model_dumpappendbad_requestlistkeys)r   r   r   r   fieldr   r   r   validate_required_params   s   
 

z'BaseController.validate_required_paramsvalue
param_namec              	   C   s@   zt | W dS  ttfy   | d| d||d Y S w )a1  
        Validate integer parameter and return error response if invalid.

        Args:
            value: String value to validate
            param_name: Name of the parameter for error messaging

        Returns:
            Error response tuple if validation fails, None if validation passes
        NzInvalid z format. Must be an integer.)r   provided_valuer"   )int
ValueError	TypeErrorr   )r   r!   r"   r   r   r   validate_integer_param,   s   
z%BaseController.validate_integer_paramerror	operationc                 C   s<   | j jd| dt| dd | t|jd| dS )a  
        Handle database errors consistently across controllers.

        Args:
            error: The exception that occurred
            operation: Description of the operation that failed

        Returns:
            Appropriate error response tuple
        zDatabase error in z: T)exc_infozDatabase operation failed: )r(   r   )r   r(   strserver_errortyper   )r   r(   r)   r   r   r   handle_database_errorA   s
    z$BaseController.handle_database_errorNdatar   keyc                 C   s   | j | | j||dS )z
        Log success message and return formatted response.

        Args:
            data: Response data
            message: Log message
            key: Optional response key

        Returns:
            Success response tuple
        )r0   )r   infook)r   r/   r   r0   r   r   r   log_and_return_successS   s   z%BaseController.log_and_return_successr	   )r   
__module____qualname____doc__r   r   r+   r   r   r   tupler    r'   	Exceptionr.   r3   r   r   r   r   r      s    "$r   N)pydanticr   app.utils.api_response_mixinr   app.utils.helpersr   typingr   r   r   r   r   r   r   r   <module>   s
    