Skip to content

Commit 8605f7b

Browse files
committed
Added routes to get conversations, see and like a message and updated send route
1 parent ef60ba7 commit 8605f7b

File tree

1 file changed

+56
-14
lines changed

1 file changed

+56
-14
lines changed

backend/PyMatcha/routes/api/messages.py

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,70 @@
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
2019
from flask import Blueprint
2120
from flask import current_app
2221
from flask import request
2322
from flask_jwt_extended import current_user
2423
from flask_jwt_extended import jwt_required
24+
from PyMatcha.models.message import Message
25+
from PyMatcha.models.user import get_user
2526
from PyMatcha.utils.decorators import validate_params
27+
from PyMatcha.utils.errors import BadRequestError
2628
from PyMatcha.utils.errors import NotFoundError
2729
from PyMatcha.utils.success import Success
2830
from PyMatcha.utils.success import SuccessOutput
2931

32+
3033
REQUIRED_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

3336
messages_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)
4385
def 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

Comments
 (0)