Skip to content

Commit f02d8c7

Browse files
authored
Merge pull request #414 from Seluj78/chore/consistent-notifs
Consistent notification handling
2 parents e384ab4 + 60edbba commit f02d8c7

File tree

11 files changed

+199
-214
lines changed

11 files changed

+199
-214
lines changed

PyMatchaV2.postman_collection.json

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7230,162 +7230,162 @@
72307230
],
72317231
"variable": [
72327232
{
7233-
"id": "3e50a45c-f7b6-4503-898e-7a2a319f21c6",
7233+
"id": "a4a1a2bf-3b0c-463b-8067-a3756f80cded",
72347234
"key": "host",
72357235
"value": "http://127.0.0.1:5000"
72367236
},
72377237
{
7238-
"id": "df25c64c-7f48-448e-8505-a0b970f3db0c",
7238+
"id": "962d0a9d-d340-41a9-a3cb-e3930824cf3d",
72397239
"key": "access_token",
72407240
"value": ""
72417241
},
72427242
{
7243-
"id": "6b4cdb7c-f052-4235-aba4-300e8ea5a78a",
7243+
"id": "cabb980b-4b51-410d-bd3b-482946bbb22c",
72447244
"key": "refresh_token",
72457245
"value": ""
72467246
},
72477247
{
7248-
"id": "02e0ebf1-a832-49eb-a738-7817f6281e58",
7248+
"id": "d5c4dc38-a6b1-4dc0-8144-ea9c86e794c8",
72497249
"key": "debug_token",
72507250
"value": "xX69jules69Xx"
72517251
},
72527252
{
7253-
"id": "2dcc1cbe-016f-4cd5-a595-d0a789158d39",
7253+
"id": "9b77ee58-359b-4388-9b8a-f5be2c6a0662",
72547254
"key": "id",
72557255
"value": "1541"
72567256
},
72577257
{
7258-
"id": "e8bb8541-cd39-456d-8f8a-6d974982c40b",
7258+
"id": "993d77e2-255e-4639-8843-52eb83e4680e",
72597259
"key": "first_name",
72607260
"value": "Jules"
72617261
},
72627262
{
7263-
"id": "12ea98a3-1c9f-463d-b820-c9803ae9eaad",
7263+
"id": "d6f8baa9-b3d2-490a-aced-e1ce6c6a1d24",
72647264
"key": "last_name",
72657265
"value": "Lasne"
72667266
},
72677267
{
7268-
"id": "c4335ab4-917c-4b59-9f35-19f9f4476d92",
7268+
"id": "97a68a89-2697-420d-b16a-8d513247eeac",
72697269
"key": "email",
72707270
"value": "jules.lasne@example.org"
72717271
},
72727272
{
7273-
"id": "6bb86094-ebb6-4795-852a-7aa813c9548a",
7273+
"id": "9a718a12-4761-4690-9ebb-0a0f6b6107fc",
72747274
"key": "username",
72757275
"value": "seluj78"
72767276
},
72777277
{
7278-
"id": "66ad79d0-1da1-4c86-856f-68b8cb9b543f",
7278+
"id": "2563b3e4-db96-4814-80c3-8e089892692c",
72797279
"key": "password",
72807280
"value": "dolphin"
72817281
},
72827282
{
7283-
"id": "2bfe0b20-7576-406d-925a-76ec05695a56",
7283+
"id": "bb0cac59-bdb3-4c90-a96e-a88250efc944",
72847284
"key": "orientation",
72857285
"value": "heterosexual"
72867286
},
72877287
{
7288-
"id": "7e307fe3-ad69-42a4-851e-c6054e88f533",
7288+
"id": "e69b1b19-6387-4718-b926-d0a440344f29",
72897289
"key": "gender",
72907290
"value": "male"
72917291
},
72927292
{
7293-
"id": "c30ca7ec-d669-4ca3-8736-9bfdcbb7492c",
7293+
"id": "c581783d-3eda-436c-850e-ffaa67e04c03",
72947294
"key": "bio",
72957295
"value": "Phasellus vel tortor vel elit scelerisque accumsan vel nec nunc. Ut condimentum vestibulum sapien non dictum. Vestibulum ac eleifend mi. Curabitur dictum vestibulum ex at placerat. Pellentesque odio mi, condimentum et sollicitudin at, finibus non leo. Aenean sed pulvinar nulla, nec tincidunt felis. Aenean nibh elit, aliquam sit amet lobortis et, pellentesque ut orci. Curabitur placerat sem id ex laoreet imperdiet. Curabitur dictum ac urna feugiat viverra. Vivamus nec pulvinar urna. Suspendisse vel ultrices est. Sed malesuada est vel orci venenatis scelerisque. Phasellus ultrices dignissim sapien, at mattis tellus mattis pulvinar. Sed ut euismod velit, id fermentum leo."
72967296
},
72977297
{
7298-
"id": "5df95083-a02d-42cc-adca-af2fc7f4a931",
7298+
"id": "12cd6fd2-ac21-4372-867b-618e6f96186b",
72997299
"key": "birthdate",
73007300
"value": "06/04/1998"
73017301
},
73027302
{
7303-
"id": "95044a57-47d6-4de8-85f1-7263e0341f79",
7303+
"id": "e73b6bb9-4c3b-4661-b187-2868d5690427",
73047304
"key": "first_name2",
73057305
"value": "Félix"
73067306
},
73077307
{
7308-
"id": "d2aae104-3ac8-435d-b506-9085c84dbdad",
7308+
"id": "bf6b4dc8-bf4e-44ce-a830-6b1e40ba19f7",
73097309
"key": "last_name2",
73107310
"value": "Ensal"
73117311
},
73127312
{
7313-
"id": "b6ff9c48-4fe5-4801-8349-7fdc764bf394",
7313+
"id": "66ae9be9-19aa-4b92-b987-f2feb4896383",
73147314
"key": "username2",
73157315
"value": "Ufree"
73167316
},
73177317
{
7318-
"id": "9d9fb357-9866-4da3-bfff-cec077624a25",
7318+
"id": "85c3053f-21b2-40a3-b162-9d9718df1a2f",
73197319
"key": "bio2",
73207320
"value": "Donec quis porttitor ante, ac pulvinar nulla. Vivamus dignissim, ipsum ultricies interdum suscipit, risus tellus auctor mi, eu auctor metus sem quis urna. In maximus placerat ipsum, nec sodales elit aliquet sed. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Phasellus malesuada velit felis, non volutpat ex bibendum at. Maecenas aliquet sodales quam at consequat. Sed faucibus consequat tempor. Fusce consequat eu sem non tempus. Duis dapibus nunc vel tempus semper. Pellentesque dignissim tellus odio, vel luctus ipsum suscipit quis. Curabitur id erat at quam varius fermentum non in massa."
73217321
},
73227322
{
7323-
"id": "3ad12943-7b1f-481f-b5a2-ead7d6402a58",
7323+
"id": "94669490-d468-4ba7-a0f0-d945957b518c",
73247324
"key": "gender2",
73257325
"value": "other"
73267326
},
73277327
{
7328-
"id": "f55b25d0-b708-47bd-a10f-922cb7b4f211",
7328+
"id": "71765231-44e2-40a4-a710-1c45cf639b48",
73297329
"key": "orientation2",
73307330
"value": "bisexual"
73317331
},
73327332
{
7333-
"id": "6f90d87b-f468-4417-9481-2102220b89b0",
7333+
"id": "e5b081e0-d30b-4298-9def-73d87b96a765",
73347334
"key": "birthdate2",
73357335
"value": "25/06/2000"
73367336
},
73377337
{
7338-
"id": "88b302d8-8018-457d-ae33-2ce511e3d4f5",
7338+
"id": "856b6bcb-b2db-4bb2-b55c-b993b4fd25f6",
73397339
"key": "email2",
73407340
"value": "felix.ensal@example.org"
73417341
},
73427342
{
7343-
"id": "7e4aeab9-c234-4ee1-8d0c-0e30c12b79ea",
7343+
"id": "2f47c53d-0d20-4c59-9b2e-a354b1079845",
73447344
"key": "password2",
73457345
"value": "dolphin2"
73467346
},
73477347
{
7348-
"id": "95f78452-7269-45f9-9202-879adc7feb60",
7348+
"id": "ca342d3c-7ac6-4cbb-ba4b-4b5c1a2cb8dc",
73497349
"key": "ip",
73507350
"value": "90.108.46.63"
73517351
},
73527352
{
7353-
"id": "f8e0b102-6fa0-405c-b684-ed2976662d36",
7353+
"id": "cf6a253d-c24c-47f9-8e73-88a74a3f6609",
73547354
"key": "lat",
73557355
"value": "49.5271"
73567356
},
73577357
{
7358-
"id": "d088bed1-37fe-4edc-9110-5a6c1fdadb78",
7358+
"id": "e337f153-6467-4f21-90c1-37ebcbea650d",
73597359
"key": "lng",
73607360
"value": "1.1885"
73617361
},
73627362
{
7363-
"id": "f02f943b-b835-46ea-8f92-ec51ad160ed0",
7363+
"id": "8d4d29af-38a6-4e00-878b-495182b12409",
73647364
"key": "my_msg_id",
73657365
"value": "-1"
73667366
},
73677367
{
7368-
"id": "a5380797-19c0-4b69-8632-d7eac317ed6e",
7368+
"id": "8c5cb5c3-47b4-4d70-b7f3-f2bcb621c962",
73697369
"key": "to_me_msg_id",
73707370
"value": "-1"
73717371
},
73727372
{
7373-
"id": "7455c588-11dd-455d-b0d6-e9d1b051e0c9",
7373+
"id": "b25b588c-989a-4497-aeef-d140bd1f7fef",
73747374
"key": "other_msg_id",
73757375
"value": "-1"
73767376
},
73777377
{
7378-
"id": "4ec2e211-56dc-4c5a-8fa5-1bd65a276129",
7378+
"id": "a9d9e751-155c-4e6d-a8db-d9eca88aeeb2",
73797379
"key": "user_access_token",
73807380
"value": ""
73817381
},
73827382
{
7383-
"id": "2f59a635-bacd-4d08-ad0d-44b3169b33d1",
7383+
"id": "d44c47f0-6ba9-4c3c-a233-66f504c28d10",
73847384
"key": "user_refresh_token",
73857385
"value": ""
73867386
},
73877387
{
7388-
"id": "f674942a-f096-4139-9947-02af7849a610",
7388+
"id": "fdbec5c8-98d1-4bff-8b33-f75ee2214b05",
73897389
"key": "notif_id",
73907390
"value": ""
73917391
}

backend/PyMatcha/models/like.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Like(Model):
3838

3939
@staticmethod
4040
def create(
41-
liker_id: int, liked_id: int, is_superlike: str = False, dt_liked: Optional[datetime.datetime] = None
41+
liker_id: int, liked_id: int, is_superlike: bool = False, dt_liked: Optional[datetime.datetime] = None
4242
) -> Like:
4343
if not dt_liked:
4444
dt_liked = datetime.datetime.utcnow()

backend/PyMatcha/routes/api/like.py

Lines changed: 17 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
from datetime import timedelta
33

44
from flask import Blueprint
5-
from flask import current_app
65
from flask import request
76
from flask_jwt_extended import current_user
87
from flask_jwt_extended import jwt_required
9-
from PyMatcha.models.like import Like
10-
from PyMatcha.models.match import Match
11-
from PyMatcha.models.notification import Notification
128
from PyMatcha.models.user import get_user
9+
from PyMatcha.utils.action_notifs.like import do_like
10+
from PyMatcha.utils.action_notifs.like import do_match
11+
from PyMatcha.utils.action_notifs.like import do_superlike
12+
from PyMatcha.utils.action_notifs.like import do_unlike
1313
from PyMatcha.utils.decorators import validate_params
1414
from PyMatcha.utils.errors import BadRequestError
1515
from PyMatcha.utils.errors import NotFoundError
@@ -27,12 +27,12 @@ def like_profile(uid):
2727
is_superlike = request.get_json()["is_superlike"]
2828

2929
try:
30-
u = get_user(uid)
30+
liked_user = get_user(uid)
3131
except NotFoundError:
3232
raise NotFoundError(f"User {uid} not found.")
33-
if current_user.id == u.id:
33+
if current_user.id == liked_user.id:
3434
raise BadRequestError("Cannot like yourself.")
35-
if current_user.already_likes(u.id):
35+
if current_user.already_likes(liked_user.id):
3636
raise BadRequestError("You already liked this person.")
3737

3838
if is_superlike:
@@ -48,85 +48,32 @@ def like_profile(uid):
4848
current_user.superlikes_reset_dt = datetime.utcnow() + timedelta(hours=12)
4949
current_user.save()
5050

51-
Like.create(liker_id=current_user.id, liked_id=u.id, is_superlike=is_superlike)
51+
if is_superlike:
52+
do_superlike(liker_user=current_user, liked_user_id=liked_user.id)
53+
else:
54+
do_like(liker_user=current_user, liked_user_id=liked_user.id)
5255

53-
if u.already_likes(current_user.id):
54-
current_app.logger.debug(f"Creating match between user {current_user.id} and {u.id}")
55-
Match.create(user_1=current_user.id, user_2=u.id)
56-
Notification.create(
57-
trigger_id=current_user.id,
58-
user_id=u.id,
59-
content=f"{current_user.first_name} liked you! Go check them out!",
60-
type="like",
61-
link_to=f"users/{current_user.id}",
62-
)
63-
Notification.create(
64-
trigger_id=current_user.id,
65-
user_id=u.id,
66-
content=f"You and {current_user.first_name} matched!",
67-
type="match",
68-
link_to=f"conversation/{current_user.id}",
69-
)
70-
Notification.create(
71-
trigger_id=u.id,
72-
user_id=current_user.id,
73-
content=f"You and {u.first_name} matched!",
74-
type="match",
75-
link_to=f"conversation/{u.id}",
76-
)
56+
if liked_user.already_likes(current_user.id):
57+
do_match(liker_user=current_user, liked_user=liked_user)
7758
return Success("It's a match !")
7859

7960
if is_superlike:
80-
current_app.logger.debug(f"Creating superlike between user {current_user.id} and {u.id}")
81-
Notification.create(
82-
trigger_id=current_user.id,
83-
user_id=u.id,
84-
content=f"{current_user.first_name} superliked you 😏! Go check them out!",
85-
type="superlike",
86-
link_to=f"users/{current_user.id}",
87-
)
8861
return Success("Superliked user.")
8962
else:
90-
current_app.logger.debug(f"Creating like between user {current_user.id} and {u.id}")
91-
Notification.create(
92-
trigger_id=current_user.id,
93-
user_id=u.id,
94-
content=f"{current_user.first_name} liked you! Go check them out!",
95-
type="like",
96-
link_to=f"users/{current_user.id}",
97-
)
9863
return Success("Liked user.")
9964

10065

10166
@like_bp.route("/unlike/<uid>", methods=["POST"])
10267
@jwt_required
10368
def unlike_profile(uid):
10469
try:
105-
u = get_user(uid)
70+
unliked_user = get_user(uid)
10671
except NotFoundError:
10772
raise NotFoundError(f"User {uid} not found.")
108-
if current_user.id == u.id:
73+
if current_user.id == unliked_user.id:
10974
raise BadRequestError("Cannot unlike yourself.")
110-
if not current_user.already_likes(u.id):
75+
if not current_user.already_likes(unliked_user.id):
11176
raise BadRequestError("You never liked this person in the first place.")
112-
Like.get_multi(liked_id=u.id, liker_id=current_user.id).delete()
113-
current_app.logger.debug(f"Deleting like between user {current_user.id} and {u.id}")
114-
115-
m1 = Match.get_multi(user_1=u.id, user_2=current_user.id)
116-
m2 = Match.get_multi(user_1=current_user.id, user_2=u.id)
117-
118-
if m1:
119-
current_app.logger.debug(f"Deleting match between user {current_user.id} and {u.id}")
120-
m1.delete()
121-
elif m2:
122-
current_app.logger.debug(f"Deleting match between user {current_user.id} and {u.id}")
123-
m2.delete()
124-
Notification.create(
125-
trigger_id=current_user.id,
126-
user_id=u.id,
127-
content=f"{current_user.first_name} unliked you.",
128-
type="unlike",
129-
link_to=None,
130-
)
77+
do_unlike(current_user, unliked_user.id)
13178

13279
return Success("Unliked user.")

backend/PyMatcha/routes/api/messages.py

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@
2424
from flask_jwt_extended import current_user
2525
from flask_jwt_extended import jwt_required
2626
from PyMatcha.models.message import Message
27-
from PyMatcha.models.notification import Notification
2827
from PyMatcha.models.user import get_user
28+
from PyMatcha.utils.action_notifs.message import do_like_message
29+
from PyMatcha.utils.action_notifs.message import do_message
2930
from PyMatcha.utils.decorators import validate_params
3031
from PyMatcha.utils.errors import BadRequestError
3132
from PyMatcha.utils.errors import NotFoundError
@@ -35,7 +36,6 @@
3536
from PyMatcha.utils.tasks import bot_respond_to_message
3637
from timeago import format as timeago_format
3738

38-
3939
REQUIRED_KEYS_NEW_MESSAGE = {"to_uid": str, "content": str}
4040

4141
messages_bp = Blueprint("messages", __name__)
@@ -74,18 +74,10 @@ def send_message():
7474

7575
if current_user.id == to_user.id:
7676
raise BadRequestError("Cannot send a message to yourself.")
77-
current_app.logger.info(f"Sending message between {current_user.id} and {to_uid}")
78-
current_user.send_message(to_id=to_user.id, content=content)
7977

80-
new_message = Message.get_multis(to_id=to_user.id, from_id=current_user.id)[-1]
78+
do_message(from_user=current_user, to_user=to_user, content=content)
8179

82-
Notification.create(
83-
trigger_id=current_user.id,
84-
user_id=to_user.id,
85-
content=f"{current_user.first_name} said: {content}",
86-
type="message",
87-
link_to=f"conversation/{current_user.id}",
88-
)
80+
new_message = Message.get_multis(to_id=to_user.id, from_id=current_user.id)[-1]
8981

9082
if to_user.is_bot:
9183
new_message.is_seen = True
@@ -142,16 +134,8 @@ def like_message(message_id):
142134
raise BadRequestError("Cannot like a message that isn't destined to you.")
143135
if message.is_liked:
144136
raise BadRequestError("Message is already liked.")
145-
current_app.logger.debug(f"Liking message {message_id}")
146-
message.is_liked = True
147-
message.save()
148-
Notification.create(
149-
trigger_id=current_user.id,
150-
user_id=message.from_id,
151-
content=f"{current_user.first_name} liked you message!",
152-
type="message_like",
153-
link_to=f"conversation/{current_user.id}",
154-
)
137+
138+
do_like_message(message=message, liker=current_user, to_id=message.from_id)
155139
return Success(f"Liked message {message_id}.")
156140

157141

0 commit comments

Comments
 (0)