Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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")
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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}