| import sqlite3 |
| from typing import Dict, List, Optional |
| from dataclasses import dataclass |
| from datetime import datetime |
| import json |
|
|
| @dataclass |
| class ProjectState: |
| project_id: str |
| name: str |
| language: str |
| framework: str |
| status: str |
| completion_percentage: float |
| last_modified: datetime |
| code_snippets: Dict[str, str] |
| dependencies: List[str] |
|
|
| class ProjectTracker: |
| def __init__(self, db_path: str = "cogenbai_projects.db"): |
| self.conn = sqlite3.connect(db_path) |
| self._init_db() |
|
|
| def _init_db(self): |
| cursor = self.conn.cursor() |
| cursor.execute(''' |
| CREATE TABLE IF NOT EXISTS projects ( |
| project_id TEXT PRIMARY KEY, |
| name TEXT, |
| language TEXT, |
| framework TEXT, |
| status TEXT, |
| completion_percentage REAL, |
| last_modified TIMESTAMP, |
| code_snippets TEXT, |
| dependencies TEXT |
| ) |
| ''') |
| self.conn.commit() |
|
|
| def create_project(self, project: ProjectState) -> bool: |
| try: |
| cursor = self.conn.cursor() |
| cursor.execute(''' |
| INSERT INTO projects VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) |
| ''', ( |
| project.project_id, |
| project.name, |
| project.language, |
| project.framework, |
| project.status, |
| project.completion_percentage, |
| project.last_modified.isoformat(), |
| json.dumps(project.code_snippets), |
| json.dumps(project.dependencies) |
| )) |
| self.conn.commit() |
| return True |
| except Exception as e: |
| print(f"Error creating project: {e}") |
| return False |
|
|
| def update_project(self, project_id: str, updates: Dict) -> bool: |
| try: |
| cursor = self.conn.cursor() |
| set_clause = ", ".join([f"{k} = ?" for k in updates.keys()]) |
| query = f"UPDATE projects SET {set_clause} WHERE project_id = ?" |
| cursor.execute(query, list(updates.values()) + [project_id]) |
| self.conn.commit() |
| return True |
| except Exception as e: |
| print(f"Error updating project: {e}") |
| return False |
|
|
| def get_project(self, project_id: str) -> Optional[ProjectState]: |
| cursor = self.conn.cursor() |
| cursor.execute("SELECT * FROM projects WHERE project_id = ?", (project_id,)) |
| row = cursor.fetchone() |
| if row: |
| return ProjectState( |
| project_id=row[0], |
| name=row[1], |
| language=row[2], |
| framework=row[3], |
| status=row[4], |
| completion_percentage=row[5], |
| last_modified=datetime.fromisoformat(row[6]), |
| code_snippets=json.loads(row[7]), |
| dependencies=json.loads(row[8]) |
| ) |
| return None |
|
|