def get(self, chat_id: int, message_id: int) -> Tuple[dict, int]: """Return info about a certain message from the chat""" current_user_id = g.user.user_id chat = return_chat_or_abort(chat_id) abort_if_not_a_participant(current_user_id, chat) message = return_message_or_abort(message_id) abort_if_not_from_a_chat(chat_id, message) return {'user_id': current_user_id, 'chat_id': chat_id, 'data': message}, 200
def get(self, chat_id: int) -> Tuple[dict, int]: """Returns the list of messages from given chat""" current_user_id = g.user.user_id chat = return_chat_or_abort(chat_id) abort_if_not_a_participant(current_user_id, chat) messages = Message.query.filter_by(chat_id=chat_id) messages = model_filter_by_get_params(Message, messages, request.args) return {'user_id': current_user_id, 'chat_id': chat_id, 'data': messages}, 200
def test_abort_if_not_a_participant(self): users = init_users(3) User.create_chat(1, 2) User.create_chat(2, 3) db.session.add_all(users) with self.assertRaises(Forbidden): abort_if_not_a_participant(1, return_chat_or_abort(2)) try: abort_if_not_a_participant(2, return_chat_or_abort(2)) except Forbidden: self.fail(msg="403 error must not have been raised")
def delete(self, chat_id: int, message_id: int) -> Tuple[dict, int]: """Delete the message with a given id from the chat""" current_user_id = g.user.user_id chat = return_chat_or_abort(chat_id) abort_if_not_a_participant(current_user_id, chat) message = return_message_or_abort(message_id) abort_if_not_from_a_chat(chat_id, message) abort_if_not_own(current_user_id, message) db.session.delete(message) db.session.commit() return {'user_id': current_user_id, 'chat_id': chat_id, 'message_id': message_id, 'message': f'Message {message_id} was successfully deleted'}, 200
def delete(self, chat_id: int): """Deletes the certain chat with a given id.""" current_user_id = g.user.user_id chat = return_chat_or_abort(chat_id) abort_if_not_a_participant(current_user_id, chat) Message.delete_messages(chat_id=chat_id) User.delete_chat(chat_id=chat_id) db.session.commit() return { 'user_id': current_user_id, 'chat_id': chat_id, 'message': 'Chat was successfully deleted' }, 200
def put(self, chat_id: int, message_id: int) -> Tuple[dict, int]: """Updates the certain message text""" parser = reqparse.RequestParser() parser.add_argument('text', type=longer_than_zero, required=True) args = parser.parse_args() current_user_id = g.user.user_id chat = return_chat_or_abort(chat_id) abort_if_not_a_participant(current_user_id, chat) message = return_message_or_abort(message_id) abort_if_not_from_a_chat(chat_id, message) abort_if_not_own(current_user_id, message) message.text = args.get('text') db.session.commit() return {'user_id': current_user_id, 'chat_id': chat_id, 'message_id': message_id, 'text': args.get('text'), 'message': f'Message {message_id} was successfully updated'}, 200
def post(self, chat_id: int) -> Tuple[dict, int]: """Allows to send one or more messages in given chat from the authenticated user""" current_user_id = g.user.user_id chat = return_chat_or_abort(chat_id) abort_if_not_a_participant(current_user_id, chat) parser = reqparse.RequestParser() parser.add_argument('texts', type=longer_than_zero, action='append', required=True) args = parser.parse_args() if args['texts']: user1_id, user2_id = chat.user1_id, chat.user2_id receiver_id = user2_id if user1_id == current_user_id else user1_id for text in args['texts']: message = Message(text=text, sender_id=current_user_id, receiver_id=receiver_id, chat_id=chat_id) db.session.add(message) db.session.commit() return {'user_id': current_user_id, 'chat_id': chat_id, 'message': f"Your message{'s were' if len(args['texts']) > 1 else ' was'} successfully sent"}, 201
def get(self, chat_id: int): """Returns the certain chat with a given chat_id""" current_user_id = g.user.user_id chat = return_chat_or_abort(chat_id) abort_if_not_a_participant(current_user_id, chat) return {'user_id': current_user_id, 'data': chat}