. */ namespace App\Commands; use App\Models\User; use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Validator; class CreateUserCommand extends CommandBase { private $username; private $displayName; private $email; private $createArchivedUser; public function __construct( string $username, string $displayName, string $email = null, bool $createArchivedUser = false ) { $this->username = $username; $this->displayName = $displayName; $this->email = $email; $this->createArchivedUser = $createArchivedUser; } /** * @return bool */ public function authorize() { return Gate::allows('create-user'); } /** * @throws \Exception * @return CommandResponse */ public function execute() { $rules = [ 'username' => config('ponyfm.validation_rules.username'), 'display_name' => config('ponyfm.validation_rules.display_name'), 'email' => 'email', 'create_archived_user' => 'boolean', ]; $validator = Validator::make([ 'username' => $this->username, 'display_name' => $this->displayName, ], $rules); if ($validator->fails()) { return CommandResponse::fail([ 'message' => $validator->getMessageBag()->first(), 'user' => null, ]); } // Attempt to create the user. $user = User::findOrCreate($this->username, $this->displayName, $this->email, $this->createArchivedUser); if ($user->wasRecentlyCreated) { return CommandResponse::succeed([ 'message' => 'New user successfully created!', 'user' => User::mapPublicUserSummary($user), ], 201); } else { return CommandResponse::fail([ 'message' => 'A user with that username already exists.', 'user' => User::mapPublicUserSummary($user), ], 409); } } }