57 lines
1.7 KiB
PHP
57 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\RunDrawRequest;
|
|
use App\Models\Audition;
|
|
use App\Models\Event;
|
|
use App\Services\DrawService;
|
|
use Illuminate\Http\Request;
|
|
|
|
use function array_keys;
|
|
use function to_route;
|
|
|
|
class DrawController extends Controller
|
|
{
|
|
protected $drawService;
|
|
|
|
public function __construct(DrawService $drawService)
|
|
{
|
|
$this->drawService = $drawService;
|
|
}
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$events = Event::with('auditions')->get();
|
|
// $drawnAuditionsExist is true if any audition->hasFlag('drawn') is true
|
|
$drawnAuditionsExist = Audition::whereHas('flags', function ($query) {
|
|
$query->where('flag_name', 'drawn');
|
|
})->exists();
|
|
|
|
return view('admin.draw.index', compact('events', 'drawnAuditionsExist'));
|
|
}
|
|
|
|
public function store(RunDrawRequest $request)
|
|
{
|
|
$auditions = Audition::with('flags')->findMany(array_keys($request->input('audition', [])));
|
|
|
|
if ($this->drawService->checkCollectionForDrawnAuditions($auditions)) {
|
|
return to_route('admin.draw.index')->with('error',
|
|
'Invalid attempt to draw an audition that has already been drawn');
|
|
}
|
|
|
|
$this->drawService->runDrawsOnCollection($auditions);
|
|
|
|
return to_route('admin.draw.index')->with('status', 'Draw completed successfully');
|
|
}
|
|
|
|
public function edit(Request $request)
|
|
{
|
|
$drawnAuditions = Audition::whereHas('flags', function ($query) {
|
|
$query->where('flag_name', 'drawn');
|
|
})->get();
|
|
return view('admin.draw.edit', compact('drawnAuditions'));
|
|
}
|
|
}
|