Showing
3 changed files
with
21 additions
and
14 deletions
| @@ -260,11 +260,13 @@ async def toggle_like(item_id: str, user_id: str = Query(..., alias="userId")): | @@ -260,11 +260,13 @@ async def toggle_like(item_id: str, user_id: str = Query(..., alias="userId")): | ||
| 260 | return updated_item | 260 | return updated_item |
| 261 | 261 | ||
| 262 | updated_item = video_store.toggle_like(item_id, user_id) | 262 | updated_item = video_store.toggle_like(item_id, user_id) |
| 263 | - if updated_item: return updated_item | ||
| 264 | - raise HTTPException(status_code=404, detail="Item not found") | ||
| 265 | - | ||
| 266 | - updated_item = video_store.toggle_like(item_id, user_id) | ||
| 267 | - if updated_item: return updated_item | 263 | + if updated_item: |
| 264 | + is_liked_after = user_id in updated_item.get("likedBy", []) | ||
| 265 | + if is_liked_after and not is_liked_before: | ||
| 266 | + usage_store.update_bonus(user_id, 1) | ||
| 267 | + elif not is_liked_after and is_liked_before: | ||
| 268 | + usage_store.update_bonus(user_id, -1) | ||
| 269 | + return updated_item | ||
| 268 | raise HTTPException(status_code=404, detail="Item not found") | 270 | raise HTTPException(status_code=404, detail="Item not found") |
| 269 | 271 | ||
| 270 | @app.get("/usage/{user_id}") | 272 | @app.get("/usage/{user_id}") |
| @@ -16,7 +16,6 @@ const ImageCard: React.FC<ImageCardProps> = ({ image, onClick, onLike, currentUs | @@ -16,7 +16,6 @@ const ImageCard: React.FC<ImageCardProps> = ({ image, onClick, onLike, currentUs | ||
| 16 | 16 | ||
| 17 | const handleLike = (e: React.MouseEvent) => { | 17 | const handleLike = (e: React.MouseEvent) => { |
| 18 | e.stopPropagation(); | 18 | e.stopPropagation(); |
| 19 | - if (isVideo) return; // Liking is disabled for videos for now | ||
| 20 | onLike(image); | 19 | onLike(image); |
| 21 | }; | 20 | }; |
| 22 | 21 | ||
| @@ -123,7 +122,7 @@ const ImageCard: React.FC<ImageCardProps> = ({ image, onClick, onLike, currentUs | @@ -123,7 +122,7 @@ const ImageCard: React.FC<ImageCardProps> = ({ image, onClick, onLike, currentUs | ||
| 123 | <button | 122 | <button |
| 124 | onClick={handleLike} | 123 | onClick={handleLike} |
| 125 | className={`flex items-center gap-1.5 px-3 py-1.5 rounded-full backdrop-blur-md transition-all duration-200 ${image.isLikedByCurrentUser ? 'bg-red-500/80 text-white' : 'bg-white/20 text-white hover:bg-white/30'}`} | 124 | className={`flex items-center gap-1.5 px-3 py-1.5 rounded-full backdrop-blur-md transition-all duration-200 ${image.isLikedByCurrentUser ? 'bg-red-500/80 text-white' : 'bg-white/20 text-white hover:bg-white/30'}`} |
| 126 | - title={currentUser ? "Like this image" : "Login to like"} | 125 | + title={currentUser ? "Like this" : "Login to like"} |
| 127 | > | 126 | > |
| 128 | <Heart size={14} fill={image.isLikedByCurrentUser ? "currentColor" : "none"} /> | 127 | <Heart size={14} fill={image.isLikedByCurrentUser ? "currentColor" : "none"} /> |
| 129 | <span className="text-xs font-bold">{image.likes}</span> | 128 | <span className="text-xs font-bold">{image.likes}</span> |
| @@ -133,13 +132,19 @@ const ImageCard: React.FC<ImageCardProps> = ({ image, onClick, onLike, currentUs | @@ -133,13 +132,19 @@ const ImageCard: React.FC<ImageCardProps> = ({ image, onClick, onLike, currentUs | ||
| 133 | <div className="flex justify-between items-end"> | 132 | <div className="flex justify-between items-end"> |
| 134 | <div className="text-xs text-gray-300 font-mono flex flex-col gap-1"> | 133 | <div className="text-xs text-gray-300 font-mono flex flex-col gap-1"> |
| 135 | <span className="opacity-75">ID: {image.authorId || 'UNKNOWN'}</span> | 134 | <span className="opacity-75">ID: {image.authorId || 'UNKNOWN'}</span> |
| 135 | + {image.generationTime && ( | ||
| 136 | + <span className="bg-white/10 px-1.5 py-0.5 rounded w-fit flex items-center gap-1"><Hourglass size={10} />{image.generationTime.toFixed(1)}s</span> | ||
| 137 | + )} | ||
| 136 | </div> | 138 | </div> |
| 137 | - {image.generationTime && ( | ||
| 138 | - <div className="flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-white/10 backdrop-blur-md text-white"> | ||
| 139 | - <Hourglass size={12} /> | ||
| 140 | - <span className="text-xs font-bold">{image.generationTime.toFixed(1)}s</span> | ||
| 141 | - </div> | ||
| 142 | - )} | 139 | + |
| 140 | + <button | ||
| 141 | + onClick={handleLike} | ||
| 142 | + className={`flex items-center gap-1.5 px-3 py-1.5 rounded-full backdrop-blur-md transition-all duration-200 ${image.isLikedByCurrentUser ? 'bg-red-500/80 text-white' : 'bg-white/20 text-white hover:bg-white/30'}`} | ||
| 143 | + title={currentUser ? "Like this video" : "Login to like"} | ||
| 144 | + > | ||
| 145 | + <Heart size={14} fill={image.isLikedByCurrentUser ? "currentColor" : "none"} /> | ||
| 146 | + <span className="text-xs font-bold">{image.likes}</span> | ||
| 147 | + </button> | ||
| 143 | </div> | 148 | </div> |
| 144 | )} | 149 | )} |
| 145 | </div> | 150 | </div> |
-
Please register or login to post a comment