o
    @Tj                     @   s4  d Z ddlZddlmZmZm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 dd	l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 eddgdZej dedeefde
fddZ!ej"dedeefdede
fddZ#ej$dedeefdej%de
fddZ&dS )z$User listing and deletion endpoints.    N)	APIRouterDependsHTTPException)funcselect)AsyncSession)GLOBAL_USER_ID)get_db)FaceEmbedding)Garment)User)UserCreateRequestUserCreateResponseUserDeleteResponseUserListResponseUserSummary)get_or_create_user)delete_user_storagez/api/v1/usersusers)prefixtags )response_modeldbc                    sp   t tjtjttjdttj	tjk
tjtj}| |I dH }| }dd |D }t|dS )z.List all registered users with garment counts.garment_countNc                 S   s    g | ]}t |j|j|jd qS ))idnamer   )r   r   r   r   ).0row r   0/home/ubuntu/htdocs/ootd-api/app/routers/user.py
<listcomp>.   s    zlist_users.<locals>.<listcomp>)r   )r   r   r   r   r   countr   label	outerjoinuser_idgroup_byorder_byexecuteallr   )r   queryresultrowsr   r   r   r    
list_users   s    
	r-   bodyc                    s8   t || jI dH \}}| I dH  t|j|j|dS )zGet or create a user by name.

    If a user with the given name already exists, returns that user.
    Otherwise creates a new one. Name must be unique among non-global users.
    N)r%   r   created)r   r   commitr   r   )r.   r   userr/   r   r   r    create_user:   s   
r2   z
/{user_id}r%   c                    s   | t krtddd|tttj| kI dH }| }|du r)tddd|tt	 t
j| kI dH  }|tt	 tj| kI dH  }||I dH  | I dH  t| }t| |||dS )z|Delete a user and all associated data (garments, faces, images).

    The global user (00000000-...) cannot be deleted.
    i  u0   unknown 사용자는 삭제할 수 없습니다.)status_codedetailNi  u%   사용자를 찾을 수 없습니다.)r%   deleted_garmentsdeleted_facesdeleted_files)r   r   r(   r   r   wherer   scalar_one_or_noner   r"   r   r%   
scalar_oner
   deleter0   r   r   )r%   r   r+   r1   r   
face_countr7   r   r   r    delete_userI   s4   	 r=   )'__doc__uuidfastapir   r   r   
sqlalchemyr   r   sqlalchemy.ext.asyncior   
app.configr   app.dependenciesr	   app.models.facer
   app.models.garmentr   app.models.userr   app.schemas.userr   r   r   r   r   app.services.user_servicer   app.utils.imager   routergetr-   postr2   r;   UUIDr=   r   r   r   r    <module>   sB    