51 lines
1.6 KiB
Ruby
51 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class ChatThread < ActiveRecord::Base
|
|
EXCERPT_LENGTH = 150
|
|
|
|
belongs_to :channel, foreign_key: "channel_id", class_name: "ChatChannel"
|
|
belongs_to :original_message_user, foreign_key: "original_message_user_id", class_name: "User"
|
|
belongs_to :original_message, foreign_key: "original_message_id", class_name: "ChatMessage"
|
|
|
|
has_many :chat_messages,
|
|
-> { order("chat_messages.created_at ASC, chat_messages.id ASC") },
|
|
foreign_key: :thread_id,
|
|
primary_key: :id
|
|
|
|
enum :status, { open: 0, read_only: 1, closed: 2, archived: 3 }, scopes: false
|
|
|
|
def url
|
|
"#{channel.url}/t/#{self.id}"
|
|
end
|
|
|
|
def relative_url
|
|
"#{channel.relative_url}/t/#{self.id}"
|
|
end
|
|
|
|
def excerpt
|
|
original_message.excerpt(max_length: EXCERPT_LENGTH)
|
|
end
|
|
end
|
|
|
|
# == Schema Information
|
|
#
|
|
# Table name: chat_threads
|
|
#
|
|
# id :bigint not null, primary key
|
|
# channel_id :integer not null
|
|
# original_message_id :integer not null
|
|
# original_message_user_id :integer not null
|
|
# status :integer default("open"), not null
|
|
# title :string
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_chat_threads_on_channel_id (channel_id)
|
|
# index_chat_threads_on_channel_id_and_status (channel_id,status)
|
|
# index_chat_threads_on_original_message_id (original_message_id)
|
|
# index_chat_threads_on_original_message_user_id (original_message_user_id)
|
|
# index_chat_threads_on_status (status)
|
|
#
|