o
    @Tj                  
   @   sN  d dl Z d dlmZmZmZmZmZmZ d dlm	Z	m
Z
 d dlmZ d dl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 eddgdZejdedededeeeefdedededefddZejdededeeeefde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 )    N)	APIRouterDependsFileFormHTTPException
UploadFile)deleteselect)AsyncSession)get_dbget_face_service)FaceEmbedding)User)FaceDeleteResponseFaceIdentifyResponseFaceRegisterResponse)FaceService)delete_imagez/api/v1/facesfaces)prefixtagsz	/register)response_model.image	user_namedbface_servicec              
      s`   |   I dH }z||||I dH }W n ty( } ztdt|dd}~ww tdi |S )u   Register face for a user.

    - If face matches an existing user → adds embedding to that user (face priority)
    - If no match → gets or creates user by name → adds embedding
    N  status_codedetail )readregister
ValueErrorr   strr   )r   r   r   r   image_bytesresulter    r    0/home/ubuntu/htdocs/ootd-api/app/routers/face.pyregister_face   s   r)   z	/identifyc              
      sr   |   I dH }z|||I dH }W n ty' } ztdt|dd}~ww |du r2tdddtdi |S )zIdentify user from face image.Nr   r     u2   매칭되는 사용자를 찾을 수 없습니다.r    )r!   identifyr#   r   r$   r   )r   r   r   r%   r&   r'   r    r    r(   identify_face%   s   r,   z
/{user_id}user_idc                    s   | tttj| kI dH }| }|du rtddd| tttj| kI dH }t	|
  }|s?tddddd |D }| tttj| kI dH  | I dH  |D ]}t| q_t| t|dS )	z6Delete all face embeddings and face images for a user.Nr*   u%   사용자를 찾을 수 없습니다.r   u!   등록된 얼굴이 없습니다.c                 S   s   g | ]}|j qS r    )
image_path).0r'   r    r    r(   
<listcomp>N   s    z delete_faces.<locals>.<listcomp>)r-   deleted_count)executer	   r   whereidscalar_one_or_noner   r   r-   listscalarsallr   commitr   r   len)r-   r   user_resultuserr&   
embeddingsimage_pathspathr    r    r(   delete_faces8   s&    


r@   )#uuidfastapir   r   r   r   r   r   
sqlalchemyr   r	   sqlalchemy.ext.asyncior
   app.dependenciesr   r   app.models.facer   app.models.userr   app.schemas.facer   r   r   app.services.face_servicer   app.utils.imager   routerpostr$   r)   r,   UUIDr@   r    r    r    r(   <module>   sV     