60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
"""
|
|
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 |