* Feature 🚀 : Ability to delete messages in chat channels - Sending message ID to frontend - Deleting Message - Use pusher to delete message realtime * Minor Bug 🐞: Show message action only for current user - User can delete or edit their own messages * Test cases added * Bug 🐞: Update message id for receiver Message id was not sent to receiver by pusher * Refactoring🛠: Message controller refactoring * Test Cases📝 : Specs for Delete message added * Feature 🚀 : Ability to edit messages * Test Cases📝 : Specs for Edit message added * added new column discoverable for public channel and changes in elasticsearch * fix corrections * changes in serializer file, added channel_discoverable * added checkbox with discoverable policy * changes in code for discoverable channels * accept and reject member invitation by mod * add joining request to closed groups * fixed merge error * changes in joining member to closed groups * join to closed group * changes in message action of joining * changes in chat upopened json * 🚀Feature : Ability to search Global Channels * touch updated_at in after commit update * 🚀Feature : Ability to send request to discoverable channel * 🚀Feature : Ability to send request to discoverable channel * created new route for joining closed channel * 🚀 Success handle on joining request sent * removed redundant code * join_channel improvement, removed authorization for join channel * list of joining requests * added joining_request status channels on search list * changes in mailer and query builder optimized * 🛠 Adding filter for new Query * added rspec for add membership method in controller * rspec for sending join channel request * invite join request channel list rspec * test case for query builder discoverable * viewable and discoverable channel list * refactored logic for search channels * 🚀 Check if Request already sent * 🛠 Optimizing code and making channelButton Component * 🛠 Optimizing codefor SVG problem * 🛠 Optimized action.js * changes in search controller query * hot fix * removed unwanted code * 🛠 Fix the Channel Name problem * 🛠 Optimizing code further for CodeClimate * added new column discoverable for public channel and changes in elasticsearch * fix corrections * changes in serializer file, added channel_discoverable * added checkbox with discoverable policy * changes in code for discoverable channels * accept and reject member invitation by mod * add joining request to closed groups * fixed merge error * changes in joining member to closed groups * join to closed group * changes in message action of joining * changes in chat upopened json * touch updated_at in after commit update * 🚀Feature : Ability to search Global Channels * 🚀Feature : Ability to send request to discoverable channel * 🚀Feature : Ability to send request to discoverable channel * created new route for joining closed channel * 🚀 Success handle on joining request sent * removed redundant code * join_channel improvement, removed authorization for join channel * list of joining requests * added joining_request status channels on search list * changes in mailer and query builder optimized * added rspec for add membership method in controller * rspec for sending join channel request * invite join request channel list rspec * 🛠 Adding filter for new Query * test case for query builder discoverable * viewable and discoverable channel list * refactored logic for search channels * 🚀 Check if Request already sent * 🛠 Optimizing code and making channelButton Component * 🛠 Optimizing codefor SVG problem * 🛠 Optimized action.js * changes in search controller query * hot fix * 🛠 Fix the Channel Name problem * 🛠 Fixing merge problem * 🛠 Optimizing code further for CodeClimate * updated UI for membership edit * fixed test casses and fixed UI for chat_channel_edit * 🛠napshots added * test cases fixed * 🛠 Test cases added for new component * channel settings accesible only by mod * 🛠 More Test cases added * 🛠 Svg code optimized * 🛠 Svg code optimized in videocontent * optimized code for search query * fix test case for query builder * changes in joining closed channel logic * refactored join channel * redirect to edit channel after joining request * changes in test case for redirect * optimized code * 🛠 Eslint bugs fixed * test case fixed * optimization * olving channel repetition problem * optimization of code for query builder * changes in query builder * test cases fixed * 🛠 Handling reduntant data on frontend * 🛠 Don't show data if no filter query * 🛠 Optimized code for fixing bugs and code coverage * 🛠 Optimizing code further for CodeClimate Co-authored-by: Parasgr-code <paras.gaur@skynox.tech>
98 lines
2.5 KiB
Ruby
98 lines
2.5 KiB
Ruby
class ChatChannelMembership < ApplicationRecord
|
|
attr_accessor :invitation_usernames
|
|
|
|
include Searchable
|
|
SEARCH_SERIALIZER = Search::ChatChannelMembershipSerializer
|
|
SEARCH_CLASS = Search::ChatChannelMembership
|
|
|
|
belongs_to :chat_channel
|
|
belongs_to :user
|
|
|
|
validates :user_id, presence: true, uniqueness: { scope: :chat_channel_id }
|
|
validates :chat_channel_id, presence: true, uniqueness: { scope: :user_id }
|
|
validates :status, inclusion: { in: %w[active inactive pending rejected left_channel removed_from_channel joining_request] }
|
|
validates :role, inclusion: { in: %w[member mod] }
|
|
validate :permission
|
|
|
|
after_commit :index_to_elasticsearch, on: %i[create update]
|
|
after_commit :remove_from_elasticsearch, on: [:destroy]
|
|
|
|
delegate :channel_type, to: :chat_channel
|
|
|
|
scope :eager_load_serialized_data, -> { includes(:user, :channel) }
|
|
|
|
def channel_last_message_at
|
|
chat_channel.last_message_at
|
|
end
|
|
|
|
def channel_status
|
|
chat_channel.status
|
|
end
|
|
|
|
def channel_text
|
|
parsed_channel_name = chat_channel.channel_name&.gsub("chat between", "")&.gsub("and", "")
|
|
"#{parsed_channel_name} #{chat_channel.slug} #{chat_channel.channel_human_names.join(' ')}"
|
|
end
|
|
|
|
def channel_name
|
|
if chat_channel.channel_type == "direct"
|
|
"@#{other_user&.username}"
|
|
else
|
|
chat_channel.channel_name
|
|
end
|
|
end
|
|
|
|
def channel_image
|
|
if chat_channel.channel_type == "direct"
|
|
ProfileImage.new(other_user).get(width: 90)
|
|
else
|
|
ActionController::Base.helpers.asset_path("organization.svg")
|
|
end
|
|
end
|
|
|
|
def channel_messages_count
|
|
chat_channel.messages.size
|
|
end
|
|
|
|
def channel_username
|
|
other_user&.username if chat_channel.channel_type == "direct"
|
|
end
|
|
|
|
def channel_modified_slug
|
|
if chat_channel.channel_type == "direct"
|
|
"@" + other_user&.username
|
|
else
|
|
chat_channel.slug
|
|
end
|
|
end
|
|
|
|
def viewable_by
|
|
user_id
|
|
end
|
|
|
|
def channel_discoverable
|
|
chat_channel.discoverable
|
|
end
|
|
|
|
private
|
|
|
|
def channel_color
|
|
if chat_channel.channel_type == "direct"
|
|
other_user&.decorate&.darker_color
|
|
else
|
|
"#111111"
|
|
end
|
|
end
|
|
|
|
def other_user
|
|
chat_channel.users.where.not(id: user_id).first
|
|
end
|
|
|
|
def permission
|
|
errors.add(:user_id, "is not allowed in chat") if chat_channel.direct? && chat_channel.slug.split("/").exclude?(user.username)
|
|
# To be possibly implemented in future
|
|
# if chat_channel.users.size > 128
|
|
# errors.add(:base, "too many members in channel")
|
|
# end
|
|
end
|
|
end
|