- Add comprehensive chat system with modern UI design - Implement admin-based password reset system - Fix template syntax errors and 500 server errors - Add chat routes, API endpoints, and database models - Enhance user interface with Tailwind CSS card-based design - Implement community guidelines and quick action features - Add responsive design for mobile and desktop compatibility - Create support chat functionality with admin integration - Fix JavaScript inheritance in base template - Add database migration for chat system tables Features: ✅ Modern chat interface with room management ✅ Admin-based password reset workflow ✅ Real-time chat with mobile app support ✅ Professional UI with gradient cards and hover effects ✅ Community guidelines and safety features ✅ Responsive design for all devices ✅ Error-free template rendering
161 lines
6.4 KiB
Python
Executable File
161 lines
6.4 KiB
Python
Executable File
#!/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()
|