auditionadmin/app/Http/Controllers/DoublerRequestController.php

69 lines
2.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\DoublerRequestsStoreRequest;
use App\Models\DoublerRequest;
use App\Models\Event;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Contracts\View\View;
use function auth;
use function compact;
use function to_route;
class DoublerRequestController extends Controller
{
/**
* Display a listing of the resource.
*
* Data sent to view:
* - events - all existing events
* - existingRequests - previously made requests for each event, keyed by student id
* existingRequest[eventId][student id]-> Request
* - doublers - existing doublers, grouped by event. Keyed by event_id and student_id
*
* @return Application|Factory|View|\Illuminate\Foundation\Application|\Illuminate\View\View
*/
public function index()
{
$events = Event::all();
$existingRequests = auth()->user()->school->doublerRequests
->groupBy('event_id')
->map(function ($requestsForEvent) {
return $requestsForEvent->keyBy('student_id');
});
$doublers = auth()->user()->school->doublers()
->with('student')
->with('event')
->get()
->groupBy('event_id');
return view('doubler_request.index', compact('events', 'doublers', 'existingRequests'));
}
public function makeRequest(DoublerRequestsStoreRequest $request)
{
foreach ($request->getDoublerRequests() as $thisRequest) {
if (! $thisRequest['request']) {
DoublerRequest::where('event_id', $thisRequest['event_id'])
->where('student_id', $thisRequest['student_id'])->delete();
continue;
}
DoublerRequest::upsert([
'event_id' => $thisRequest['event_id'],
'student_id' => $thisRequest['student_id'],
'request' => $thisRequest['request'],
],
uniqueBy: ['event_id', 'student_id'],
update: ['request']
);
}
return to_route('doubler_request.index')->with('success', 'Recorded doubler requests');
}
}