0022_web_chat_rooms.up.sql 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. -- Migration 0021: Web API Chat Rooms Support
  2. -- This migration adds tables for Web API chat room functionality
  3. -- Chat rooms table
  4. CREATE TABLE IF NOT EXISTS web_chat_rooms (
  5. room_id VARCHAR(255) PRIMARY KEY,
  6. room_name VARCHAR(255) NOT NULL,
  7. description TEXT,
  8. room_type VARCHAR(50) DEFAULT 'userCreated',
  9. category_id VARCHAR(50),
  10. creator_screen_name VARCHAR(16) NOT NULL,
  11. created_at INTEGER NOT NULL,
  12. closed_at INTEGER,
  13. max_participants INTEGER DEFAULT 100
  14. );
  15. -- Create indexes for web_chat_rooms table
  16. CREATE INDEX IF NOT EXISTS idx_web_chat_rooms_name ON web_chat_rooms(room_name);
  17. CREATE INDEX IF NOT EXISTS idx_web_chat_rooms_creator ON web_chat_rooms(creator_screen_name);
  18. CREATE INDEX IF NOT EXISTS idx_web_chat_rooms_created ON web_chat_rooms(created_at);
  19. CREATE INDEX IF NOT EXISTS idx_web_chat_rooms_closed ON web_chat_rooms(closed_at);
  20. -- Chat sessions table (maps users to chat rooms)
  21. CREATE TABLE IF NOT EXISTS web_chat_sessions (
  22. chat_sid VARCHAR(255) PRIMARY KEY,
  23. aimsid VARCHAR(255) NOT NULL,
  24. room_id VARCHAR(255) NOT NULL,
  25. screen_name VARCHAR(16) NOT NULL,
  26. instance_id INTEGER NOT NULL,
  27. joined_at INTEGER NOT NULL,
  28. left_at INTEGER,
  29. FOREIGN KEY (room_id) REFERENCES web_chat_rooms(room_id) ON DELETE CASCADE
  30. );
  31. -- Create indexes for web_chat_sessions table
  32. CREATE INDEX IF NOT EXISTS idx_web_chat_sessions_aimsid ON web_chat_sessions(aimsid);
  33. CREATE INDEX IF NOT EXISTS idx_web_chat_sessions_room ON web_chat_sessions(room_id);
  34. CREATE INDEX IF NOT EXISTS idx_web_chat_sessions_user ON web_chat_sessions(screen_name);
  35. CREATE INDEX IF NOT EXISTS idx_web_chat_sessions_joined ON web_chat_sessions(joined_at);
  36. -- Chat messages table
  37. CREATE TABLE IF NOT EXISTS web_chat_messages (
  38. id INTEGER PRIMARY KEY AUTOINCREMENT,
  39. room_id VARCHAR(255) NOT NULL,
  40. screen_name VARCHAR(16) NOT NULL,
  41. message TEXT NOT NULL,
  42. whisper_target VARCHAR(16),
  43. timestamp INTEGER NOT NULL,
  44. FOREIGN KEY (room_id) REFERENCES web_chat_rooms(room_id) ON DELETE CASCADE
  45. );
  46. -- Create indexes for web_chat_messages table
  47. CREATE INDEX IF NOT EXISTS idx_web_chat_messages_room ON web_chat_messages(room_id);
  48. CREATE INDEX IF NOT EXISTS idx_web_chat_messages_timestamp ON web_chat_messages(timestamp);
  49. CREATE INDEX IF NOT EXISTS idx_web_chat_messages_user ON web_chat_messages(screen_name);
  50. -- Chat participants table (current participants in each room)
  51. CREATE TABLE IF NOT EXISTS web_chat_participants (
  52. room_id VARCHAR(255) NOT NULL,
  53. screen_name VARCHAR(16) NOT NULL,
  54. chat_sid VARCHAR(255) NOT NULL,
  55. joined_at INTEGER NOT NULL,
  56. typing_status VARCHAR(20) DEFAULT 'none',
  57. typing_updated_at INTEGER,
  58. PRIMARY KEY (room_id, screen_name),
  59. FOREIGN KEY (room_id) REFERENCES web_chat_rooms(room_id) ON DELETE CASCADE
  60. );
  61. -- Create indexes for web_chat_participants table
  62. CREATE INDEX IF NOT EXISTS idx_web_chat_participants_room ON web_chat_participants(room_id);
  63. CREATE INDEX IF NOT EXISTS idx_web_chat_participants_user ON web_chat_participants(screen_name);