ldc-legaulois/app/Http/Controllers/Club/SurveyController.php
2026-09-25 16:25:31 +02:00

52 lines
1.9 KiB
PHP

<?php
namespace App\Http\Controllers\Club;
use App\Http\Controllers\Controller;
use App\Http\Requests\Club\Surveys\StoreSurveyAnswerRequest;
use App\Models\NewsClub;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class SurveyController extends Controller
{
/**
* Display the showing page for an article (whatever the type).
*/
public function show(Request $request): View
{
/** @var \App\Models\Customer $customerModel */
$customerModel = auth('club')->user();
$newsClubModel = NewsClub::query()
->where('published', true)
->where('slug', $request->news_club_slug)
->firstOrFail();
$customerSurveyAnswers = $customerModel->surveyAnswers
->filter(function ($surveyAnswer) use ($newsClubModel) {
return $surveyAnswer->newsClub->getKey() === $newsClubModel->getKey();
});
return view('club.pages.surveys.show', compact('newsClubModel', 'customerSurveyAnswers'));
}
/**
* Store answers from a club customer.
*/
public function store(StoreSurveyAnswerRequest $request): RedirectResponse
{
return DB::transaction(function () use ($request) {
/** @var \App\Models\Customer $customerModel */
$customerModel = auth('club')->user();
$newsClubModel = NewsClub::query()
->where('published', true)
->where('id', $request->validated()['news_club_id'])
->first();
$customerModel->surveyAnswers()->sync(collect($request->validated()['answers']));
return redirect()->route('club.news.show', $newsClubModel->slug)
->with('success', trans('Votre réponse à bien été enregistrée !'));
});
}
}