Phase 3.1: Enhanced Chore Logging and Reporting System
This commit is contained in:
81
backend/migrations/002_add_multi_user_chores.py
Normal file
81
backend/migrations/002_add_multi_user_chores.py
Normal file
@@ -0,0 +1,81 @@
|
||||
"""
|
||||
Database migration: Add support for multiple users per chore.
|
||||
|
||||
This creates a chore_assignments junction table to allow
|
||||
multiple users to be assigned to a single chore.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from app.core.database import engine, SessionLocal
|
||||
from sqlalchemy import text
|
||||
|
||||
def create_chore_assignments_table():
|
||||
"""Create chore_assignments table for many-to-many relationship."""
|
||||
db = SessionLocal()
|
||||
|
||||
try:
|
||||
print("=" * 70)
|
||||
print("MIGRATION: Add Multiple Users Per Chore Support")
|
||||
print("=" * 70)
|
||||
print()
|
||||
|
||||
# Check if table already exists
|
||||
result = db.execute(text("SELECT name FROM sqlite_master WHERE type='table' AND name='chore_assignments'"))
|
||||
if result.fetchone():
|
||||
print("✅ chore_assignments table already exists. No migration needed.")
|
||||
return
|
||||
|
||||
print("📋 Creating chore_assignments table...")
|
||||
|
||||
# Create junction table
|
||||
db.execute(text("""
|
||||
CREATE TABLE chore_assignments (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
chore_id INTEGER NOT NULL,
|
||||
user_id INTEGER NOT NULL,
|
||||
completed_at DATETIME,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (chore_id) REFERENCES chores (id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
|
||||
UNIQUE(chore_id, user_id)
|
||||
)
|
||||
"""))
|
||||
|
||||
print("✅ chore_assignments table created!")
|
||||
print()
|
||||
|
||||
print("📋 Migrating existing chore assignments...")
|
||||
|
||||
# Migrate existing assigned_user_id data to new table
|
||||
# For each chore with an assigned_user_id, create an assignment record
|
||||
result = db.execute(text("""
|
||||
INSERT INTO chore_assignments (chore_id, user_id, completed_at)
|
||||
SELECT id, assigned_user_id, completed_at
|
||||
FROM chores
|
||||
WHERE assigned_user_id IS NOT NULL
|
||||
"""))
|
||||
|
||||
migrated_count = result.rowcount
|
||||
db.commit()
|
||||
|
||||
print(f"✅ Migrated {migrated_count} existing chore assignments!")
|
||||
print()
|
||||
print("⚠️ NOTE: The assigned_user_id column in chores table is now deprecated.")
|
||||
print(" It will be kept for backwards compatibility but not used.")
|
||||
print()
|
||||
print("Migration complete!")
|
||||
print()
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Migration failed: {e}")
|
||||
db.rollback()
|
||||
raise
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_chore_assignments_table()
|
||||
Reference in New Issue
Block a user