diff --git a/app/Console/Commands/TestScheduledDripEmailCommand.php b/app/Console/Commands/TestScheduledDripEmailCommand.php new file mode 100644 index 00000000..7e917be0 --- /dev/null +++ b/app/Console/Commands/TestScheduledDripEmailCommand.php @@ -0,0 +1,72 @@ +argument('email'); + $user = User::query()->where('email', $email)->first(); + + if (! $user) { + $this->error("User with email '{$email}' not found."); + + return self::FAILURE; + } + + if ($this->option('force')) { + $deleted = UserMailLog::query() + ->where('user_id', $user->id) + ->whereIn('email_type', [ + DripEmailType::Welcome, + DripEmailType::OnboardingReminder, + DripEmailType::PromoCode, + DripEmailType::ImportHelp, + DripEmailType::Feedback, + ]) + ->delete(); + + if ($deleted > 0) { + $this->info("Deleted {$deleted} mail log(s) for user '{$email}'."); + } + } + + $this->info("Scheduling drip emails for user '{$email}'..."); + + SendWelcomeEmailJob::dispatch($user)->delay(now()->addMinutes(30)); + SendOnboardingReminderEmailJob::dispatch($user)->delay(now()->addDay()); + SendPromoCodeEmailJob::dispatch($user)->delay(now()->addDay()); + SendImportHelpEmailJob::dispatch($user)->delay(now()->addDay()); + SendFeedbackEmailJob::dispatch($user)->delay(now()->addDays(5)); + + $this->info('Drip emails have been scheduled successfully!'); + $this->newLine(); + $this->table( + ['Email Type', 'Scheduled For'], + [ + ['Welcome', now()->addMinutes(30)->format('Y-m-d H:i:s')], + ['Onboarding Reminder', now()->addDay()->format('Y-m-d H:i:s')], + ['Promo Code', now()->addDay()->format('Y-m-d H:i:s')], + ['Import Help', now()->addDay()->format('Y-m-d H:i:s')], + ['Feedback', now()->addDays(5)->format('Y-m-d H:i:s')], + ] + ); + + return self::SUCCESS; + } +}