Init Repo
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
"""
|
||||
Migration script to add notification tables to the database.
|
||||
"""
|
||||
from sqlalchemy import create_engine, text
|
||||
from database import DATABASE_URL
|
||||
import logging
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def migrate():
|
||||
"""Add notification tables to the database."""
|
||||
engine = create_engine(DATABASE_URL)
|
||||
|
||||
with engine.connect() as conn:
|
||||
try:
|
||||
# Create notifications table
|
||||
logger.info("Creating notifications table...")
|
||||
conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS notifications (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL,
|
||||
type VARCHAR(50) NOT NULL,
|
||||
priority VARCHAR(20) DEFAULT 'normal',
|
||||
title VARCHAR(255) NOT NULL,
|
||||
message TEXT NOT NULL,
|
||||
read BOOLEAN DEFAULT 0,
|
||||
project_id INTEGER,
|
||||
task_id INTEGER,
|
||||
submission_id INTEGER,
|
||||
email_sent BOOLEAN DEFAULT 0,
|
||||
email_sent_at DATETIME,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
read_at DATETIME,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (submission_id) REFERENCES submissions(id) ON DELETE CASCADE
|
||||
)
|
||||
"""))
|
||||
|
||||
# Create indexes for notifications
|
||||
logger.info("Creating indexes for notifications table...")
|
||||
conn.execute(text("""
|
||||
CREATE INDEX IF NOT EXISTS idx_notifications_user_id
|
||||
ON notifications(user_id)
|
||||
"""))
|
||||
|
||||
conn.execute(text("""
|
||||
CREATE INDEX IF NOT EXISTS idx_notifications_read
|
||||
ON notifications(read)
|
||||
"""))
|
||||
|
||||
# Create user_notification_preferences table
|
||||
logger.info("Creating user_notification_preferences table...")
|
||||
conn.execute(text("""
|
||||
CREATE TABLE IF NOT EXISTS user_notification_preferences (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL UNIQUE,
|
||||
email_enabled BOOLEAN DEFAULT 1,
|
||||
email_task_assigned BOOLEAN DEFAULT 1,
|
||||
email_task_status_changed BOOLEAN DEFAULT 1,
|
||||
email_submission_reviewed BOOLEAN DEFAULT 1,
|
||||
email_work_submitted BOOLEAN DEFAULT 1,
|
||||
email_deadline_approaching BOOLEAN DEFAULT 1,
|
||||
email_project_update BOOLEAN DEFAULT 1,
|
||||
email_comment_added BOOLEAN DEFAULT 1,
|
||||
inapp_enabled BOOLEAN DEFAULT 1,
|
||||
inapp_task_assigned BOOLEAN DEFAULT 1,
|
||||
inapp_task_status_changed BOOLEAN DEFAULT 1,
|
||||
inapp_submission_reviewed BOOLEAN DEFAULT 1,
|
||||
inapp_work_submitted BOOLEAN DEFAULT 1,
|
||||
inapp_deadline_approaching BOOLEAN DEFAULT 1,
|
||||
inapp_project_update BOOLEAN DEFAULT 1,
|
||||
inapp_comment_added BOOLEAN DEFAULT 1,
|
||||
email_digest_enabled BOOLEAN DEFAULT 0,
|
||||
email_digest_frequency VARCHAR(50) DEFAULT 'daily',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
)
|
||||
"""))
|
||||
|
||||
conn.commit()
|
||||
logger.info("✅ Notification tables created successfully!")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Migration failed: {str(e)}")
|
||||
conn.rollback()
|
||||
raise
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
migrate()
|
||||
Reference in New Issue
Block a user