20151109000001_create_chat.rb 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. class CreateChat < ActiveRecord::Migration
  2. def up
  3. create_table :chats do |t|
  4. t.string :name, limit: 250, null: true
  5. t.integer :max_queue, null: false, default: 5
  6. t.string :note, limit: 250, null: true
  7. t.boolean :active, null: false, default: true
  8. t.boolean :public, null: false, default: false
  9. t.string :preferences, limit: 5000, null: true
  10. t.integer :updated_by_id, null: false
  11. t.integer :created_by_id, null: false
  12. t.timestamps null: false
  13. end
  14. add_index :chats, [:name], unique: true
  15. create_table :chat_topics do |t|
  16. t.integer :chat_id, null: false
  17. t.string :name, limit: 250, null: false
  18. t.string :note, limit: 250, null: true
  19. t.integer :updated_by_id, null: false
  20. t.integer :created_by_id, null: false
  21. t.timestamps null: false
  22. end
  23. add_index :chat_topics, [:name], unique: true
  24. create_table :chat_sessions do |t|
  25. t.integer :chat_id, null: false
  26. t.string :session_id, null: false
  27. t.string :name, limit: 250, null: true
  28. t.string :state, limit: 50, null: false, default: 'waiting' # running, closed
  29. t.integer :user_id, null: true
  30. t.text :preferences, limit: 100.kilobytes + 1, null: true
  31. t.integer :updated_by_id, null: true
  32. t.integer :created_by_id, null: true
  33. t.timestamps null: false
  34. end
  35. add_index :chat_sessions, [:session_id]
  36. add_index :chat_sessions, [:state]
  37. add_index :chat_sessions, [:user_id]
  38. add_index :chat_sessions, [:chat_id]
  39. create_table :chat_messages do |t|
  40. t.integer :chat_session_id, null: false
  41. t.string :content, limit: 5000, null: false
  42. t.integer :created_by_id, null: true
  43. t.timestamps null: false
  44. end
  45. add_index :chat_messages, [:chat_session_id]
  46. create_table :chat_agents do |t|
  47. t.boolean :active, null: false, default: true
  48. t.integer :concurrent, null: false, default: 5
  49. t.integer :updated_by_id, null: false
  50. t.integer :created_by_id, null: false
  51. t.timestamps null: false
  52. end
  53. add_index :chat_agents, [:active]
  54. add_index :chat_agents, [:updated_by_id], unique: true
  55. add_index :chat_agents, [:created_by_id], unique: true
  56. # return if it's a new setup
  57. return if !Setting.find_by(name: 'system_init_done')
  58. Role.create_if_not_exists(
  59. name: 'Chat',
  60. note: 'Access to chat feature.',
  61. updated_by_id: 1,
  62. created_by_id: 1
  63. )
  64. chat = Chat.create(
  65. name: 'default',
  66. max_queue: 5,
  67. note: '',
  68. active: true,
  69. updated_by_id: 1,
  70. created_by_id: 1,
  71. )
  72. Scheduler.create_or_update(
  73. name: 'Closed chat sessions where participients are offline.',
  74. method: 'Chat.cleanup_close',
  75. period: 60 * 15,
  76. prio: 2,
  77. active: true,
  78. updated_by_id: 1,
  79. created_by_id: 1,
  80. )
  81. Scheduler.create_or_update(
  82. name: 'Cleanup closed sessions.',
  83. method: 'Chat.cleanup',
  84. period: 5.days,
  85. prio: 2,
  86. active: true,
  87. updated_by_id: 1,
  88. created_by_id: 1,
  89. )
  90. end
  91. def down
  92. drop_table :chat_topics
  93. drop_table :chat_sessions
  94. drop_table :chat_messages
  95. drop_table :chat_agents
  96. drop_table :chats
  97. end
  98. end