feat: display play count on video detail page
All checks were successful
Build and Push Docker Image to Gitea / build-and-push (push) Successful in 3m47s

- Add play count display below video title with play icon
- Query actual plays count from sexy_video_plays table for accuracy
- Apply same pattern as likes_count for consistency
- Show singular/plural ("play" vs "plays") based on count

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-20 19:23:36 +01:00
parent 756d767d59
commit fed2dd65e5
2 changed files with 24 additions and 7 deletions

View File

@@ -204,6 +204,15 @@ export default {
.first(); .first();
video.likes_count = parseInt(likesCount?.count || 0); video.likes_count = parseInt(likesCount?.count || 0);
// Count actual plays from database
const playsCount = await database
.count("* as count")
.from("sexy_video_plays")
.where("video_id", video.id)
.first();
video.plays_count = parseInt(playsCount?.count || 0);
} }
res.json(videos); res.json(videos);
@@ -257,6 +266,15 @@ export default {
video.likes_count = parseInt(likesCount?.count || 0); video.likes_count = parseInt(likesCount?.count || 0);
// Count actual plays from database
const playsCount = await database
.count("* as count")
.from("sexy_video_plays")
.where("video_id", video.id)
.first();
video.plays_count = parseInt(playsCount?.count || 0);
res.json(video); res.json(video);
} catch (error: any) { } catch (error: any) {
console.error("Video by slug error:", error); console.error("Video by slug error:", error);

View File

@@ -244,17 +244,16 @@ let showPlayer = $state(false);
<div <div
class="flex flex-wrap items-center gap-4 text-sm text-muted-foreground" class="flex flex-wrap items-center gap-4 text-sm text-muted-foreground"
> >
<!-- <div class="flex items-center gap-1"> {#if data.video.plays_count}
<EyeIcon class="w-4 h-4" /> <div class="flex items-center gap-1">
{data.video.views} views <span class="icon-[ri--play-fill] w-4 h-4"></span>
</div> --> {data.video.plays_count} {data.video.plays_count === 1 ? 'play' : 'plays'}
</div>
{/if}
<div class="flex items-center gap-1"> <div class="flex items-center gap-1">
<span class="icon-[ri--calendar-line] w-4 h-4"></span> <span class="icon-[ri--calendar-line] w-4 h-4"></span>
{timeAgo.format(new Date(data.video.upload_date))} {timeAgo.format(new Date(data.video.upload_date))}
</div> </div>
<!-- <span class="bg-primary/10 text-primary px-2 py-1 rounded-full">
{data.video.category}
</span> -->
</div> </div>
</div> </div>