You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CreateCompany.php 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. <?php
  2. namespace App\Actions\FilamentCompanies;
  3. use App\Models\{Company, User};
  4. use Illuminate\Auth\Access\AuthorizationException;
  5. use Illuminate\Support\Facades\{Gate, Validator};
  6. use Wallo\FilamentCompanies\Contracts\CreatesCompanies;
  7. use Wallo\FilamentCompanies\Events\AddingCompany;
  8. use Wallo\FilamentCompanies\FilamentCompanies;
  9. class CreateCompany implements CreatesCompanies
  10. {
  11. /**
  12. * Validate and create a new company for the given user.
  13. *
  14. * @param array<string, string> $input
  15. *
  16. * @throws AuthorizationException
  17. */
  18. public function create(User $user, array $input): Company
  19. {
  20. Gate::forUser($user)->authorize('create', FilamentCompanies::newCompanyModel());
  21. Validator::make($input, [
  22. 'name' => ['required', 'string', 'max:255'],
  23. ])->validateWithBag('createCompany');
  24. AddingCompany::dispatch($user);
  25. $user->switchCompany($company = $user->ownedCompanies()->create([
  26. 'name' => $input['name'],
  27. 'personal_company' => false,
  28. ]));
  29. return $company;
  30. }
  31. }