1616 You should have received a copy of the GNU General Public License
1717 along with this program. If not, see <https://www.gnu.org/licenses/>.
1818"""
19- import PyMatcha .models .user as user
2019from flask import Blueprint
2120from flask import current_app
2221from flask import request
2322from flask_jwt_extended import current_user
2423from flask_jwt_extended import jwt_required
24+ from PyMatcha .models .message import Message
25+ from PyMatcha .models .user import get_user
2526from PyMatcha .utils .decorators import validate_params
27+ from PyMatcha .utils .errors import BadRequestError
2628from PyMatcha .utils .errors import NotFoundError
2729from PyMatcha .utils .success import Success
2830from PyMatcha .utils .success import SuccessOutput
2931
32+
3033REQUIRED_KEYS_NEW_MESSAGE = {"to_id" : int , "content" : str }
31- REQUIRED_KEYS_GET_CONVERSATION = {"with_id" : int }
34+ # REQUIRED_KEYS_GET_CONVERSATION = {"with_id": int}
3235
3336messages_bp = Blueprint ("messages" , __name__ )
3437
3538# TODO: Route to get the last message for each open conversation
36- # TODO: Route to get latest messages with user (then paginated to get the older messages)
3739# TODO: Route to send a new message to a conversation
3840
41+ """
42+ Route to get latest messages with user (then paginated to get the older messages)
43+ route to receive messages
44+ """
45+
46+
47+ @messages_bp .route ("/conversations" , methods = ["GET" ])
48+ @jwt_required
49+ def get_opened_conversations ():
50+ conv_list = current_user .get_conversation_list ()
51+ returned_list = [c .to_dict () for c in conv_list ]
52+ return SuccessOutput ("conversations" , returned_list )
53+
3954
40- @messages_bp .route ("/messages/send/" , methods = ["POST" ])
55+ @messages_bp .route ("/messages/see/<with_uid>" , methods = ["POST" ])
56+ @jwt_required
57+ def see_conversation_messages (with_uid ):
58+ try :
59+ with_user = get_user (with_uid )
60+ except NotFoundError :
61+ raise NotFoundError ("With user {} not found" , "Try again" )
62+ for message in Message .get_multis (from_id = with_user .id , to_id = current_user .id , is_seen = False ):
63+ message .is_seen = True
64+ message .save ()
65+ return Success ("Messages marked as seen" )
66+
67+
68+ @messages_bp .route ("/messages/like/<message_id>" , methods = ["POSt" ])
69+ @jwt_required
70+ def like_message (message_id ):
71+ try :
72+ message = Message .get (message_id )
73+ except NotFoundError :
74+ raise NotFoundError (f"Message { message_id } not found" , "Try again" )
75+ if message .to_id != current_user .id :
76+ raise BadRequestError ("Cannot like a message that isn't destined to you" , "Try again" )
77+ message .is_liked = True
78+ message .save ()
79+ return Success (f"Liked message { message_id } " )
80+
81+
82+ @messages_bp .route ("/messages/send" , methods = ["POST" ])
4183@jwt_required
4284@validate_params (REQUIRED_KEYS_NEW_MESSAGE )
4385def send_message ():
@@ -46,18 +88,18 @@ def send_message():
4688 to_id : int = int (data ["to_id" ])
4789 content : str = data ["content" ]
4890 try :
49- sender = user . get_user (current_user . id )
91+ get_user (to_id )
5092 except NotFoundError :
51- raise NotFoundError ("User {} (from_id) not found." . format ( current_user . id ) , "Try again with another uid " )
52- sender .send_message (to_id = to_id , content = content )
93+ raise NotFoundError ("Recipient {} not found" , "Try again" )
94+ current_user .send_message (to_id = to_id , content = content )
5395 current_app .logger .debug ("/messages -> Message successfully sent to {}" .format (to_id ))
5496 return Success ("Message successfully sent to {}" .format (to_id ))
5597
5698
57- @messages_bp .route ("/messages/conversation/ " , methods = ["GET" ])
58- @jwt_required
59- @validate_params (REQUIRED_KEYS_GET_CONVERSATION )
60- def get_conversation ():
61- data = request .get_json ()
62- with_id : int = int (data ["with_id" ])
63- return SuccessOutput ("messages" , current_user .get_messages_with_user (with_id ))
99+ # @messages_bp.route("/messages/conversation", methods=["GET"])
100+ # @jwt_required
101+ # @validate_params(REQUIRED_KEYS_GET_CONVERSATION)
102+ # def get_conversation():
103+ # data = request.get_json()
104+ # with_id: int = int(data["with_id"])
105+ # return SuccessOutput("messages", current_user.get_messages_with_user(with_id))
0 commit comments