o
    g                     @   s
  d dl m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 dededee fd	d
Zdedededee fddZdede
dedefddZdededededee f
ddZdedededefddZdedededee fddZdededdfddZdS )    )Session)HTTPException)ListOptional)UserAddress)AddressCreateAddressUpdatedbuser_idreturnc                 C   s   |  ttj|k S )u.   사용자의 모든 주소를 조회합니다.)queryr   filterr
   allr	   r
    r   $/app/app/services/address_service.pyget_user_addresses   s   r   
address_idc                 C   s"   |  ttj|ktj|k S )uY   특정 주소를 조회합니다. 주소가 사용자에게 속하는지 확인합니다.)r   r   r   idr
   first)r	   r   r
   r   r   r   get_address   s   
r   addressc                 C   s^   t ||j|j|j|j|j|j|j|j|j	d
}|j	rt
| | | | |   | | |S )u   
    새 주소를 생성합니다.
    
    만약 이 주소가 기본 주소로 설정된 경우, 다른 모든 주소의 기본 주소 설정을 해제합니다.
    )
r
   titlerecipient_nameaddress_line1address_line2citypostal_codecountryphone
is_default)r   r   r   r   r   r   r   r   r   r    _reset_other_default_addressesaddcommitrefresh)r	   r   r
   
db_addressr   r   r   create_address   s$   


r&   c                 C   sn   t | ||}|s
dS |jdd}d|v r|d rt| | | D ]
\}}t||| q!|   | | |S )u   
    주소를 수정합니다.
    
    만약 이 주소가 기본 주소로 설정된 경우, 다른 모든 주소의 기본 주소 설정을 해제합니다.
    NT)exclude_unsetr    )r   dictr!   itemssetattrr#   r$   )r	   r   r   r
   r%   Zupdate_datakeyvaluer   r   r   update_address/   s   

r-   c                 C   sX   t | ||}|s
dS |j}| | |r&| ttj|k }|r&d|_|   dS )u   
    주소를 삭제합니다.
    
    만약 삭제되는 주소가 기본 주소였다면, 다른 주소를 기본 주소로 설정합니다.
    (다른 주소가 있는 경우에만)
    FT)	r   r    deleter   r   r   r
   r   r#   )r	   r   r
   r%   Zwas_defaultZother_addressr   r   r   delete_addressM   s   

r/   c                 C   s:   t | ||}|s
dS t| | d|_|   | | |S )u2   특정 주소를 기본 주소로 설정합니다.NT)r   r!   r    r#   r$   )r	   r   r
   r%   r   r   r   set_default_addressj   s   

r0   Nc                 C   s,   |  ttj|ktjdkddi dS )uF   사용자의 모든 주소의 기본 주소 설정을 해제합니다.Tr    FN)r   r   r   r
   r    updater   r   r   r   r!   y   s
   
r!   )sqlalchemy.ormr   fastapir   typingr   r   app.models.user_addressr   app.schemas.user_addressr   r   intr   r   r&   r-   boolr/   r0   r!   r   r   r   r   <module>   s,    
