yurt
This commit is contained in:
60
app/utils/helpers.py
Normal file
60
app/utils/helpers.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""
|
||||
Utility helper functions
|
||||
"""
|
||||
|
||||
from flask import current_app, make_response, jsonify
|
||||
from app.models.database import PetPicture
|
||||
|
||||
|
||||
def allowed_file(filename):
|
||||
"""Check if file extension is allowed"""
|
||||
return ('.' in filename and
|
||||
filename.rsplit('.', 1)[1].lower() in current_app.config['ALLOWED_EXTENSIONS'])
|
||||
|
||||
|
||||
def get_liked_pictures_from_cookie(request):
|
||||
"""Extract liked picture IDs from cookie"""
|
||||
liked_pictures = request.cookies.get('liked_pictures', '')
|
||||
return liked_pictures.split(',') if liked_pictures else []
|
||||
|
||||
|
||||
def add_liked_status_to_pictures(pictures, liked_list):
|
||||
"""Add user_liked status to picture records"""
|
||||
pictures_with_likes = []
|
||||
for picture in pictures:
|
||||
picture_dict = dict(picture)
|
||||
picture_dict['user_liked'] = str(picture['id']) in liked_list
|
||||
pictures_with_likes.append(picture_dict)
|
||||
return pictures_with_likes
|
||||
|
||||
|
||||
def handle_like_action(picture_id, request):
|
||||
"""Handle like/unlike action and return JSON response"""
|
||||
# Get existing likes from cookie
|
||||
liked_list = get_liked_pictures_from_cookie(request)
|
||||
picture_id_str = str(picture_id)
|
||||
|
||||
if picture_id_str in liked_list:
|
||||
# Unlike: remove from cookie and decrement count
|
||||
liked_list.remove(picture_id_str)
|
||||
PetPicture.update_likes(picture_id, increment=False)
|
||||
liked = False
|
||||
else:
|
||||
# Like: add to cookie and increment count
|
||||
liked_list.append(picture_id_str)
|
||||
PetPicture.update_likes(picture_id, increment=True)
|
||||
liked = True
|
||||
|
||||
# Get updated like count
|
||||
like_count = PetPicture.get_like_count(picture_id)
|
||||
|
||||
# Create response with updated cookie
|
||||
response = make_response(jsonify({
|
||||
'liked': liked,
|
||||
'like_count': like_count
|
||||
}))
|
||||
|
||||
# Update cookie (expires in 1 year)
|
||||
response.set_cookie('liked_pictures', ','.join(liked_list), max_age=365*24*60*60)
|
||||
|
||||
return response
|
||||
Reference in New Issue
Block a user