$data['email']])->count() !== 0) { throw new HttpResponseException(response()->json('email_taken', 400)); } $data['password'] = Hash::make($data['password']); $user = User::create($data); if ($autoLogin) { Auth::login($user); } return $user; } /** * Login to user * * @param array $data This is expected to be validated already * @return User */ public function login($data): bool { if (Auth::attempt($data)) { request()->session()->regenerate(); return true; } return false; } public function setPassword($data) { $user = User::where(['email' => $data['email']])->first(); if ($user === null) { return; } $user->password = Hash::make($data['password']); $user->save(); } public function listAll(?Filters $filters = null): array { if (is_null($filters)) { return User::all()->toArray(); } $builder = User::query(); $filters->apply($builder); return $builder->get()->toArray(); } public function getOneById(string $id): ?User { return User::where(['id' => $id])->first(); } /** * Will return `null` if failed */ public function editUser(array $data, string $id): ?User { $user = $this->getOneById($id); if ($user === null) { return null; } if (array_key_exists('password', $data)) { $this->setPassword(['email' => $user['email'], 'password' => $data['password']]); unset($data['password']); } $user->fill($data); $user->save(); return $user; } public function getUnexistingIds(array $ids): ?array { $users = User::whereIn('id', $ids)->get(); if ($users->count() != count($ids)) { $existingIds = $users->map( function ($model) { return $model->id; } )->toArray(); return array_diff($ids, $existingIds); } return null; } }