File size: 4,963 Bytes
1d77a32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acc1d5b
1d77a32
 
 
 
 
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import sqlite3
from contextlib import contextmanager

DATABASE_PATH = "database.db"  # Chemin de la base de données

# Gestionnaire de contexte pour gérer les connexions
@contextmanager
def connect_db():
    conn = sqlite3.connect(DATABASE_PATH)
    try:
        yield conn
    finally:
        conn.commit()
        conn.close()

# Classe responsable de la base de données
class DatabaseHandler:
    def __init__(self, db_path=DATABASE_PATH):
        self.db_path = db_path
        self._initialize_db()

    def _initialize_db(self):
        with connect_db() as conn:
            cursor = conn.cursor()
            cursor.execute('''CREATE TABLE IF NOT EXISTS prompts (
                                id INTEGER PRIMARY KEY AUTOINCREMENT,
                                type TEXT NOT NULL CHECK(type IN ('installation', 'difficult')),
                                num INTEGER NOT NULL,
                                title TEXT NOT NULL,
                                prompt TEXT NOT NULL
                              );''')
            if not self._is_data_present(cursor):
                self._load_default_data(cursor)

    def _is_data_present(self, cursor):
        cursor.execute("SELECT COUNT(*) FROM prompts;")
        return cursor.fetchone()[0] > 0

    def _load_default_data(self, cursor):
        data = [
            {"type": "installation", "num": 1, "title": "Contexte et objectifs", "prompt": "context_objectives"},
            {"type": "installation", "num": 2, "title": "Statut social, juridique et fiscal", "prompt": "social_legal_fiscal_status"},
            {"type": "installation", "num": 3, "title": "Moyens humains", "prompt": "human_resources"},
            {"type": "installation", "num": 4, "title": "Moyens de production", "prompt": "production_resources"},
            {"type": "installation", "num": 5, "title": "Production par atelier", "prompt": "workshop_production"},
            {"type": "difficult", "num": 11, "title": "Contexte et objectifs", "prompt": "difficult  context_objectives"},
            {"type": "difficult", "num": 12, "title": "Statut social, juridique et fiscal", "prompt": "difficult  social_legal_fiscal_status"},
            {"type": "difficult", "num": 13, "title": "Moyens humains", "prompt": "difficult  human_resources"},
            {"type": "difficult", "num": 14, "title": "Moyens de production", "prompt": "difficult  production_resources"},
            {"type": "difficult", "num": 15, "title": "Production par atelier", "prompt": "difficult  workshop_production"}
        ]
        for record in data:
            cursor.execute(
                "INSERT INTO prompts (type, num, title, prompt) VALUES (:type, :num, :title, :prompt);",
                record
            )
        cursor.connection.commit()

    def _rows_to_dicts(self, rows):
        result = []
        for r in rows:
            result.append({
                "id": r[0],
                "type": r[1],
                "num": r[2],
                "title": r[3],
                "prompt_system": r[4],
            })
        return result

    def get_prompts(self):
        with connect_db() as conn:
            cursor = conn.cursor()
            cursor.execute("SELECT * FROM prompts;")
            rows = cursor.fetchall()
            return self._rows_to_dicts(rows)

    def get_prompt_by_filters(self, type_=None, num=None):
        with connect_db() as conn:
            cursor = conn.cursor()
            query = "SELECT * FROM prompts"
            conditions = []
            params = []
            
            if type_:
                conditions.append("type = ?")
                params.append(type_)
            if num:
                conditions.append("num = ?")
                params.append(num)
            
            if conditions:
                query += " WHERE " + " AND ".join(conditions)
            
            cursor.execute(query, params)
            rows = cursor.fetchall()
            return self._rows_to_dicts(rows)

    def add_prompt(self, type_, num, title, prompt):
        with connect_db() as conn:
            cursor = conn.cursor()
            cursor.execute("INSERT INTO prompts (type, num, title, prompt) VALUES (?, ?, ?);", (type_, num, title, prompt))

    def update_prompt(self, prompt_id, type_=None, num=None, title=None, prompt=None):
        with connect_db() as conn:
            cursor = conn.cursor()
            query = "UPDATE prompts SET "
            fields = []
            params = []
            if type_:
                fields.append("type = ?")
                params.append(type_)
            if title:
                fields.append("title = ?")
                params.append(title)
            if prompt is not None :
                fields.append("prompt = ?")
                params.append(prompt)
            query += ", ".join(fields) + " WHERE num = ?;"
            params.append(prompt_id)
            cursor.execute(query, params)