Files
amare/app/Http/Controllers/PublicSite/PartnerInquiryController.php

67 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\PublicSite;
use App\Http\Controllers\Controller;
use App\Http\Requests\PublicSite\PartnerInquiryRequest;
use App\Mail\PartnerInquiry;
use App\Models\SiteSetting;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Throwable;
final class PartnerInquiryController extends Controller
{
private const string DUPLICATE_SESSION_KEY = 'partner_inquiry_hash';
public function store(PartnerInquiryRequest $request): RedirectResponse
{
if (filled($request->input('website'))) {
return $this->success();
}
$validated = $request->validated();
if (session()->get(self::DUPLICATE_SESSION_KEY) === $this->hash($validated)) {
return $this->success();
}
session()->put(self::DUPLICATE_SESSION_KEY, $this->hash($validated));
try {
$settings = SiteSetting::instance();
if (filled($settings->email)) {
Mail::to($settings->email)->send(new PartnerInquiry([
'Nome' => $validated['nome'],
'Nome profissional ou empresa' => $validated['empresa'] ?? null,
'E-mail' => $validated['email'],
'Atuação ou serviço' => $validated['atuacao'],
'Área de atendimento' => $validated['area_atendimento'],
'Mensagem' => $validated['mensagem'],
'Portfólio ou redes' => $validated['portfolio_redes'] ?? null,
'Telefone' => $validated['telefone'] ?? null,
]));
}
} catch (Throwable $exception) {
Log::error('Falha ao enviar consulta de parceiro', ['exception' => $exception::class]);
}
return $this->success();
}
/** @param array<string, mixed> $validated */
private function hash(array $validated): string
{
return hash('sha256', serialize($validated));
}
private function success(): RedirectResponse
{
return redirect()->route('contact')->with('status', 'partner-inquiry-sent');
}
}