Skip to content

Commit 174217f

Browse files
committed
added superlike setting
1 parent e08e05e commit 174217f

File tree

7 files changed

+31
-13
lines changed

7 files changed

+31
-13
lines changed

backend/PyMatcha/routes/api/like.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from flask import request
33
from flask_jwt_extended import current_user
44
from flask_jwt_extended import jwt_required
5+
from PyMatcha import redis
56
from PyMatcha.models.like import Like
67
from PyMatcha.models.match import Match
78
from PyMatcha.models.user import get_user
@@ -10,21 +11,18 @@
1011
from PyMatcha.utils.errors import NotFoundError
1112
from PyMatcha.utils.success import Success
1213
from PyMatcha.utils.success import SuccessOutput
14+
from PyMatcha.utils.tasks import set_user_superlikes
1315

1416
like_bp = Blueprint("like", __name__)
1517

1618

1719
@like_bp.route("/like/<uid>", methods=["POST"])
18-
@jwt_required
1920
@validate_params({"is_superlike": bool})
21+
@jwt_required
2022
def like_profile(uid):
2123

2224
is_superlike = request.get_json()["is_superlike"]
2325

24-
if is_superlike:
25-
# TODO: Check that user has superlikes left today
26-
pass
27-
2826
try:
2927
u = get_user(uid)
3028
except NotFoundError:
@@ -33,6 +31,15 @@ def like_profile(uid):
3331
raise BadRequestError("Cannot like yourself.")
3432
if current_user.already_likes(u.id):
3533
raise BadRequestError("You already liked this person.")
34+
35+
if is_superlike:
36+
superlike_counter = int(redis.get(f"superlikes:{current_user.id}"))
37+
if superlike_counter <= 0:
38+
set_user_superlikes.apply_async(current_user.id, amount=5, eta=86400)
39+
raise BadRequestError("No more superlikes today !", "Try later")
40+
else:
41+
redis.decr(f"superlikes:{current_user.id}")
42+
3643
Like.create(liker_id=current_user.id, liked_id=u.id, is_superlike=is_superlike)
3744

3845
if u.already_likes(current_user.id):

backend/PyMatcha/routes/api/messages.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ def get_opened_conversations():
5454

5555

5656
@messages_bp.route("/messages/send", methods=["POST"])
57-
@jwt_required
5857
@validate_params(REQUIRED_KEYS_NEW_MESSAGE)
58+
@jwt_required
5959
def send_message():
6060
current_app.logger.debug("/messages -> Call")
6161
data = request.get_json()

backend/PyMatcha/routes/api/profile/complete.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from flask import request
2323
from flask_jwt_extended import current_user
2424
from flask_jwt_extended import jwt_required
25+
from PyMatcha import redis
2526
from PyMatcha.models.tag import Tag
2627
from PyMatcha.utils.decorators import validate_params
2728
from PyMatcha.utils.errors import BadRequestError
@@ -33,8 +34,8 @@
3334

3435

3536
@profile_complete_bp.route("/profile/complete", methods=["POST"])
36-
@jwt_required
3737
@validate_params(REQUIRED_PARAMS_COMPLETE_PROFILE)
38+
@jwt_required
3839
def complete_profile():
3940
if current_user.is_profile_completed:
4041
raise BadRequestError(
@@ -76,4 +77,5 @@ def complete_profile():
7677
current_user.gender = gender
7778
current_user.birthdate = birthdate
7879
current_user.save()
80+
redis.set(f"superlikes:{current_user.id}", 5)
7981
return Success("Profile completed !")

backend/PyMatcha/routes/api/profile/edit.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@
5353

5454

5555
@profile_edit_bp.route("/profile/edit", methods=["PUT"])
56-
@jwt_required
5756
@validate_params(REQUIRED_PARAMS_EDIT_PROFILE)
57+
@jwt_required
5858
def edit_profile():
5959
if not current_user.is_profile_completed:
6060
raise BadRequestError("The user has not completed his profile.", "Complete your profile and try again.")
@@ -103,8 +103,8 @@ def edit_profile():
103103

104104

105105
@profile_edit_bp.route("/profile/edit/email", methods=["PUT"])
106-
@jwt_required
107106
@validate_params({"email": str})
107+
@jwt_required
108108
def edit_email():
109109
data = request.get_json()
110110
new_email = data["email"].lower()
@@ -121,8 +121,8 @@ def edit_email():
121121

122122

123123
@profile_edit_bp.route("/profile/edit/password", methods=["PUT"])
124-
@jwt_required
125124
@validate_params({"old_password": str, "new_password": str})
125+
@jwt_required
126126
def edit_password():
127127
data = request.get_json()
128128
old_password = data["old_password"]
@@ -141,8 +141,8 @@ def edit_password():
141141

142142

143143
@profile_edit_bp.route("/profile/edit/geolocation", methods=["PUT"])
144-
@jwt_required
145144
@validate_params({"ip": str}, {"lat": float, "lng": float})
145+
@jwt_required
146146
def edit_geolocation():
147147
data = request.get_json()
148148
ip = data["ip"]

backend/PyMatcha/utils/decorators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def wrapper(*args, **kwargs):
4545

4646
for key, value in data.items():
4747
if not value:
48-
if required[key] == int:
48+
if required[key] == int or required[key] == bool:
4949
pass
5050
else:
5151
raise BadRequestError(f"The item {key} cannot be None or empty.")

backend/PyMatcha/utils/orm/_model.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ def get_multi(cls, **kwargs):
301301
if data:
302302
return cls(data)
303303
else:
304+
# TODO: All db gets return None instead of valuerror
304305
raise ValueError("Not found.")
305306

306307
@classmethod

backend/PyMatcha/utils/tasks.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ def update_heat_scores():
2727
reports_received = len(user.get_reports_received())
2828
views = len(user.get_views())
2929
matches = len(user.get_matches())
30-
messages = len(Message.get_multi(to_id=user.id))
30+
try:
31+
messages = len(Message.get_multi(to_id=user.id))
32+
except ValueError:
33+
messages = 0
3134

3235
score = 30
3336
if user.username == "seluj78" or user.username == "tet":
@@ -157,3 +160,8 @@ def update_user_recommendations():
157160
)
158161
redis.expire(f"user_recommendations:{str(user_to_update.id)}", 3600)
159162
return f"Successfully updated recommendations for {count} users."
163+
164+
165+
@celery.task
166+
def set_user_superlikes(user_id, amount=5):
167+
redis.set(f"superlikes:{user_id}", amount)

0 commit comments

Comments
 (0)