Fixed it so follow-up notes can be added to any incidents
This commit is contained in:
@ -55,6 +55,17 @@ class Database:
|
||||
FOREIGN KEY (incident_id) REFERENCES incidents(id)
|
||||
)
|
||||
""")
|
||||
|
||||
conn.execute("""
|
||||
CREATE TABLE IF NOT EXISTS incident_followups (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
incident_id TEXT NOT NULL,
|
||||
moderator_id INTEGER NOT NULL,
|
||||
notes TEXT NOT NULL,
|
||||
timestamp DATETIME NOT NULL,
|
||||
FOREIGN KEY (incident_id) REFERENCES incidents(id)
|
||||
)
|
||||
""")
|
||||
conn.commit()
|
||||
|
||||
def _get_connection(self):
|
||||
@ -120,27 +131,25 @@ class Database:
|
||||
conn.row_factory = sqlite3.Row
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Get incident details
|
||||
cursor.execute("""
|
||||
SELECT * FROM incidents
|
||||
WHERE id = ?
|
||||
""", (incident_id,))
|
||||
# Get incident details and parse timestamp
|
||||
cursor.execute("SELECT * FROM incidents WHERE id = ?", (incident_id,))
|
||||
incident = cursor.fetchone()
|
||||
|
||||
if not incident:
|
||||
return None
|
||||
|
||||
# Get related messages
|
||||
cursor.execute("""
|
||||
SELECT * FROM incident_messages
|
||||
WHERE incident_id = ?
|
||||
ORDER BY timestamp ASC
|
||||
""", (incident_id,))
|
||||
messages = cursor.fetchall()
|
||||
incident_details = dict(incident)
|
||||
incident_details['timestamp'] = datetime.fromisoformat(incident_details['timestamp']) # Convert string to datetime
|
||||
|
||||
# Get messages with parsed timestamps
|
||||
cursor.execute("SELECT * FROM incident_messages WHERE incident_id = ?", (incident_id,))
|
||||
messages = [
|
||||
{**dict(msg), 'timestamp': datetime.fromisoformat(msg['timestamp'])}
|
||||
for msg in cursor.fetchall()
|
||||
]
|
||||
|
||||
return {
|
||||
"details": dict(incident),
|
||||
"messages": [dict(msg) for msg in messages]
|
||||
"details": incident_details,
|
||||
"messages": messages
|
||||
}
|
||||
|
||||
def get_recent_incidents(self, limit: int = 25):
|
||||
@ -154,3 +163,29 @@ class Database:
|
||||
LIMIT ?
|
||||
""", (limit,))
|
||||
return [dict(row) for row in cursor.fetchall()]
|
||||
|
||||
def add_followup(self, incident_id: str, moderator_id: int, notes: str) -> bool:
|
||||
"""Add a follow-up report to an incident"""
|
||||
try:
|
||||
with self._get_connection() as conn:
|
||||
conn.execute("""
|
||||
INSERT INTO incident_followups
|
||||
(incident_id, moderator_id, notes, timestamp)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""", (incident_id, moderator_id, notes, datetime.now()))
|
||||
conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to add followup: {str(e)}")
|
||||
return False
|
||||
|
||||
def get_followups(self, incident_id: str) -> List[Dict]:
|
||||
"""Get follow-ups with proper timestamps"""
|
||||
with self._get_connection() as conn:
|
||||
conn.row_factory = sqlite3.Row
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SELECT * FROM incident_followups WHERE incident_id = ?", (incident_id,))
|
||||
return [
|
||||
{**dict(row), 'timestamp': datetime.fromisoformat(row['timestamp'])}
|
||||
for row in cursor.fetchall()
|
||||
]
|
||||
|
Reference in New Issue
Block a user