File size: 2,296 Bytes
4ded330
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# backend/database.py (ROBUST VERSION)
import sqlite3
from datetime import datetime

DB_NAME = "email_sorter.db"

def init_db():
    """Initializes the database using a context manager for safety."""
    with sqlite3.connect(DB_NAME) as conn:
        cursor = conn.cursor()
        cursor.execute('''
            CREATE TABLE IF NOT EXISTS emails (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                timestamp TEXT NOT NULL,
                email_from TEXT,
                subject TEXT,
                body TEXT,
                predicted_folder TEXT,
                confidence REAL,
                user_feedback TEXT 
            )
        ''')
    print("Database initialized successfully.")

def add_email_records(records_df):
    """Adds multiple email records from a pandas DataFrame using a context manager."""
    with sqlite3.connect(DB_NAME) as conn:
        records_df['timestamp'] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        records_df['user_feedback'] = None
        
        df_to_save = records_df.rename(columns={
            'From': 'email_from',
            'Subject': 'subject',
            'Body': 'body'
        })
        
        db_columns = ['timestamp', 'email_from', 'subject', 'body', 'predicted_folder', 'confidence', 'user_feedback']
        df_to_save = df_to_save[[col for col in db_columns if col in df_to_save.columns]]

        df_to_save.to_sql('emails', conn, if_exists='append', index=False)

def get_all_emails():
    """Fetches all email records using a context manager."""
    with sqlite3.connect(DB_NAME) as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT id, timestamp, email_from, subject, predicted_folder, confidence, user_feedback FROM emails ORDER BY timestamp DESC")
        records = cursor.fetchall()
        columns = [description[0] for description in cursor.description]
    return records, columns

def update_feedback(record_id, corrected_label):
    """Updates the user_feedback for a specific record using a context manager."""
    with sqlite3.connect(DB_NAME) as conn:
        cursor = conn.cursor()
        cursor.execute("UPDATE emails SET user_feedback = ? WHERE id = ?", (corrected_label, record_id))
    print(f"Updated record ID {record_id} with feedback: {corrected_label}")