
    2Yh-                     .   d dl mZmZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dl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mZ d dlmZ  eddg      ZejA                  de	jB                  ee   dddddddddddddddiidddddd d!d"d#iid$d%&       ee      fd'ed(efd)       Z"ejG                  dd*eeee      eee      f   d+dd,d-ddddddddgd*dd.dd/d0d1d2d3d4d5d6d7d8ddddddddgd9d*dd.dd/d:iidi;      d d<d5d5d! ee      fd=ed>e$d?e$d@e$dAe$dBe%d(efdC       Z&ejG                  dDee   dEddddddddddd*ddFdiiddGdddGdHd!dId#iid$dJ;       ee      fdKed(efdL       Z'ejQ                  dDee   dMddddddddddd*ddNdiiddGdddGdHd!dOd#iid$dJ;       ee      fdKed'ed(efdP       Z)ejU                  dDe	jV                  dQdRidGdddGdHd!dSd#iid$dT&       ee      fdKed(efdU       Z,y5)V    )ListUnion)UUID)	APIRouterDependsRequeststatusResponse)JSONResponse)Session)
UserCreateUserResponse
UserUpdate)user_service)get_db)APIException)ResponseModelcreate_responsecreate_error_response)PaginatedResponsez/usersusers)prefixtags/User created successfullyzapplication/jsonexamplez$123e4567-e89b-12d3-a456-426614174000johndoezjohn@example.comJohnDoeTz2025-06-05T10:00:00)idusernameemail
first_name	last_name	is_active
created_at   )datastatus_codesuccessmessage)modeldescriptioncontentzBad RequestzEmail already registered  FzUser registration failed)errorr)   r*   r+   )r-   r.   )r'   r/   )r)   	responses	user_datadbc                    K   t        j                  ||        d{   }t        |dt        j                        S 7  w)z
    Create a new user
    Nr   )r(   r+   r)   )r   create_userr   r	   HTTP_201_CREATED)r2   r3   users      \/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/users/routers/user_router.pyr5   r5      s?     Z ))"i88D+++  9s   ?=!?   z'List of users, with optional paginationexampleszSimple list responseUsers retrieved successfully)summaryvaluezPaginated response2      
   z /api/v1/users?page=2&per_page=10Nz /api/v1/users?page=1&per_page=10z /api/v1/users?page=5&per_page=10)totalpageper_pagenextpreviousfirstlast)metaresult)list	paginated)r1   d   requestskiplimitrB   rC   paginatec                    K   ||dz
  |xs |z  }||}t        | j                        j                  d      d   }t        j                  |||||       d{   }t        |d      S 7 w)ac  
    Get all users with optional pagination
    
    - **paginate**: Set to true to get paginated response
    - **page**: Page number (starts from 1)
    - **per_page**: Items per page
    - **skip**: Number of records to skip (used when page is not provided)
    - **limit**: Maximum number of records to return (used when per_page is not provided)
    Nr?   ?r   )r3   rN   rO   rP   request_urlr;   r(   r+   )strurlsplitr   	get_usersr   )	rM   rN   rO   rB   rC   rP   r3   base_urlr   s	            r8   rX   rX   G   s     f qX./ 7;;%%c*1-H(( E . s   AA-A+A-z
/{user_id}zUser detailsUser retrieved successfullyUser not found  User retrieval failed)r9   r\   user_idc                    K   t        j                  ||        d{   }|t        dddit        j                  d      t        |d      S 7 2w)	z
    Get user by ID
    Nr   r    r[   r]   moduler0   r)   r+   rZ   rT   )r   get_user_by_idr   r	   HTTP_404_NOT_FOUNDr   r^   r3   r7   s      r8   get_userre      sb     ^ ,,R99D|)*11+	
 	
 -  :s   AA3AzUser updatedUser updated successfullyUser update failedc                    K   t        j                  ||        d{   }|t        dddit        j                  d      t        j
                  |||       d{   }t        |d      S 7 Q7 w)	z
    Update user data
    Nr   r    r[   rg   r`   rf   rT   )r   rb   r   r	   rc   update_userr   )r^   r2   r3   r7   updated_users        r8   ri   ri      s     b ,,R99D|)*11(	
 	
 &11"dIFFL+  : Gs!   A2A.?A2A0A20A2r-   zUser deletedUser deletion failed)   r\   c                   K   t        j                  ||        d{   }|t        dddit        j                  d      t        j
                  ||       d{    t        dt        j                        S 7 ^7 !w)	z%
    Delete a user (soft delete)
    Nr   r    r[   rk   r`   zUser deleted successfully)r+   r)   )r   rb   r   r	   rc   delete_userr   HTTP_204_NO_CONTENTrd   s      r8   rn   rn   0  s     < ,,R99D|)*11*	
 	
 
"
"2t
,,,+..  : -s!   A?A;>A?A= A?=A?)-typingr   r   uuidr   fastapir   r   r   r	   r
   fastapi.responsesr   sqlalchemy.ormr   #src.apps.users.schemas.user_schemasr   r   r   src.apps.users.servicesr   src.core.dependenciesr   src.core.exceptionsr   src.utils.helpers.responser   r   r   #src.utils.helpers.pagination_schemar   routerpostr6   r5   getintboolrX   re   putri   deletero   rn        r8   <module>r      sk     A A * " T T 0 ( , \ \ A	('	3 '' #<06""H(1%7*0).)-*?! (+#'#> %
. )"!;'*#(#=	 %	
/$  (R <C6? 	 	 	S(R	 =l);<mL]^jLk>llmD"'= /U4=1C6<5:596K%&
)" 03+/+I&!( (< 2401460R481S0R-& 3Y8A5G:@9>9=:O)*
/&)", 03+/+I3&&)2!4%6:
<  ?D &/''
' ' 	'
 ' ' 	'A?@'T  #<0)""H(1%7*0).)-*?! (+#'#@ %
. ,"!1'*#(#:	 %	
/$  'T &/Q'P,  #<0)""H(1%7*0).)-*?! (+#'#> %
. ,"!1'*#(#7	 %	
/$  'V &/ 	Q'P2 ** >
 ,"!1'*#(#9	 %	
	  0 &/-,r   