Skip to content

Commit

Permalink
Merge pull request #633 from The-Commit-Company/rav-46-code-clean-up
Browse files Browse the repository at this point in the history
Rav 46 code clean up
  • Loading branch information
nikkothari22 authored Jan 19, 2024
2 parents 3d63b6b + dea046e commit bd4746f
Show file tree
Hide file tree
Showing 27 changed files with 481 additions and 476 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export const ViewChannelMembers = ({ presentingElement, isOpen, onDismiss, chann
}

const removeMember = () => {
return call.post('raven.raven_channel_management.doctype.raven_channel_member.raven_channel_member.remove_channel_member', {
return call.post('raven.api.raven_channel_member.remove_channel_member', {
user_id: selectedMember?.name,
channel_id: channelID
}).then(() => {
Expand Down
2 changes: 1 addition & 1 deletion mobile/src/components/features/chat-input/ChatInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type Props = {
}
export const ChatInput = ({ channelID, allChannels, allMembers, onMessageSend }: Props) => {

const { call, loading } = useFrappePostCall('raven.raven_messaging.doctype.raven_message.raven_message.send_message')
const { call, loading } = useFrappePostCall('raven.api.raven_message.send_message')

const [files, setFiles] = useState<File[]>([])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ export const ChatInterface = ({ channel }: { channel: ChannelListItem | DMChanne
*
* */
// Fetch all the messages in the channel
const { data: messages, error: messagesError, mutate: refreshMessages, isLoading: isMessageLoading } = useFrappeGetCall<{ message: MessagesWithDate }>("raven.raven_messaging.doctype.raven_message.raven_message.get_messages_with_dates", {
const { data: messages, error: messagesError, mutate: refreshMessages, isLoading: isMessageLoading } = useFrappeGetCall<{ message: MessagesWithDate }>("raven.api.raven_message.get_messages_with_dates", {
channel_id: channel.name
}, `get_messages_for_channel_${channel.name}`, {
keepPreviousData: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export const PrivateMessages = ({ users, unread_count }: { users: DMUser[], unre

const { mutate } = useChannelList()

const { call } = useFrappePostCall<{ message: string }>("raven.raven_channel_management.doctype.raven_channel.raven_channel.create_direct_message_channel")
const { call } = useFrappePostCall<{ message: string }>("raven.api.raven_channel.create_direct_message_channel")

const history = useHistory();

Expand Down
2 changes: 1 addition & 1 deletion mobile/src/pages/channels/Channels.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export const Channels = () => {
return activeChannels.filter(channel => channel.channel_name.includes(searchTerm))
}, [searchInput, channels])

const { data: unread_count, mutate: update_count } = useFrappeGetCall<{ message: UnreadCountData }>("raven.raven_messaging.doctype.raven_message.raven_message.get_unread_count_for_channels",
const { data: unread_count, mutate: update_count } = useFrappeGetCall<{ message: UnreadCountData }>("raven.api.raven_message.get_unread_count_for_channels",
undefined,
'unread_channel_count', {
// revalidateOnFocus: false,
Expand Down
2 changes: 1 addition & 1 deletion mobile/src/pages/direct-messages/DirectMessageList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export const DirectMessageList = () => {
return users.filter(user => user.full_name.toLowerCase().includes(searchTerm))
}, [users, searchInput])

const { data: unread_count, mutate: update_count } = useFrappeGetCall<{ message: UnreadCountData }>("raven.raven_messaging.doctype.raven_message.raven_message.get_unread_count_for_channels",
const { data: unread_count, mutate: update_count } = useFrappeGetCall<{ message: UnreadCountData }>("raven.api.raven_message.get_unread_count_for_channels",
undefined,
'unread_channel_count', {
// revalidateOnFocus: false,
Expand Down
2 changes: 1 addition & 1 deletion mobile/src/utils/channel/ChannelListProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ const useFetchChannelList = (): ChannelListContextType => {
position: 'bottom',
});
};
const { data, mutate, ...rest } = useFrappeGetCall<{ message: ChannelList }>("raven.raven_channel_management.doctype.raven_channel.raven_channel.get_all_channels", undefined, isLoggedIn ? undefined : null, {
const { data, mutate, ...rest } = useFrappeGetCall<{ message: ChannelList }>("raven.api.raven_channel.get_all_channels", undefined, isLoggedIn ? undefined : null, {
revalidateOnFocus: false,
revalidateIfStale: false,
onError: (error) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export const MessageSearch = ({ onToggleMyChannels, isOpenMyChannels, onToggleSa
const { virtuosoRef } = useContext(VirtuosoRefContext)
const navigate = useNavigate()

const { call, reset } = useFrappePostCall<{ message: string }>("raven.raven_messaging.doctype.raven_message.raven_message.get_index_of_message")
const { call, reset } = useFrappePostCall<{ message: string }>("raven.api.raven_message.get_index_of_message")

const handleNavigateToChannel = (channelID: string) => {
onClose()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ interface FilesSharedInChannelProps {
export const FilesSharedInChannel = ({ channelMembers }: FilesSharedInChannelProps) => {

const { channelID } = useParams()
const { data, error } = useFrappeGetCall<{ message: ChannelFile[] }>("raven.raven_messaging.doctype.raven_message.raven_message.fetch_recent_files", {
const { data, error } = useFrappeGetCall<{ message: ChannelFile[] }>("raven.api.raven_message.fetch_recent_files", {
channel_id: channelID
}, undefined, {
revalidateOnFocus: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Message } from '../../../../../../types/Messaging/Message'
export const useSendMessage = (channelID: string, noOfFiles: number, uploadFiles: () => Promise<void>, handleCancelReply: VoidFunction, selectedMessage?: Message | null) => {

const { mutate } = useSWRConfig()
const { call, loading } = useFrappePostCall('raven.raven_messaging.doctype.raven_message.raven_message.send_message')
const { call, loading } = useFrappePostCall('raven.api.raven_message.send_message')

const sendMessage = async (content: string, json?: any): Promise<void> => {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ interface ChatBoxBodyProps {
export const ChatBoxBody = ({ channelData }: ChatBoxBodyProps) => {

const { currentUser } = useContext(UserContext)
const { data, error, mutate, isLoading } = useFrappeGetCall<{ message: MessagesWithDate }>("raven.raven_messaging.doctype.raven_message.raven_message.get_messages_with_dates", {
const { data, error, mutate, isLoading } = useFrappeGetCall<{ message: MessagesWithDate }>("raven.api.raven_message.get_messages_with_dates", {
channel_id: channelData.name
}, `get_messages_for_channel_${channelData.name}`, {
revalidateOnFocus: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export const ChatHistory = ({ parsedMessages, replyToMessage, channelData }: Cha

const onReplyMessageClick = (messageID: string) => {
if (virtuosoRef?.current) {
call.get('raven.raven_messaging.doctype.raven_message.raven_message.get_index_of_message', {
call.get('raven.api.raven_message.get_index_of_message', {
channel_id: channelData.name,
message_id: messageID
}).then((result) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ const DirectMessageItem = ({ channel, unreadCount }: { channel: DMChannelListIte
const ExtraUsersItemList = () => {

const { extra_users, mutate } = useContext(ChannelListContext) as ChannelListContextType
const { call } = useFrappePostCall<{ message: string }>("raven.raven_channel_management.doctype.raven_channel.raven_channel.create_direct_message_channel")
const { call } = useFrappePostCall<{ message: string }>("raven.api.raven_channel.create_direct_message_channel")

const { toast } = useToast()
const navigate = useNavigate()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ const SavedMessages = () => {

const { virtuosoRef } = useContext(VirtuosoRefContext)

const { data, error } = useFrappeGetCall<{ message: Message[] }>("raven.raven_messaging.doctype.raven_message.raven_message.get_saved_messages", undefined, undefined, {
const { data, error } = useFrappeGetCall<{ message: Message[] }>("raven.api.raven_message.get_saved_messages", undefined, undefined, {
revalidateOnFocus: false
})

const { call, error: indexingError, reset } = useFrappePostCall<{ message: string }>("raven.raven_messaging.doctype.raven_message.raven_message.get_index_of_message")
const { call, error: indexingError, reset } = useFrappePostCall<{ message: string }>("raven.api.raven_message.get_index_of_message")

const handleNavigateToChannel = (channelID: string, _callback: VoidFunction) => {
navigate(`/channel/${channelID}`)
Expand Down
2 changes: 1 addition & 1 deletion raven-app/src/components/layout/Sidebar/SidebarBody.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { BiBookmark } from 'react-icons/bi'

export const SidebarBody = () => {

const { data: unread_count, mutate: update_count } = useFrappeGetCall<{ message: UnreadCountData }>("raven.raven_messaging.doctype.raven_message.raven_message.get_unread_count_for_channels",
const { data: unread_count, mutate: update_count } = useFrappeGetCall<{ message: UnreadCountData }>("raven.api.raven_message.get_unread_count_for_channels",
undefined,
'unread_channel_count', {
// revalidateOnFocus: false,
Expand Down
2 changes: 1 addition & 1 deletion raven-app/src/utils/channel/ChannelListProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export const ChannelListProvider = ({ children }: PropsWithChildren) => {
export const useFetchChannelList = (): ChannelListContextType => {

const { toast } = useToast()
const { data, mutate, ...rest } = useFrappeGetCall<{ message: ChannelList }>("raven.raven_channel_management.doctype.raven_channel.raven_channel.get_all_channels", undefined, undefined, {
const { data, mutate, ...rest } = useFrappeGetCall<{ message: ChannelList }>("raven.api.raven_channel.get_all_channels", undefined, undefined, {
revalidateOnFocus: false,
revalidateIfStale: false,
onError: (error) => {
Expand Down
133 changes: 133 additions & 0 deletions raven/api/raven_channel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import frappe
from frappe import _
from frappe.model.document import Document

channel = frappe.qb.DocType("Raven Channel")
channel_member = frappe.qb.DocType("Raven Channel Member")


@frappe.whitelist()
def get_all_channels(hide_archived=False):
'''
Fetches all channels where current user is a member - both channels and DMs
To be used on the web app.
On mobile app, these are separate lists
'''

# 1. Get "channels" - public, open, private, and DMs
channels = get_channel_list(hide_archived)

# 3. For every channel, we need to fetch the peer's User ID (if it's a DM)
parsed_channels = []
for channel in channels:
parsed_channel = {
**channel,
"peer_user_id": get_peer_user_id(channel.get('name'), channel.get('is_direct_message'), channel.get('is_self_message')),
}

parsed_channels.append(parsed_channel)

channel_list = [
channel for channel in parsed_channels if not channel.get('is_direct_message')]
dm_list = [channel for channel in parsed_channels if channel.get(
'is_direct_message')]

# Get extra users if dm channels length is less than 5
extra_users = []
number_of_dms = len(dm_list)

if number_of_dms < 5:
extra_users = get_extra_users(dm_list)

return {
"channels": channel_list,
"dm_channels": dm_list,
"extra_users": extra_users
}


def get_channel_list(hide_archived=False):
# get List of all channels where current user is a member (all includes public, private, open, and DM channels)
query = (frappe.qb.from_(channel)
.select(channel.name, channel.channel_name, channel.type, channel.channel_description, channel.is_archived, channel.is_direct_message, channel.is_self_message, channel.creation, channel.owner).distinct()
.left_join(channel_member)
.on((channel.name == channel_member.channel_id))
.where((channel.type != "Private") | (channel_member.user_id == frappe.session.user)))

if hide_archived:
query = query.where(channel.is_archived == 0)

return query.run(as_dict=True)


@frappe.whitelist()
def get_channels(hide_archived=False):
channels = get_channel_list(hide_archived)
for channel in channels:
peer_user_id = get_peer_user_id(channel.get('name'), channel.get(
'is_direct_message'), channel.get('is_self_message'))
channel['peer_user_id'] = peer_user_id
if peer_user_id:
user_full_name = frappe.db.get_value(
'User', peer_user_id, 'full_name')
channel['full_name'] = user_full_name
return channels


def get_peer_user_id(channel_id, is_direct_message, is_self_message=False):
'''
For a given channel, fetches the user id of the peer
'''
if is_direct_message == 0:
return None
if is_self_message:
return frappe.session.user
return frappe.db.get_value('Raven Channel Member', {
'channel_id': channel_id,
'user_id': ['!=', frappe.session.user]
}, 'user_id')


def get_extra_users(dm_channels):
'''
Fetch extra users - only when number of DMs is less than 5.
Do not repeat users already in the list
'''
existing_users = [dm_channel.get('peer_user_id')
for dm_channel in dm_channels]
existing_users.append('Administrator')
existing_users.append('Guest')
return frappe.db.get_list('User', filters=[
['name', 'not in', existing_users],
['enabled', '=', 1],
['user_type', '=', 'System User'],
["Has Role", "role", "=", 'Raven User']], fields=['name', 'full_name', 'user_image'])


@frappe.whitelist(methods=['POST'])
def create_direct_message_channel(user_id):
'''
Creates a direct message channel between current user and the user with user_id
The user_id can be the peer or the user themself
1. Check if a channel already exists between the two users
2. If not, create a new channel
3. Check if the user_id is the current user and set is_self_message accordingly
'''
channel_name = frappe.db.get_value("Raven Channel", filters={
"is_direct_message": 1,
"channel_name": ["in", [frappe.session.user + " _ " + user_id, user_id + " _ " + frappe.session.user]]
}, fieldname="name")
if channel_name:
return channel_name
# create direct message channel with user and current user
else:
channel = frappe.get_doc({
"doctype": "Raven Channel",
"channel_name": frappe.session.user + " _ " + user_id,
"is_direct_message": 1,
"is_self_message": frappe.session.user == user_id
})
channel.insert()
if frappe.session.user != user_id:
channel.add_members([user_id], 1)
return channel.name
16 changes: 16 additions & 0 deletions raven/api/raven_channel_member.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import frappe


@frappe.whitelist()
def remove_channel_member(user_id, channel_id):
# Get raven channel member name where user_id and channel_id match
member = frappe.db.get_value("Raven Channel Member", {
"user_id": user_id, "channel_id": channel_id}, ["name"])
# Delete raven channel member
if member:
frappe.delete_doc("Raven Channel Member", member)
frappe.db.commit()
else:
frappe.throw("User is not a member of this channel")

return True
Loading

0 comments on commit bd4746f

Please sign in to comment.