Initial commit

This commit is contained in:
2025-11-20 23:21:05 +08:00
commit 13bc6db529
378 changed files with 54527 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Console\Commands;
use App\Mail\MembershipExpiryReminderMail;
use App\Models\Member;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
class SendMembershipExpiryReminders extends Command
{
protected $signature = 'members:send-expiry-reminders {--days=30 : Number of days before expiry to send reminders}';
protected $description = 'Send membership expiry reminder emails';
public function handle(): int
{
$days = (int) $this->option('days');
$targetDate = now()->addDays($days)->toDateString();
$members = Member::whereDate('membership_expires_at', $targetDate)
->where(function ($q) {
$q->whereNull('last_expiry_reminder_sent_at')
->orWhere('last_expiry_reminder_sent_at', '<', now()->subDays(1));
})
->get();
if ($members->isEmpty()) {
$this->info('No members to remind.');
return static::SUCCESS;
}
foreach ($members as $member) {
if (! $member->email) {
continue;
}
Mail::to($member->email)->queue(new MembershipExpiryReminderMail($member));
$member->last_expiry_reminder_sent_at = now();
$member->save();
}
$this->info('Reminders sent to '.$members->count().' member(s).');
return static::SUCCESS;
}
}