Files
Investidor-V2/app/Http/Controllers/PortalContactController.php
T
2026-10-20 11:39:25 +02:00

41 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Mail\ContactMessageReceivedMail;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Throwable;
class PortalContactController extends Controller
{
// Adapter for investidor's contact form: preserve its fields and validation,
// using the configured mail transport without adding a database dependency.
public function store(Request $request): JsonResponse
{
$data = $request->validate([
'name' => ['required', 'string', 'min:2', 'max:150'],
'email' => ['required', 'email', 'max:255'],
'phone' => ['nullable', 'string', 'max:30'],
'subject' => ['required', 'string', 'min:3', 'max:100'],
'message' => ['required', 'string', 'min:10', 'max:2000'],
]);
try {
Mail::to(config('contact_messages.recipient'))
->send(new ContactMessageReceivedMail([
'name' => $data['name'], 'email' => $data['email'], 'phone' => $data['phone'] ?? null,
'subject' => $data['subject'], 'message' => $data['message'], 'platform' => 'InvesteMoz',
]));
} catch (Throwable $exception) {
Log::warning('Falha no envio de contacto do portal.', ['exception' => $exception::class]);
return response()->json(['success' => false, 'message' => 'Ocorreu um erro ao enviar a mensagem.'], 500);
}
return response()->json(['success' => true, 'message' => 'Mensagem enviada com sucesso.'], 201);
}
}