Phase 3.1: Enhanced Chore Logging and Reporting System

This commit is contained in:
2026-02-05 12:33:51 +11:00
commit e3cae7bfbb
178 changed files with 30105 additions and 0 deletions

View 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()