
    {i                     r    d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
mZ  G d de      Zd	ed
edefdZy)z 
Response Formatting Middleware
    N)Callable)RequestResponse)BaseHTTPMiddleware)JSONResponseStreamingResponsec                   R     e Zd ZdZ	 	 d
dee   dz  def fdZdede	de
fd	Z xZS )CommonResponseMiddlewarea$  
    Middleware to format all API responses with a common structure.
    
    Wraps response data in a consistent format:
    {
        "data": <original_response>,
        "success": true,
        "message": null
    }
    
    Only applies to JSON responses from specific HTTP methods.
    Nmethodswrap_responsesc                 L    t         |   |       |xs g d| _        || _        y )NGETPOSTPUTPATCHDELETE)super__init__r   r   )selfappr   r   	__class__s       U/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/middleware/response.pyr   z!CommonResponseMiddleware.__init__   s'     	K"K,    request	call_nextreturnc                 B  K    ||       d{   }|j                   | j                  vs| j                  s|S t        |t        t
        f      s|S |j                  dk\  r|S 	 t        |t
              rd}|j                  2 3 d{   }||z  }t        |t              rw|j                  j                  d      }	t        j                  |	      }t        |t              rd|v r|S |ddd}t	        ||j                  t        |j                              S 	 |S 7 7 6 |j                  d      }t        j                  |      }|ddd}t	        ||j                  t        |j                              S # t        j                  t        f$ r}
|cY d}
~
S d}
~
ww xY ww)	z%Format response with common structureN  r   zutf-8Tdatasuccessmessagecontentstatus_codeheadersr!   )methodr   r   
isinstancer   r   r&   body_iteratordecodejsonloadsdictr'   bodyJSONDecodeErrorUnicodeDecodeError)r   r   r   responser%   chunkcontent_strparsed_contentwrapped_responseoriginal_contentes              r   dispatchz!CommonResponseMiddleware.dispatch$   s    #,W#55 >>-T5H5HO (\3D$EFO 3&O1	($56#+#9#9 % %%u$G( Hl3#+==#7#7#@ !%,<!= nd3.8P#O +##$  $, ( 4 4 !1!12 ! 44 C 6$%#9 &nnW5!%K!8 +##$  $, ( 4 4 !1!12 : $$&89 	O	s~   FDAF#E7 DDD	AE7 %F&0E7 FFDAE7 6F7FFFFFF)NT)__name__
__module____qualname____doc__liststrboolr   r   r   r   r9   __classcell__)r   s   @r   r
   r
      sP      %)#	- cT!- 	-Cg C( Cx Cr   r
   r   r   r   c                   K    ||        d{   }| j                   dvr|S |j                  dk\  r|S 	 d}d}|j                  2 3 d{   }||j                         z  }||z  }"7 X7 6 t	        j
                  |      }t        |t              rd|v r|}n|ddd}t        ||j                  t        |j                        	      S # t        j                  t        f$ r |cY S w xY ww)
z
    Functional version of CommonResponsesrc.middleware.
    
    Simplified version that wraps JSON responses in a common format.
    Nr   r   r    r!   Tr    r$   )r(   r&   r*   r+   r,   r-   r)   r.   r   r'   r0   r1   )r   r   r2   r%   r4   r3   r5   r6   s           r   #common_response_middleware_functionrD   j   s     )2'(:":H ~~FF s"#11 	 	%5<<>)KuG! #;	1
 K0 nd+.0H- '  $ ,,))*
 	
   "45 s]   C*A'%C*C	 A+	A)
A+C	 'C*)A++AC	 C*	C'$C*&C''C*)r=   r,   typingr   fastapir   r   starlette.middleware.baser   starlette.responsesr   r   r
   rD    r   r   <module>rJ      sF      % 8 ?[1 [|-w -8 -X` -r   