
    i                     n    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
  G d de      Z G d d	      Zy
)    )	BaseModelField)List)MongoClient)DuplicateKeyError)ObjectIdc                   ^    e Zd ZU  edd      Zeed<    edd      Zeed<   g Ze	e   ed<   y)CategoryPayload.   )
min_lengthnameslugsubcategoriesN)
__name__
__module____qualname__r   r   str__annotations__r   r   r        //var/www/pod-logistic/pod-api/model/category.pyr
   r
   
   s2    ca(D#(ca(D#(!M49!r   r
   c                   ^    e Zd ZdededefdZdedefdZdee   fdZd	ed
efdZ	d	efdZ
y)CategoryDatabaseModeldb_uridb_namecollection_namec                 t    t        |      | _        | j                  |   | _        | j                  |   | _        y )N)r   clientdb
collection)selfr   r   r   s       r   __init__zCategoryDatabaseModel.__init__   s.    !&)++g&''/2r   category_datareturnc                     |d   |d<   	 | j                   j                  |       |d   S # t        $ r t        d|d    d      t        $ r}t	        dt        |             d }~ww xY w)Nr   _idu    Danh mục có đường dẫn 'u   ' đã tồn tại!   Lỗi Database: )r    
insert_oner   
ValueError	Exceptionr   )r!   r#   es      r   insert_categoryz%CategoryDatabaseModel.insert_category   s    ,V4e		9OO&&}5 ''  	l?f@U?VVijkk 	9.s1vh788	9s   * #A)A$$A)c                     	 t        | j                  j                               }|D ]  }d|v st        |d         |d<    |S # t        $ r}t	        dt        |             d}~ww xY w)u'   Lấy toàn bộ danh sách danh mục.r&   u   Lỗi lấy danh mục: N)listr    findr   r*   )r!   
categoriescatr+   s       r   get_all_categoriesz(CategoryDatabaseModel.get_all_categories'   sy    		A doo2245J! 1C<!$SZCJ1  	A6s1vh?@@	As   ,A A 	A)A$$A)category_iddatac                    	 t        d| d       t        d|        |j                  d      }|rG| j                  j                  d|i      }|r(t	        |j                  d            |k7  rt        d      t        j                  |      rdt        |      i}nd|i}t        d|        | j                  j                  |d|i      }t        d	|j                          |j                  S # t
        $ r}t        d
|        |d}~wt        $ r3}t        dt	        |              t        dt	        |             d}~ww xY w)uB   Hàm tìm và cập nhật Category trong MongoDB (Bản an toàn)u+   --- Bắt đầu cập nhật Category ID: z ---u   Dữ liệu nhận được: r   r&   uK   Đường dẫn (Slug) này đã được sử dụng cho danh mục khác!u   Query tìm kiếm DB: z$setu"   Số bản ghi đã cập nhật: u   Lỗi Logic (Value Error): Nu   Lỗi Exception Hệ thống: r'   )printgetr    find_oner   r)   r   is_valid
update_onemodified_countr*   )	r!   r3   r4   r   existingqueryresultver+   s	            r   update_categoryz%CategoryDatabaseModel.update_category4   sI   	9?}DQR1$89 88F#D??33VTNCHLL$7 8K G$%rss   - 56,*5'23 __//~FF6v7L7L6MNO((( 	/t45H 	923q6(;<.s1vh788	9s$   C-C0 0	E9D		E.EEc                     	 t        j                  |      rdt        |      ind|i}| j                  j                  |      }|j                  S # t
        $ r}t        dt        |             d}~ww xY w)u*   Hàm tìm và xóa Category khỏi MongoDBr&   r'   N)r   r9   r    
delete_onedeleted_countr*   r   )r!   r3   r=   r>   r+   s        r   delete_categoryz%CategoryDatabaseModel.delete_categoryW   ss    	96>6G6G6TUH[12[`bmZnE__//6F''' 	9.s1vh788	9s   AA 	A4A//A4N)r   r   r   r   r"   dictr,   r   r2   r@   rD   r   r   r   r   r      sa    3s 3S 33 3
9T 9c 9ADJ A!93 !9d !9F93 9r   r   N)pydanticr   r   typingr   pymongor   pymongo.errorsr   bsonr   r
   r   r   r   r   <module>rK      s,    %   , 
"i "L9 L9r   