cryogenic22 commited on
Commit
a30f4d0
·
verified ·
1 Parent(s): 8c4b9a4

Update src/core/services/database_service.py

Browse files
src/core/services/database_service.py CHANGED
@@ -29,11 +29,60 @@ class DatabaseService:
29
  conn.close()
30
 
31
  def setup_database(self):
32
- """Create database tables with relationships"""
33
  with self.get_db() as conn:
34
  c = conn.cursor()
35
  c.executescript('''
36
- -- SQL to create tables
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  ''')
38
 
39
  def generate_synthetic_data(self):
@@ -216,7 +265,17 @@ class DatabaseService:
216
  :title, :department, :reports_to_id, :influence_level,
217
  :engagement_score, :preferences, :created_at, :last_contacted
218
  )''', contacts)
219
-
 
 
 
 
 
 
 
 
 
 
220
  def get_user_accounts(self, user_id: str) -> List[Dict]:
221
  """Get accounts associated with user"""
222
  with self.get_db() as conn:
@@ -227,3 +286,15 @@ class DatabaseService:
227
  ORDER BY a.name
228
  """, (user_id,))
229
  return [dict(row) for row in cursor.fetchall()]
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  conn.close()
30
 
31
  def setup_database(self):
 
32
  with self.get_db() as conn:
33
  c = conn.cursor()
34
  c.executescript('''
35
+ CREATE TABLE IF NOT EXISTS users (
36
+ id TEXT PRIMARY KEY,
37
+ email TEXT UNIQUE,
38
+ name TEXT,
39
+ role TEXT,
40
+ department TEXT,
41
+ title TEXT,
42
+ region TEXT,
43
+ quota REAL,
44
+ created_at TEXT,
45
+ last_login TEXT
46
+ );
47
+
48
+ CREATE TABLE IF NOT EXISTS accounts (
49
+ id TEXT PRIMARY KEY,
50
+ name TEXT,
51
+ parent_account_id TEXT,
52
+ industry TEXT,
53
+ status TEXT,
54
+ website TEXT,
55
+ annual_revenue REAL,
56
+ employee_count INTEGER,
57
+ technology_stack TEXT,
58
+ region TEXT,
59
+ address TEXT,
60
+ account_owner_id TEXT,
61
+ engagement_score REAL,
62
+ created_at TEXT,
63
+ last_activity_at TEXT,
64
+ FOREIGN KEY (parent_account_id) REFERENCES accounts (id),
65
+ FOREIGN KEY (account_owner_id) REFERENCES users (id)
66
+ );
67
+
68
+ CREATE TABLE IF NOT EXISTS contacts (
69
+ id TEXT PRIMARY KEY,
70
+ account_id TEXT,
71
+ first_name TEXT,
72
+ last_name TEXT,
73
+ email TEXT,
74
+ phone TEXT,
75
+ title TEXT,
76
+ department TEXT,
77
+ reports_to_id TEXT,
78
+ influence_level TEXT,
79
+ engagement_score REAL,
80
+ preferences TEXT,
81
+ created_at TEXT,
82
+ last_contacted TEXT,
83
+ FOREIGN KEY (account_id) REFERENCES accounts (id),
84
+ FOREIGN KEY (reports_to_id) REFERENCES contacts (id)
85
+ );
86
  ''')
87
 
88
  def generate_synthetic_data(self):
 
265
  :title, :department, :reports_to_id, :influence_level,
266
  :engagement_score, :preferences, :created_at, :last_contacted
267
  )''', contacts)
268
+ def get_user_by_email(self, email: str) -> Optional[Dict]:
269
+ with self.get_db() as conn:
270
+ cursor = conn.execute(
271
+ "SELECT * FROM users WHERE email = ?",
272
+ (email,)
273
+ )
274
+ row = cursor.fetchone()
275
+ if row:
276
+ return dict(row)
277
+ return None
278
+
279
  def get_user_accounts(self, user_id: str) -> List[Dict]:
280
  """Get accounts associated with user"""
281
  with self.get_db() as conn:
 
286
  ORDER BY a.name
287
  """, (user_id,))
288
  return [dict(row) for row in cursor.fetchall()]
289
+ def get_account_metrics(self, account_id: str) -> Dict:
290
+ with self.get_db() as conn:
291
+ contacts_count = conn.execute(
292
+ "SELECT COUNT(*) FROM contacts WHERE account_id = ?",
293
+ (account_id,)
294
+ ).fetchone()[0]
295
+
296
+ return {
297
+ 'contact_count': contacts_count,
298
+ 'interaction_count': 0, # Default for now
299
+ 'avg_sentiment': 0 # Default for now
300
+ }