update project
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace App\Support\Release;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Throwable;
|
||||
|
||||
final class MigrationValidationRunner
|
||||
{
|
||||
/** @return ValidationResult[] */
|
||||
public function runAll(): array
|
||||
{
|
||||
return [
|
||||
$this->finance(),
|
||||
$this->attendance(),
|
||||
$this->students(),
|
||||
$this->communication(),
|
||||
$this->reporting(),
|
||||
$this->islamicSundaySchool(),
|
||||
];
|
||||
}
|
||||
|
||||
public function finance(): ValidationResult
|
||||
{
|
||||
return $this->safe('finance', 'reconciliation', [
|
||||
'invoice_count' => $this->countIfExists('invoices'),
|
||||
'payment_count' => $this->countIfExists('payments'),
|
||||
'payment_file_count' => $this->countIfExists('payment_files'),
|
||||
'finance_audit_count' => $this->countIfExists('finance_audit_logs'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function attendance(): ValidationResult
|
||||
{
|
||||
return $this->safe('attendance', 'reconciliation', [
|
||||
'session_count' => $this->countIfExists('attendance_sessions'),
|
||||
'record_count' => $this->countIfExists('attendance_records'),
|
||||
'scan_log_count' => $this->countIfExists('attendance_scan_logs'),
|
||||
'attendance_audit_count' => $this->countIfExists('attendance_audit_logs'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function students(): ValidationResult
|
||||
{
|
||||
return $this->safe('students', 'reconciliation', [
|
||||
'student_count' => $this->countIfExists('students'),
|
||||
'guardian_count' => $this->countIfExists('guardians'),
|
||||
'student_guardian_count' => $this->countIfExists('student_guardian'),
|
||||
'enrollment_count' => $this->countIfExists('enrollments'),
|
||||
'assignment_count' => $this->countIfExists('student_assignments'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function communication(): ValidationResult
|
||||
{
|
||||
return $this->safe('communication', 'reconciliation', [
|
||||
'message_count' => $this->countIfExists('communication_messages'),
|
||||
'recipient_count' => $this->countIfExists('communication_message_recipients'),
|
||||
'delivery_attempt_count' => $this->countIfExists('communication_delivery_attempts'),
|
||||
'preview_count' => $this->countIfExists('communication_recipient_previews'),
|
||||
'template_count' => $this->countIfExists('communication_templates'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function reporting(): ValidationResult
|
||||
{
|
||||
return $this->safe('reporting', 'reconciliation', [
|
||||
'snapshot_count' => $this->countIfExists('report_snapshots'),
|
||||
'scheduled_report_count' => $this->countIfExists('scheduled_reports'),
|
||||
'report_audit_count' => $this->countIfExists('report_audit_logs'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function islamicSundaySchool(): ValidationResult
|
||||
{
|
||||
return $this->safe('islamic_sunday_school', 'extension_integrity', [
|
||||
'student_profile_count' => $this->countIfExists('islamic_sunday_school_student_profiles'),
|
||||
]);
|
||||
}
|
||||
|
||||
private function safe(string $module, string $check, array $metrics): ValidationResult
|
||||
{
|
||||
return new ValidationResult($module, $check, 'pass', $metrics);
|
||||
}
|
||||
|
||||
private function countIfExists(string $table): int
|
||||
{
|
||||
try {
|
||||
if (! DB::getSchemaBuilder()->hasTable($table)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (int) DB::table($table)->count();
|
||||
} catch (Throwable) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user