File: /var/www/api.ayokah.co.uk/app/Http/Controllers/Admin/NewsletterController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Models\Newsletter;
use App\Mail\NewsletterMail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Mail;
use Illuminate\Validation\ValidationException;
class NewsletterController extends Controller
{
public function store(Request $request)
{
try {
$validatedData = $request->validate([
'email' => ['required', 'email', 'unique:newsletters,email'],
]);
} catch (ValidationException $e) {
Log::error($e->getMessage());
return response()->json(['error' => 'You are already in our newsletter'], 422);
}
try {
$newsletter = new Newsletter();
$newsletter->email = $validatedData['email'];
$newsletter->save();
Mail::to($newsletter->email)->send(new NewsletterMail($newsletter));
return response()->json(['message' => 'Email received. Thank you!', 'newsletter' => $newsletter], 200);
} catch (\Throwable $e) {
Log::alert($e->getMessage());
return response()->json(['error' => 'Poor internet connection. Failed to send newsletter mail but email is saved.'], 500);
}
}
public function index()
{
$newsletter = Newsletter::latest()->paginate(10);
return response()->json(['news' => $newsletter], 200);
}
public function delete(Request $request)
{
try {
$validatedData = $request->validate([
'id' => ['required', 'exists:newsletter,id'],
]);
} catch (\Illuminate\Validation\ValidationException $e) {
return response()->json(['error' => $e->errors()], 422);
}
$newsletter = Newsletter::findOrFail($request->id);
$newsletter->delete();
return response()->json(['message' => 'News letter deleted successfully'], 200);
}
}