def change_username(user_id, new_name, change_time=None): """ changes username (user_id in db) if it has not been changed in the last six months :param user_id: :param new_name: :param change_time: :return: """ email = get_email_by_id(user_id) if not user_exists(email): return "User doesn't exist" if len(new_name) < 8 or len(new_name) > 30: return "Username needs to be between 8 to 30 characters" new_time = datetime.now() if change_time: new_time = datetime.strptime(change_time, '%Y-%m-%d %H:%M:%S') change_date_list = exec_get_all('SELECT userid_reset FROM users WHERE email = %s', (email,)) change_date = change_date_list[0][0] six_months_later = relativedelta(months=6) if not change_date or (change_date + six_months_later <= new_time): exec_commit('UPDATE users SET userid_reset = %s WHERE email = %s', (new_time, email)) exec_commit('UPDATE users SET user_id = %s WHERE email = %s', (new_name, email)) return "User successfully changed username to " + new_name return "User changed their username in the last 6 months"
def create_direct_message(message_id: int, sender_id: str, receiver_id: str, time_sent: None, message: str) -> str: """ adds a message to db :param message_id: message id :param sender_id: sender's id :param receiver_id: receiver's id :param time_sent: :param message: text i.e. message content :return: """ sender_email = get_email_by_id(sender_id) receiver_email = get_email_by_id(receiver_id) if not user_exists(sender_email): return "User" + sender_email + "doesn't exist" if not user_exists(receiver_email): return "User" + receiver_email + "doesn't exist" init_time = datetime.now() init_time = str(init_time) if time_sent: init_time = datetime.strptime(time_sent, '%Y-%m-%d %H:%M:%S') suspension_dates = exec_get_all('SELECT suspended_since, suspended_till FROM users WHERE email = %s', (sender_email,)) suspended_since = suspension_dates[0][0] suspended_till = suspension_dates[0][1] if suspended_since and suspended_till: if suspended_since < init_time < suspended_till: return sender_email + " is currently suspended until " + suspended_till.strftime("%Y/%m/%d %H:%M:%S") # If no time was given it will default to the current time exec_commit(f'INSERT INTO direct_messages(message_id, sender_id, receiver_id, time_sent, message)' f' VALUES (%s,%s,%s,%s,%s)', (message_id, sender_id, receiver_id, init_time, message)) return "Message sent successfully"
def get_mentions(user_id): """ This will get a list of all unread post and return the list and the number of them """ if not user_exists(get_email_by_id(user_id)): return [], 0 mention_list = exec_get_all('SELECT * FROM mentions WHERE user_id = %s', (user_id,)) return [message_id[0] for message_id in mention_list], len(mention_list)
def get_unread_posts(user_id): """ This function will return the list of all unread posts """ if not user_exists(get_email_by_id(user_id)): return [], 0 unread_list = exec_get_all('SELECT post_id FROM unread_posts WHERE user_id = %s', (user_id,)) return [message_id[0] for message_id in unread_list], len(unread_list)
def user_exists(email): """ checks if a user exists in the system by email :param email: :return: """ matches = exec_get_all('SELECT email FROM users WHERE email = %s', (email,)) return len(matches) == 1
def get_unread_messages(receiver_id): """ can be used to view unread texts as well as count number of unread texts :param receiver_id: :return: """ if not user_exists(get_email_by_id(receiver_id)): return [] unreads = exec_get_all('SELECT * FROM direct_messages WHERE is_read = FALSE AND receiver_id = %s', (receiver_id,)) return unreads
def get_users_in_community(community): """ This function will get the list of all users that are in the given channel """ if not community_exists(community): return [] user_list = exec_get_all('SELECT user_id FROM memberships WHERE community_name = %s', (community,)) return [user[0] for user in user_list]
def read_message(message_id, receiver_id): """ marks message as read :param message_id: :param receiver_id: :return: text content """ texts = exec_get_all('SELECT message FROM direct_messages WHERE message_id = %s AND receiver_id = %s', (message_id, receiver_id)) if len(texts) == 1: exec_commit('UPDATE direct_messages SET is_read = TRUE WHERE message_id = %s', (message_id,)) return texts[0][0]
def populate_tables_db3(): rebuild_tables() populate_tables_db1() create_user('DrMarvin', 'Marvin', 5855556656, '*****@*****.**', '1991-05-16 00:00:00', None, None, None) create_user('Bob12345', 'Bob', 5855654534, '*****@*****.**', '1991-05-17 00:00:00', None, None, None) add_community('Metropolis', ['DailyPlanet', 'Random']) add_community('Comedy', ['ArgumentClinic', 'Dialogs']) user_list = exec_get_all('SELECT user_id FROM users') for user in user_list: add_user_to_community(user[0], 'Comedy') create_user('clarknotsuperman', 'Clark', 5855556434, '*****@*****.**', '1991-05-16 00:00:00', None, None, None) create_user('lex12345', 'Lex', 5855556234, '*****@*****.**', '1991-05-16 00:00:00', None, None, None) add_user_to_community('clarknotsuperman', 'Metropolis') create_direct_message(8, 'lex12345', 'Moe1234', '1991-05-18 00:00:00', 'Hi Moe!') create_direct_message(9, 'Moe1234', 'lex12345', '1991-05-18 00:00:10', 'Hi Lex!')
def get_messages_from(receiver_id, sender_id): """ this will return messages between two given people :param receiver_id: :param sender_id: :return: """ sender_email = get_email_by_id(sender_id) receiver_email = get_email_by_id(receiver_id) if not user_exists(sender_email): return "User" + sender_email + "doesn't exist" if not user_exists(receiver_email): return "User" + receiver_email + "doesn't exist" return exec_get_all('SELECT message FROM direct_messages WHERE sender_id = %s AND receiver_id = %s', (sender_id, receiver_id))
def channel_exists(channel_name, community_name): matching_channels = exec_get_all('SELECT id FROM channels WHERE name = %s AND community_name = %s', (channel_name, community_name)) return len(matching_channels) == 1
def community_exists(community_name): matching_communities = exec_get_all('SELECT name FROM communities WHERE name = %s', (community_name,)) return len(matching_communities) == 1
def get_email_by_id(user_id): matches = exec_get_all('SELECT email FROM users WHERE user_id = %s', (user_id,)) return matches[0]