updatePosition($partner, $partner->position); } /** * Handle the Partner "updated" event. */ public function updated(Partner $partner): void { if ($partner->isDirty("position")) { $old = $partner->getOriginal("position"); $new = $partner->position; $this->updatePosition($partner, $new, $old); } } /** * Update the position of other partners based on the new and old position. */ public function updatePosition(Partner $partner, $new, $old = null) { // If old position exists and is greater than or equal to 1, decrement positions greater than the old position if ($old !== null && $old >= 1) { Partner::query() ->where("position", ">", $old) // Partners with position greater than the old one ->whereNot("id", $partner->id) // Exclude the current partner ->decrement("position"); // Decrement their position } // Now, increment positions greater than or equal to the new position Partner::query() ->where("position", ">=", $new) // Partners with position greater than or equal to the new one ->whereNot("id", $partner->id) // Exclude the current partner ->increment("position"); // Increment their position } /** * Handle the Partner "deleted" event. */ public function deleted(Partner $partner): void { // If a partner is deleted, their position may need to be adjusted for the remaining partners $this->adjustPositionsAfterDelete($partner); } /** * Handle the Partner "restored" event. */ public function restored(Partner $partner): void { // When restoring a partner, the positions might need to be adjusted as well $this->adjustPositionsAfterRestore($partner); } /** * Handle the Partner "force deleted" event. */ public function forceDeleted(Partner $partner): void { // Handle force delete if needed } /** * Adjust positions of other partners after a partner is deleted. */ private function adjustPositionsAfterDelete(Partner $partner): void { // Decrement positions of partners that had a greater position if ($partner->position != 0) { Partner::query() ->where("position", ">", $partner->position) // Partners with position greater than the deleted partner's position ->decrement("position"); // Decrement their position } } /** * Adjust positions after a partner is restored. */ private function adjustPositionsAfterRestore(Partner $partner): void { // Increment positions of partners that had a greater position Partner::query() ->where("position", ">=", $partner->position) // Partners with position greater or equal to the restored partner's position ->increment("position"); // Increment their position } }