U
    Ch                  
   @   s  d Z ddlmZmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
mZ e	  ede ZeeZdd	 Zed
 ed ed e ZeedZeeZedee d dZdZedeeeD ]lZeeee  ZeD ]2Zeejej Z!eedej"e!d ed7 Zqe#  ede dee  qede d W 5 Q R X ed ed e ZeedZe$ Z%ede%j&  ede%j'  ede%j de%je%j& d dd  ed! eed"ZeD ]@\Z(Z)e)e%j& d Z*ed#e(pd$d%d&e)d'de*d(d  qe  W 5 Q R X ed) ed d*Z+e, Z-e-ed+d, Z.e Zeed-e+e.e-d.Ze$ Z/ed/e/j&  ed0e/j0  ed1e/j1  ed2e/j2  ed3e/j3  ed4 eed5d6e+iZeD ]T\Z4Z(Z5Z6e5r4ee5d7kr4e5dd7 d8 ne5Z7ed9e(d:d;e4d<d&e7  qW 5 Q R X ed= ed> ed? ed@ edA edB edC edD edE edF edG edH edI edJ edK edL edM edN edO edP edQ edR dS )SzQ
Run this script to fix all activity data issues
Usage: python3 run_all_fixes.py
    )create_enginetextN)datetime	timedelta)load_dotenv)ConfigDATABASE_URLc                    s   | sdS t |  }|r$t | nd |dd}|dkr@dS |dkrLdS |dkrt fd	d
dD rndS t fdd
dD rdS dS |dkrdS dS )z*Categorize activity based on app and titleother z.exe)codeZcursorZwindowsterminalZterminusZnotepadcmdZ
powershellZgitpythonZnodeZnpmZpycharmZintellijZsublimeZatomZvimZproductivity)ZexplorerfinderZnautilussystem)ZchromeZfirefoxZedgeZmsedgeZbraveZoperac                 3   s   | ]}| kV  qd S N .0kwZtitle_lowerr   ./run_all_fixes.py	<genexpr>+   s     z&categorize_activity.<locals>.<genexpr>)ZawsZazureZgcpZ	localhostZgithubz:3000z:8000z:5000serverc                 3   s   | ]}| kV  qd S r   r   r   r   r   r   r   /   s     )ZyoutubeZfacebookZ	instagramZtwitterZredditZnetflixZunproductivebrowser)ZteamsZslackZzoomZskypeZcommunication)strlowerreplaceany)Zapp_namewindow_titleZ	app_lowerZapp_baser   r   r   categorize_activity   s$    r   z(=== FIXING ALL ACTIVITY DATA ISSUES ===
z&STEP 1: Categorizing all activities...z2--------------------------------------------------z
        SELECT id, application_name, window_title
        FROM activity_records
        WHERE category IS NULL OR category = ''
    zFound z uncategorized recordsi  z}
                UPDATE activity_records
                SET category = :category
                WHERE id = :id
            )idcategory   z
Progress: /u   ✅ Categorized z	 records
zSTEP 2: Verifying data...z
        SELECT 
            COUNT(*) as total,
            COUNT(DISTINCT developer_id) as developers,
            COUNT(CASE WHEN category IS NOT NULL THEN 1 END) as categorized
        FROM activity_records
    zTotal records: zTotal developers: zCategorized: z (d   z.1fz%)z
Category breakdown:z
        SELECT category, COUNT(*) as count
        FROM activity_records
        GROUP BY category
        ORDER BY count DESC
    z  ZNULLz<15 z>7z>5.1fz,STEP 3: Testing developer 'ankita_gholap'...Zankita_gholap   )Zdaysa  
        SELECT 
            COUNT(*) as total,
            COUNT(CASE WHEN category = 'productivity' THEN 1 END) as prod,
            COUNT(CASE WHEN category = 'server' THEN 1 END) as server,
            COUNT(CASE WHEN category = 'unproductive' THEN 1 END) as unprod,
            COUNT(CASE WHEN category = 'browser' THEN 1 END) as browser
        FROM activity_records
        WHERE developer_id = :dev_id
        AND timestamp >= :start_date
        AND timestamp <= :end_date
    )dev_id
start_dateend_datezRecords in last 7 days: z  Productivity: z
  Server: z  Unproductive: z  Browser: z
Recent activities:z
        SELECT application_name, category, window_title, timestamp
        FROM activity_records
        WHERE developer_id = :dev_id
        ORDER BY timestamp DESC
        LIMIT 5
    r'   (   z...z  [z<12z] z<20z=
============================================================u   ✅ DATABASE FIXES COMPLETE!z<============================================================z
NOW YOU NEED TO:z)
1. Add the API endpoint to your main.py:z1   - Copy the code from 'working_api_endpoint.py'z'   - Add it to your FastAPI applicationz 
2. Restart your backend server:z%   cd /var/www/html/timesheet/backendz%   # Kill existing process if runningz   # Then start:z   python3 main.pyz   # orz7   uvicorn main:app --reload --host 0.0.0.0 --port 5000z
3. Test the API:z{   curl http://localhost:5000/api/activity-data/ankita_gholap?start_date=2025-09-30T00:00:00Z&end_date=2025-10-07T23:59:59Zz,
4. Clear browser cache and reload dashboardz$
If you still see the 'other' error:z,- The API endpoint code might not be updatedz@- Check if the endpoint is returning 'other' as an error messagez.- Look at the server logs for the actual erroru   
✅ Script complete!)8__doc__Z
sqlalchemyr   r   ossysr   r   Zdotenvr   Zconfigr   getenvZget_database_urlr   Zenginer   printZconnectZconnZexecuteresultlistZrecordslenZ
batch_sizeZcategorizedrangeiZbatchrecordZapplication_namer   r!   r    ZcommitfirstZstatstotalZ
developerscatcountZpctZdeveloper_idZutcnowr)   r(   dataZprodr   Zunprodr   ZapptitletsZtitle_shortr   r   r   r   <module>   s   '



&,


(,