U
    ؠh                     @   s>  d dl mZmZ d dlZd dlmZ d dlmZmZ e  edZ	e	seddZ
edd	Zed
dZeddZeddZde de de
 de de 
Z	ee	Zed e 4Zed eedZe Zed edd D ]&\ZZZede de de d qed eedZe Zeded    ed ed!   ed"ed#   ed$ed%   ed&ed'   ed(ed)   ed) d kr4ed* e Zz0eed+ZejZe   ed,e d- W n> e!k
r2 Z" ze#  ed.e$e"  W 5 dZ"["X Y nX ed/ z\eed0Zd1d2 eD Z%ed3d4&e%  d5e%kreed6 e   ed7 W n6 e!k
r Z" zed8e$e"  W 5 dZ"["X Y nX ed9 d:Z'd;Z(d<Z)zeed=d>e'iZe Z*e*d  d kred?e*d   d@e' dA edBe*d!  dCe*d#   eedDe'e(e)dEZe d  Zed kred?e dFe( dCe)  nedGe( dCe)  nedHe' dA W n6 e!k
r Z" zedIe$e"  W 5 dZ"["X Y nX W 5 Q R X edJ edK edL edM edN edO edP edQ dS )R    )create_enginetextN)load_dotenv)datetimedateDATABASE_URLDB_HOSTZ	localhostDB_PORTZ5432DB_NAMEZtimesheet_dbDB_USERZpostgresDB_PASSWORD zpostgresql://:@/z/=== Fixing Common Causes of API 500 Errors ===
z*1. Checking for case sensitivity issues...a4  
        SELECT 
            CAST(developer_id AS VARCHAR) as original_id,
            LOWER(CAST(developer_id AS VARCHAR)) as lower_id,
            COUNT(*) as record_count
        FROM activity_records
        WHERE developer_id IS NOT NULL
        GROUP BY developer_id
        ORDER BY COUNT(*) DESC
    z   Developer IDs in database:
   z   - 'z' (lowercase: 'z') - z recordsz3
2. Checking for NULL values in critical columns...a  
        SELECT 
            COUNT(*) as total,
            COUNT(CASE WHEN developer_id IS NULL THEN 1 END) as null_dev_id,
            COUNT(CASE WHEN timestamp IS NULL THEN 1 END) as null_timestamp,
            COUNT(CASE WHEN duration IS NULL THEN 1 END) as null_duration,
            COUNT(CASE WHEN application_name IS NULL THEN 1 END) as null_app_name,
            COUNT(CASE WHEN category IS NULL THEN 1 END) as null_category
        FROM activity_records
    z   Total records: z   NULL developer_id:    z   NULL timestamp:    z   NULL duration:    z   NULL application_name:    z   NULL category:    z 
3. Fixing missing categories...z
                UPDATE activity_records
                SET category = 'other'
                WHERE category IS NULL
            u      ✓ Updated z records with default categoryu"      ❌ Error updating categories: z.
4. Creating indexes for better performance...zu
            SELECT indexname 
            FROM pg_indexes 
            WHERE tablename = 'activity_records'
        c                 C   s   g | ]}|d  qS )r    ).0rowr   r   ./fix_activity_api_500.py
<listcomp>^   s     r   z   Existing indexes: z, Zidx_developer_id_lowerz
                CREATE INDEX idx_developer_id_lower 
                ON activity_records (LOWER(CAST(developer_id AS VARCHAR)))
            u+      ✓ Created lowercase developer_id indexu      ⚠️ Index creation: z(
5. Testing activity query with fixes...Zriddhidhakharaz
2025-09-30z
2025-10-08a  
            SELECT 
                COUNT(*) as count,
                MIN(DATE(timestamp)) as min_date,
                MAX(DATE(timestamp)) as max_date
            FROM activity_records
            WHERE LOWER(CAST(developer_id AS VARCHAR)) = LOWER(:dev_id)
        dev_idu      ✓ Found z records for ''z   Date range: z to z
                SELECT COUNT(*) as count
                FROM activity_records
                WHERE LOWER(CAST(developer_id AS VARCHAR)) = LOWER(:dev_id)
                AND DATE(timestamp) BETWEEN :start_date AND :end_date
            )r   
start_dateend_datez records in date range u#      ⚠️ No records in date range u      ❌ No records found for 'u      ❌ Query error: z
6. RECOMMENDATIONS:z5   1. Update your API to use case-insensitive queriesz4   2. Add proper error handling in the API endpointsz)   3. Set default values for NULL columnsz-   4. Add appropriate indexes for performancez7   5. Check the API logs for the specific error messagez
7. Quick Fix for your API:z
   In your API endpoint, change:
   WHERE developer_id = :dev_id
   
   To:
   WHERE LOWER(CAST(developer_id AS VARCHAR)) = LOWER(:dev_id)
)+Z
sqlalchemyr   r   osZdotenvr   r   r   getenvr   r   r	   r
   r   r   ZengineprintZconnectZconnZexecuteresultZfetchallZ
developersZoriglowercountZfetchoneZstatsZbeginZtransZrowcountupdatedZcommit	ExceptioneZrollbackstrZexisting_indexesjoinZtest_dev_idr   r   r   r   r   r   r   <module>   s   
"$
$
	

.