false, 'message' => 'Membership table missing. Please run migrations.', ]; } $classSectionId = (int) ($payload['class_section_id'] ?? 0); if ($classSectionId <= 0) { return [ 'ok' => false, 'message' => 'Invalid class section.', ]; } $schoolYear = trim((string) ($payload['school_year'] ?? '')); $semester = trim((string) ($payload['semester'] ?? '')); $primaryId = (int) ($payload['primary_id'] ?? 0); $secondId = (int) ($payload['second_id'] ?? 0); $primaryMember = $payload['primary_member'] ?? null; $secondMember = $payload['second_member'] ?? null; $saved = DB::transaction(function () use ( $classSectionId, $schoolYear, $semester, $primaryId, $secondId, $primaryMember, $secondMember, $verifiedBy ) { $saved = []; if ($primaryId > 0) { $id = WhatsappGroupMembership::upsertMembership( $classSectionId, $schoolYear, $semester, WhatsappGroupMembership::TYPE_PRIMARY, $primaryId, (bool) $primaryMember, $verifiedBy ); $saved[] = 'primary='.$primaryId.':'.($primaryMember ? '1' : '0'); if ($id <= 0) { Log::warning('Failed to upsert primary membership.', [ 'class_section_id' => $classSectionId, 'primary_id' => $primaryId, ]); } } if ($secondId > 0) { $id = WhatsappGroupMembership::upsertMembership( $classSectionId, $schoolYear, $semester, WhatsappGroupMembership::TYPE_SECOND, $secondId, (bool) $secondMember, $verifiedBy ); $saved[] = 'second='.$secondId.':'.($secondMember ? '1' : '0'); if ($id <= 0) { Log::warning('Failed to upsert second membership.', [ 'class_section_id' => $classSectionId, 'second_id' => $secondId, ]); } } return $saved; }); if (empty($saved)) { return [ 'ok' => false, 'message' => 'Nothing to save (missing parent IDs).', ]; } return [ 'ok' => true, 'saved' => $saved, 'term' => [ 'school_year' => $schoolYear, 'semester' => $semester, ], ]; } }