o
    @Tj                     @   sR   d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 G dd dZdS )	uV   Wardrobe service — list, filter, paginate garments with optional cross-user queries.    N)funcselect)AsyncSession)
joinedload)Garmentc                   @   sn   e Zd ZdddddddddedejdB dedB dedB d	edB d
edB dededee	e
 ef fddZdS )WardrobeServiceN      )user_idcategory_maincategory_substylecolorpagesizedbr
   r   r   r   r   r   r   returnc                   s,  g }	|dur|	 tj|k |r|	 tj|k |r#|	 tj|k |r1|	 tjd j| |r?|	 tjd j| tt	t
tj}
|	D ]}|
|}
qKtt ttjj|	  }||I dH  }|
tj |d | |}||I dH }t|   }||fS )zReturn (garments, total_count) with optional filters.

        user_id=None means all users (cross-user query).
        Garment.user relationship is eagerly loaded for user_name access.
        Nr   r   r   )appendr   r
   r   r   tagsastextcontainsr   optionsr   userwherer   countselect_fromidsubqueryexecute
scalar_oneorder_by
created_atdescoffsetlimitlistuniquescalarsall)selfr   r
   r   r   r   r   r   r   filtersbasefcount_qtotalqueryresultgarments r2   =/home/ubuntu/htdocs/ootd-api/app/services/wardrobe_service.pylist_garments   s.   $zWardrobeService.list_garments)__name__
__module____qualname__r   uuidUUIDstrinttupler%   r   r4   r2   r2   r2   r3   r      s6    	
r   )__doc__r8   
sqlalchemyr   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   app.models.garmentr   r   r2   r2   r2   r3   <module>   s    