This commit is contained in:
pacnpal
2024-11-16 18:01:08 +00:00
parent 64f75c74c1
commit 8fe8ba0766
2 changed files with 21 additions and 17 deletions

View File

@@ -7,7 +7,8 @@ from typing import List
logger = logging.getLogger("DBSchemaManager")
class SchemaManager:
class DatabaseSchemaManager:
"""Manages database schema creation and updates"""
SCHEMA_VERSION = 1 # Increment when schema changes
@@ -20,11 +21,11 @@ class SchemaManager:
try:
self._create_schema_version_table()
current_version = self._get_schema_version()
if current_version < self.SCHEMA_VERSION:
self._apply_migrations(current_version)
self._update_schema_version()
except sqlite3.Error as e:
logger.error(f"Schema initialization error: {e}")
raise
@@ -33,11 +34,13 @@ class SchemaManager:
"""Create schema version tracking table"""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("""
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS schema_version (
version INTEGER PRIMARY KEY
)
""")
"""
)
# Insert initial version if table is empty
cursor.execute("INSERT OR IGNORE INTO schema_version VALUES (0)")
conn.commit()
@@ -55,15 +58,14 @@ class SchemaManager:
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute(
"UPDATE schema_version SET version = ?",
(self.SCHEMA_VERSION,)
"UPDATE schema_version SET version = ?", (self.SCHEMA_VERSION,)
)
conn.commit()
def _apply_migrations(self, current_version: int) -> None:
"""Apply necessary schema migrations"""
migrations = self._get_migrations(current_version)
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
for migration in migrations:
@@ -77,10 +79,11 @@ class SchemaManager:
def _get_migrations(self, current_version: int) -> List[str]:
"""Get list of migrations to apply"""
migrations = []
# Version 0 to 1: Initial schema
if current_version < 1:
migrations.append("""
migrations.append(
"""
CREATE TABLE IF NOT EXISTS archived_videos (
original_url TEXT PRIMARY KEY,
discord_url TEXT NOT NULL,
@@ -100,10 +103,11 @@ class SchemaManager:
CREATE INDEX IF NOT EXISTS idx_archived_at
ON archived_videos(archived_at);
""")
"""
)
# Add more migrations here as schema evolves
# if current_version < 2:
# migrations.append(...)
return migrations

View File

@@ -4,9 +4,9 @@ import logging
from pathlib import Path
from typing import Optional, Dict, Any, List
from .schema_manager import SchemaManager
from .schema_manager import DatabaseSchemaManager
from .query_manager import DatabaseQueryManager
from .connection_manager import ConnectionManager
from .connection_manager import DatabaseConnectionManager
logger = logging.getLogger("VideoArchiverDB")
@@ -25,8 +25,8 @@ class VideoArchiveDB:
self.db_path.parent.mkdir(parents=True, exist_ok=True)
# Initialize managers
self.connection_manager = ConnectionManager(self.db_path)
self.schema_manager = SchemaManager(self.db_path)
self.connection_manager = DatabaseConnectionManager(self.db_path)
self.schema_manager = DatabaseSchemaManager(self.db_path)
self.query_manager = DatabaseQueryManager(self.connection_manager)
# Initialize database schema