U
    Zh                     @   s   d Z ddlmZmZ ddlmZ ddlmZ ddlZej	ej
d eeZe Zede  eeZedded	Zd
d Zdd Zedkre  e  dS )zJ
Script to check and optionally fix developer_id alignment between tables
    )create_enginetext)sessionmaker)ConfigN)levelzConnecting to: F)Z
autocommitZ	autoflushZbindc               
      s  t  } td | td }td |D ],}td|d  d|d  d|d	  d
 q0| td }td |D ]\ }td  d|  q|dd |D }dd |D }td || }|rtd |D ]8 t fdd|D }td  d| d td q|| }|r`td |D ]2 t fdd|D }	td  d|	 d q,|st|sttd td | td  }
td! |
D ](\ }}td"| d#  d$| d% qW 5 Q R X d S )&Nz(
=== CHECKING DEVELOPER ID ALIGNMENT ===zi
            SELECT id, developer_id, name 
            FROM developers 
            ORDER BY id
        z"
Developers in 'developers' table:z  ID: r   z, developer_id: '   z
', name: '   'z
            SELECT DISTINCT developer_id, COUNT(*) as count
            FROM activity_records
            WHERE developer_id IS NOT NULL
            GROUP BY developer_id
            ORDER BY count DESC
        z2
Unique developer_ids in 'activity_records' table:z  developer_id: 'z', activities: c                 S   s   h | ]}|d  qS )r    .0devr
   r
   ./check_developer_alignment.py	<setcomp>/   s     z,check_developer_alignment.<locals>.<setcomp>c                 S   s   h | ]}|d  qS )r   r
   r   r
   r
   r   r   0   s     z
=== ALIGNMENT CHECK ===uG   
⚠️  Developer IDs in activity_records but NOT in developers table:c                 3   s   | ]\}}| kr|V  qd S )Nr
   )r   dcdev_idr
   r   	<genexpr>9   s      z,check_developer_alignment.<locals>.<genexpr>z  - 'z' (z activities)zS    Suggested fix: Check if this matches any developer name in the developers tableu'   
⚠️  Developers with no activities:c                 3   s"   | ]}|d   kr|d V  qdS )r   r   Nr
   r   r   r
   r   r   D   s      z
' (name: 'z')u,   
✅ All developer IDs are properly aligned!z
=== SAMPLE JOIN TEST ===a>  
            SELECT 
                d.developer_id,
                d.name,
                COUNT(ar.id) as activity_count
            FROM developers d
            LEFT JOIN activity_records ar ON d.developer_id = ar.developer_id
            WHERE d.active = true
            GROUP BY d.developer_id, d.name
        zJoin results:z  z (developer_id: z): z activities)SessionLocalprintexecuter   fetchallnext)dbZ
developersr   Zactivity_devscountZdev_table_idsZactivity_table_idsZorphanedZno_activitiesZdev_nameZ	join_testnamer
   r   r   check_developer_alignment   sB    
*
r   c               
   C   s   t  } | td }|rtd td td |D ]B\}}td| d| d td td	| d
| d
| d q:td td W 5 Q R X dS )z,Suggest SQL commands to fix alignment issuesa3  
            SELECT DISTINCT ar.developer_id, COUNT(*) as count
            FROM activity_records ar
            LEFT JOIN developers d ON ar.developer_id = d.developer_id
            WHERE d.developer_id IS NULL 
                AND ar.developer_id IS NOT NULL
            GROUP BY ar.developer_id
        z
=== SUGGESTED FIXES ===z1To fix orphaned activity records, you can either:z3
1. Add missing developers to the developers table:z
-- For developer_id 'z' with z activities:zFINSERT INTO developers (developer_id, name, email, active, created_at)z	VALUES ('z', 'z@company.com', true, NOW());zV
2. OR update activity_records to use existing developer_ids from the developers tablez)   (only if you know the correct mapping)N)r   r   r   r   r   )r   resultr   r   r
   r
   r   suggest_fixes[   s    	r   __main__)__doc__Z
sqlalchemyr   r   Zsqlalchemy.ormr   Zconfigr   ZloggingZbasicConfigINFOZ	getLogger__name__loggerZget_database_urlZDATABASE_URLr   Zenginer   r   r   r
   r
   r
   r   <module>   s   
I