From ba56bccc35cd91f96661a41a4dd431140f3bf27c Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 4 Jul 2025 00:16:09 +0200 Subject: [PATCH] feat(BE): spot --- app/Filters/FiltersType/SpotFilter.php | 15 +++++ app/Filters/Show/ShowFilters.php | 38 +++++------- app/Http/Controllers/PlaylistController.php | 37 ++++++++--- app/Http/Controllers/Show/ShowController.php | 16 ++--- app/Http/Controllers/SmartBlockController.php | 61 ++++++++++--------- app/Models/Playlist.php | 5 ++ app/Models/Show/Show.php | 13 ++-- app/Models/SmartBlock.php | 5 ++ app/Models/Spot/SpotPlaylist.php | 23 +++++++ app/Models/Spot/SpotShow.php | 24 ++++++++ app/Models/Spot/SpotSmartBlock.php | 24 ++++++++ app/Traits/Show/ShowTrait.php | 5 ++ 12 files changed, 193 insertions(+), 73 deletions(-) create mode 100644 app/Filters/FiltersType/SpotFilter.php create mode 100644 app/Models/Spot/SpotPlaylist.php create mode 100644 app/Models/Spot/SpotShow.php create mode 100644 app/Models/Spot/SpotSmartBlock.php diff --git a/app/Filters/FiltersType/SpotFilter.php b/app/Filters/FiltersType/SpotFilter.php new file mode 100644 index 0000000..cd66ddd --- /dev/null +++ b/app/Filters/FiltersType/SpotFilter.php @@ -0,0 +1,15 @@ +whereIn('id', $spotTableName::select($idColumnName)); + } catch (\Exception $e) { + Log::error($e); + } + } +} \ No newline at end of file diff --git a/app/Filters/Show/ShowFilters.php b/app/Filters/Show/ShowFilters.php index 53c858e..6eb0938 100644 --- a/app/Filters/Show/ShowFilters.php +++ b/app/Filters/Show/ShowFilters.php @@ -2,44 +2,38 @@ namespace App\Filters\Show; +use App\Filters\FiltersType\AllFilter; use App\Filters\FiltersType\LikeFilter; +use App\Models\Spot\SpotPlaylist; class ShowFilters { protected $filters = [ 'name' => LikeFilter::class, - 'dj' => LikeFilter::class, - 'genre' => LikeFilter::class, - 'description' => LikeFilter::class, - 'color' => LikeFilter::class, - 'background_color' => LikeFilter::class, - 'live_stream_using_airtime_auth' => LikeFilter::class, - 'live_stream_using_custom_auth' => LikeFilter::class, - 'live_stream_user' => LikeFilter::class, - 'live_stream_pass' => LikeFilter::class, - 'linked' => LikeFilter::class, - 'is_linkable' => LikeFilter::class, - 'image_path' => LikeFilter::class, - 'has_autoplaylist' => LikeFilter::class, - 'autoplaylist_id' => LikeFilter::class, - 'autoplaylist_repeat' => LikeFilter::class, + 'all' => AllFilter::class, ]; - public function apply($query) + public function apply($query, $filters) { - foreach ($this->receivedFilters() as $name => $value) { - if ($name != 'per_page') { - $filterInstance = new $this->filters[$name]; - $query = $filterInstance($query, $name, $value); + foreach ($this->receivedFilters($filters) as $name => $value) { + switch ($name) { + case 'all': + $name = array_diff(array_keys($this->filters), ['all']); + $filterInstance = new $this->filters['all']; + break; + default: + $filterInstance = new $this->filters[$name]; + break; } + $query = $filterInstance($query, $name, $value); } return $query; } - public function receivedFilters() + public function receivedFilters($filters) { - return request()->only(array_keys($this->filters)); + return $filters->only(array_keys($this->filters)); } } \ No newline at end of file diff --git a/app/Http/Controllers/PlaylistController.php b/app/Http/Controllers/PlaylistController.php index 098eaf6..084eb2e 100644 --- a/app/Http/Controllers/PlaylistController.php +++ b/app/Http/Controllers/PlaylistController.php @@ -8,11 +8,13 @@ use App\Models\File; use App\Models\Playlist; use App\Models\PlaylistContent; use App\Models\SmartBlock; +use App\Models\Spot\SpotPlaylist; use App\Models\Webstream; use DateInterval; use DateTime; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; class PlaylistController extends Controller { @@ -22,17 +24,29 @@ class PlaylistController extends Controller * @return string */ public function index(Request $request) { - if (!isset($request->per_page) || is_null($request)) { - $pagination = 5; - } else { - $pagination = $request->per_page; - } + try { + if ( ! isset($request->per_page) || is_null($request)) { + $pagination = 5; + } else { + $pagination = $request->per_page; + } - return Playlist::searchFilter($request) - ->with(['creator', 'tracks.file', 'tracks.block', 'tracks.block.criteria', 'tracks.block.creator']) - ->orderBy('name') - ->paginate($pagination) - ->toJson(); + return Playlist::searchFilter($request) + ->with( + [ + 'creator', + 'tracks.file', + 'tracks.block', + 'tracks.block.criteria', + 'tracks.block.creator' + ] + ) + ->orderBy('name') + ->paginate($pagination) + ->toJson(); + } catch (\Exception $e) { + Log::error($e); + } } /** @@ -56,6 +70,9 @@ class PlaylistController extends Controller 'creator_id' => $user->id, 'description' => $request->description, ]); + if($request['playlist_type'] === 'spot') { + $dbPlaylist->spotPlaylist()->create(); + } // dd($request->tracks); foreach($request->tracks as $key => $file) { if (!isset($file['id'])) { diff --git a/app/Http/Controllers/Show/ShowController.php b/app/Http/Controllers/Show/ShowController.php index d228f32..0d44f98 100644 --- a/app/Http/Controllers/Show/ShowController.php +++ b/app/Http/Controllers/Show/ShowController.php @@ -25,15 +25,17 @@ class ShowController extends Controller use ShowInstancesTrait; use ShowDjTrait; - public function index(ShowFilters $filters) + public function index(Request $request) { - if ( ! isset($filters->per_page) || is_null($filters)) { - $pagination = 20; - } else { - $pagination = $filters->per_page; - } + $pagination = 20; - return Show::searchFilter($filters)->cursorPaginate($pagination)->toJson(); + if(isset($request->per_page) || is_null($request)) { + $pagination = $request->per_page; + } + return Show::searchFilter($request) + ->orderBy('name') + ->paginate($pagination) + ->toJson(); } /** diff --git a/app/Http/Controllers/SmartBlockController.php b/app/Http/Controllers/SmartBlockController.php index 7ca46ee..aa68b4c 100644 --- a/app/Http/Controllers/SmartBlockController.php +++ b/app/Http/Controllers/SmartBlockController.php @@ -14,6 +14,7 @@ use http\Exception\BadMethodCallException; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Log; class SmartBlockController extends Controller { @@ -71,37 +72,37 @@ class SmartBlockController extends Controller * @return mixed string */ public function save(Request $request) { - $user = Auth::user(); - //dd($user); - $request->validate([ - 'name' => 'required|string', - 'type' => 'required|string', - 'criteria' => 'required|array' - ]); + try { + $user = Auth::user();//dd($user); + $request->validate([ + 'name' => 'required|string', + 'type' => 'required|string', + 'criteria' => 'required|array' + ]); + $criteria = $this->createCriteria($request); + $length = 0; + $dbSmartBlock = SmartBlock::firstOrNew(['id' => $request->id]); + $dbSmartBlock->fill([ + 'name' => $request->name, + 'creator_id' => $user->id, + 'description' => $request->description, + 'length' => $request->length, + ])->save(); + if ($request['smart_block_type'] === 'spot') { + $dbSmartBlock->spotSmartBlock()->create(); + } + $this->saveCriteria($dbSmartBlock, $criteria);//ToDo: save content + if (is_array($request->tracks) && count($request->tracks) > 0) { + SmartBlockContent::where('block_id', '=', $dbSmartBlock->id)->delete(); + foreach ($request->tracks as $key => $track) { + $this->saveContent($track['file'], $dbSmartBlock->id, $key); + } + } - $criteria = $this->createCriteria($request); - $length = 0; - - $dbSmartBlock = SmartBlock::firstOrNew(['id' => $request->id]); - - $dbSmartBlock->fill([ - 'name' => $request->name, - 'creator_id' => $user->id, - 'description' => $request->description, - 'length' => $request->length, - ])->save(); - - $this->saveCriteria($dbSmartBlock, $criteria); - //ToDo: save content - - if (is_array($request->tracks) && count($request->tracks) > 0) { - SmartBlockContent::where('block_id','=',$dbSmartBlock->id)->delete(); - foreach ($request->tracks as $key => $track) { - $this->saveContent($track['file'], $dbSmartBlock->id, $key); - } - } - - return $dbSmartBlock->toJson(); + return $dbSmartBlock->toJson(); + } catch (\Exception $e) { + Log::error($e); + } } /** diff --git a/app/Models/Playlist.php b/app/Models/Playlist.php index 32b7e61..61e9ed9 100644 --- a/app/Models/Playlist.php +++ b/app/Models/Playlist.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Filters\PlaylistFilter; +use App\Models\Spot\SpotPlaylist; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use MusicBrainz\Value\Track; @@ -30,6 +31,10 @@ class Playlist extends Model return $this->hasMany(PlaylistContent::class); } + public function spotPlaylist(){ + return $this->hasOne(SpotPlaylist::class, 'playlist_id'); + } + public function scopeSearchFilter($query, $request) { $filters = new PlaylistFilter(); return $filters->apply($query, $request); diff --git a/app/Models/Show/Show.php b/app/Models/Show/Show.php index 8b07ce6..82a827a 100644 --- a/app/Models/Show/Show.php +++ b/app/Models/Show/Show.php @@ -2,14 +2,14 @@ namespace App\Models\Show; +use App\Filters\Show\ShowFilters; use App\Models\Playlist; use App\Models\ShowInstances\ShowInstances; use App\Models\SmartBlock; +use App\Models\Spot\SpotShow; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Database\Eloquent\SoftDeletes; class Show extends Model { @@ -66,13 +66,18 @@ class Show extends Model return $this->hasMany(ShowInstances::class, 'show_id'); } - public function scopeSearchFilter($query, $filters) + public function scopeSearchFilter($query, $request) { - return $filters->apply($query); + $filters = new ShowFilters(); + return $filters->apply($query, $request); } public function playlist() { return $this->belongsTo(Playlist::class, 'autoplaylist_id', 'id'); } + + public function spotShow(){ + return $this->hasOne(SpotShow::class, 'show_id'); + } } diff --git a/app/Models/SmartBlock.php b/app/Models/SmartBlock.php index b62e1ca..6259a14 100644 --- a/app/Models/SmartBlock.php +++ b/app/Models/SmartBlock.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Filters\PlaylistFilter; +use App\Models\Spot\SpotSmartBlock; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -41,4 +42,8 @@ class SmartBlock extends Model $filters = new PlaylistFilter(); return $filters->apply($query, $request); } + + public function spotSmartBlock(){ + return $this->hasOne(SpotSmartBlock::class, 'block_id'); + } } diff --git a/app/Models/Spot/SpotPlaylist.php b/app/Models/Spot/SpotPlaylist.php new file mode 100644 index 0000000..45e67e5 --- /dev/null +++ b/app/Models/Spot/SpotPlaylist.php @@ -0,0 +1,23 @@ +belongsTo(Playlist::class, 'playlist_id'); + } +} \ No newline at end of file diff --git a/app/Models/Spot/SpotShow.php b/app/Models/Spot/SpotShow.php new file mode 100644 index 0000000..daf226a --- /dev/null +++ b/app/Models/Spot/SpotShow.php @@ -0,0 +1,24 @@ +belongsTo(Show::class, 'show_id'); + } +} diff --git a/app/Models/Spot/SpotSmartBlock.php b/app/Models/Spot/SpotSmartBlock.php new file mode 100644 index 0000000..43c2326 --- /dev/null +++ b/app/Models/Spot/SpotSmartBlock.php @@ -0,0 +1,24 @@ +belongsTo(Block::class, 'block_id'); + } +} diff --git a/app/Traits/Show/ShowTrait.php b/app/Traits/Show/ShowTrait.php index b04a119..ab789b5 100644 --- a/app/Traits/Show/ShowTrait.php +++ b/app/Traits/Show/ShowTrait.php @@ -6,6 +6,7 @@ use App\Http\Resources\ShowResource; use App\Lib\RabbitMQSender; use App\Models\Show\Show; use App\Models\Show\ShowHosts; +use App\Models\Spot\SpotShow; use Exception; use Illuminate\Support\Facades\DB; use Throwable; @@ -31,6 +32,10 @@ trait ShowTrait } $this->manageShowInstances($show); $show->save(); + ## TODO Add show to table of spots + if($showData['show_type'] === 'spot') { + $show->spotShow()->create(); + } DB::commit(); } catch (Exception $e) { DB::rollBack();