mirror of
https://github.com/ceratic/MediaCollectorLibary.git
synced 2026-05-13 23:56:46 +02:00
first commit
This commit is contained in:
109
app/Models/AdultVideo.php
Normal file
109
app/Models/AdultVideo.php
Normal file
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
class AdultVideo extends Model
|
||||
{
|
||||
protected string $table = 'adult_videos';
|
||||
protected array $fillable = [
|
||||
'title',
|
||||
'overview',
|
||||
'poster_url',
|
||||
'backdrop_url',
|
||||
'rating',
|
||||
'runtime_minutes',
|
||||
'release_date',
|
||||
'director',
|
||||
'writer',
|
||||
'cast',
|
||||
'genre',
|
||||
'metadata',
|
||||
'watched',
|
||||
'watch_count',
|
||||
'is_favorite',
|
||||
'source_id',
|
||||
'external_id'
|
||||
];
|
||||
|
||||
public static function getAllWithPagination(\PDO $pdo, int $page, int $perPage, string $search = ''): array
|
||||
{
|
||||
$offset = ($page - 1) * $perPage;
|
||||
|
||||
$whereClause = '';
|
||||
$params = [];
|
||||
|
||||
if (!empty($search)) {
|
||||
$whereClause = "WHERE (title LIKE :search OR overview LIKE :search)";
|
||||
$params['search'] = "%{$search}%";
|
||||
}
|
||||
|
||||
$sql = "
|
||||
SELECT av.*, s.display_name as source_name
|
||||
FROM adult_videos av
|
||||
JOIN sources s ON av.source_id = s.id
|
||||
{$whereClause}
|
||||
ORDER BY av.created_at DESC
|
||||
LIMIT :limit OFFSET :offset
|
||||
";
|
||||
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->bindValue(':limit', $perPage, \PDO::PARAM_INT);
|
||||
$stmt->bindValue(':offset', $offset, \PDO::PARAM_INT);
|
||||
|
||||
if (!empty($search)) {
|
||||
$stmt->bindValue(':search', "%{$search}%", \PDO::PARAM_STR);
|
||||
}
|
||||
|
||||
$stmt->execute();
|
||||
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
public static function getTotalCount(\PDO $pdo, string $search = ''): int
|
||||
{
|
||||
$whereClause = '';
|
||||
$params = [];
|
||||
|
||||
if (!empty($search)) {
|
||||
$whereClause = "WHERE (title LIKE :search OR overview LIKE :search)";
|
||||
$params['search'] = "%{$search}%";
|
||||
}
|
||||
|
||||
$sql = "SELECT COUNT(*) as count FROM adult_videos {$whereClause}";
|
||||
|
||||
$stmt = $pdo->prepare($sql);
|
||||
|
||||
if (!empty($search)) {
|
||||
$stmt->bindValue(':search', "%{$search}%", \PDO::PARAM_STR);
|
||||
}
|
||||
|
||||
$stmt->execute();
|
||||
return (int) $stmt->fetch(\PDO::FETCH_ASSOC)['count'];
|
||||
}
|
||||
|
||||
public function markAsWatched(): bool
|
||||
{
|
||||
$stmt = $this->pdo->prepare("UPDATE adult_videos SET watched = 1, watch_count = watch_count + 1, updated_at = NOW() WHERE id = :id");
|
||||
return $stmt->execute(['id' => $this->id]);
|
||||
}
|
||||
|
||||
public function markAsUnwatched(): bool
|
||||
{
|
||||
$stmt = $this->pdo->prepare("UPDATE adult_videos SET watched = 0, updated_at = NOW() WHERE id = :id");
|
||||
return $stmt->execute(['id' => $this->id]);
|
||||
}
|
||||
|
||||
public function toggleFavorite(): bool
|
||||
{
|
||||
$stmt = $this->pdo->prepare("UPDATE adult_videos SET is_favorite = !is_favorite, updated_at = NOW() WHERE id = :id");
|
||||
return $stmt->execute(['id' => $this->id]);
|
||||
}
|
||||
|
||||
public function source(): ?Source
|
||||
{
|
||||
$stmt = $this->pdo->prepare("SELECT * FROM sources WHERE id = :source_id");
|
||||
$stmt->execute(['source_id' => $this->source_id]);
|
||||
$sourceData = $stmt->fetch(\PDO::FETCH_ASSOC);
|
||||
|
||||
return $sourceData ? new Source($this->pdo, $sourceData) : null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user