#!/usr/bin/env python3 """ Chat System Database Migration Adds chat functionality to the Moto Adventure application. """ import os import sys from datetime import datetime # Add the app directory to the Python path sys.path.insert(0, '/opt/site') from app import create_app, db from app.models import ChatRoom, ChatMessage, ChatParticipant def run_migration(): """Run the chat system migration""" app = create_app() with app.app_context(): print(f"[{datetime.now()}] Starting chat system migration...") try: # Create the chat tables print("Creating chat system tables...") db.create_all() # Get or create system user for welcome messages and room ownership print("Setting up system user...") from app.models import User system_user = User.query.filter_by(email='system@motoadventure.local').first() if not system_user: system_user = User( nickname='System', email='system@motoadventure.local', is_admin=True, is_active=True ) system_user.set_password('system123!') # Random password, won't be used db.session.add(system_user) db.session.commit() print(" ✓ Created system user") # Create default chat rooms print("Creating default chat rooms...") # General chat room general_room = ChatRoom.query.filter_by(name="General Discussion").first() if not general_room: general_room = ChatRoom( name="General Discussion", description="General conversation about motorcycles and adventures", is_private=False, is_active=True, created_by_id=system_user.id ) db.session.add(general_room) print(" ✓ Created General Discussion room") # Technical support room support_room = ChatRoom.query.filter_by(name="Technical Support").first() if not support_room: support_room = ChatRoom( name="Technical Support", description="Get help with technical issues and app support", is_private=False, is_active=True, room_type="admin_support", created_by_id=system_user.id ) db.session.add(support_room) print(" ✓ Created Technical Support room") # Route planning room routes_room = ChatRoom.query.filter_by(name="Route Planning").first() if not routes_room: routes_room = ChatRoom( name="Route Planning", description="Discuss routes, share GPX files, and plan adventures", is_private=False, is_active=True, created_by_id=system_user.id ) db.session.add(routes_room) print(" ✓ Created Route Planning room") # Gear & Equipment room gear_room = ChatRoom.query.filter_by(name="Gear & Equipment").first() if not gear_room: gear_room = ChatRoom( name="Gear & Equipment", description="Discuss motorcycle gear, equipment reviews, and recommendations", is_private=False, is_active=True, created_by_id=system_user.id ) db.session.add(gear_room) print(" ✓ Created Gear & Equipment room") # Commit the changes db.session.commit() print("✓ Default chat rooms created successfully") # Add welcome messages to rooms print("Adding welcome messages...") # Add welcome messages if they don't exist rooms_with_messages = [ (general_room, "Welcome to the General Discussion! Share your motorcycle adventures and connect with fellow riders."), (support_room, "Welcome to Technical Support! Our administrators are here to help with any issues or questions."), (routes_room, "Welcome to Route Planning! Share your favorite routes and discover new adventures."), (gear_room, "Welcome to Gear & Equipment! Discuss the best gear for your motorcycle adventures.") ] for room, message_text in rooms_with_messages: existing_message = ChatMessage.query.filter_by( room_id=room.id, user_id=system_user.id, message_type='system' ).first() if not existing_message: welcome_message = ChatMessage( room_id=room.id, user_id=system_user.id, content=message_text, message_type='system' ) db.session.add(welcome_message) db.session.commit() print("✓ Welcome messages added") print(f"[{datetime.now()}] Chat system migration completed successfully!") print("\nChat System Features:") print(" • User-to-user messaging") print(" • Admin support channels") print(" • Post-specific discussions") print(" • Mobile app compatibility") print(" • Real-time messaging") print(" • Profanity filtering") print(" • Message moderation") print("\nDefault Chat Rooms:") print(" • General Discussion") print(" • Technical Support") print(" • Route Planning") print(" • Gear & Equipment") print("\nAPI Endpoints Available:") print(" • /api/v1/chat/* (Mobile app integration)") print(" • /chat/* (Web interface)") except Exception as e: print(f"[ERROR] Migration failed: {e}") db.session.rollback() raise e if __name__ == '__main__': run_migration()