§
    ƒc•j¢  ã                   óD   — d dl mZ d dlmZ d dlmZ  G d„ d¦  «        ZdS )é    )ÚUUID)ÚOptional)ÚInventoryItemc                   ó*   — e Zd Zd„ Zd„ Zdeddfd„ZdS )ÚInventoryRepositoryc                 ó   — || _         d S )N)Ú_conn)ÚselfÚconns     úGC:\Projects\DSCons\app\modules\inventory\infrastructure\repositories.pyÚ__init__zInventoryRepository.__init__   s   € ØˆŒ
ˆ
ˆ
ó    c                 ó”   — | j                              ¦   «         5 }|                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nul  
                CREATE SCHEMA IF NOT EXISTS inventory;
                CREATE TABLE IF NOT EXISTS inventory.items (
                    id UUID PRIMARY KEY,
                    material_code TEXT NOT NULL,
                    warehouse_id TEXT NOT NULL,
                    quantity_on_hand NUMERIC(18, 4) NOT NULL,
                    reserved_quantity NUMERIC(18, 4) NOT NULL,
                    version INTEGER DEFAULT 1 -- DÃ¹ng cho Optimistic Locking
                );
                CREATE UNIQUE INDEX IF NOT EXISTS idx_inv_mat_wh 
                ON inventory.items(material_code, warehouse_id);
            )r	   ÚcursorÚexecute)r
   Úcurs     r   Úensure_schemaz!InventoryRepository.ensure_schema	   s’   € ØŒZ×ÒÑ Ô ð 	 CØ�KŠKð ñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   š=½AÁAÚitemÚreturnNc           	      ó  — |                       ¦   «          | j                             ¦   «         5 }|                     dt	          |j        ¦  «        |j        |j        |j        |j	        f¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Na­  
                INSERT INTO inventory.items 
                (id, material_code, warehouse_id, quantity_on_hand, reserved_quantity)
                VALUES (%s, %s, %s, %s, %s)
                ON CONFLICT (id) DO UPDATE SET
                    quantity_on_hand = EXCLUDED.quantity_on_hand,
                    reserved_quantity = EXCLUDED.reserved_quantity,
                    version = inventory.items.version + 1;
            )
r   r	   r   r   ÚstrÚidÚmaterial_codeÚwarehouse_idÚquantity_on_handÚreserved_quantity)r
   r   r   s      r   ÚsavezInventoryRepository.save   sÎ   € Ø×ÒÑÔÐØŒZ×ÒÑ Ô ð 	 CØ�KŠKð õ �D”G‘”ØÔ"ØÔ!ØÔ%ØÔ&ðñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ®AA=Á=BÂB)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   © r   r   r   r      sT   € € € € € ðð ð ðð ð ð ˜ð ¨4ð ð ð ð ð ð r   r   N)Úuuidr   Útypingr   Ú%app.modules.inventory.domain.entitiesr   r   r!   r   r   ú<module>r%      sm   ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð%ð %ð %ð %ð %ñ %ô %ð %ð %ð %r   