PHP code example of klinikpintar / laravel-repository

1. Go to this page and download the library: Download klinikpintar/laravel-repository library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

klinikpintar / laravel-repository example snippets



namespace App\Repositories;
use App\Models\User as Model;
use KlinikPintar\RepositorySoftDelete;

class UserRepository extends RepositorySoftDelete
{
    /**
     * model
     *
     * @var \Illuminate\Database\Eloquent\Model
     */
    protected $model = Model::class;

    /**
     * fillable data model.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'username', 'email', 'password', 'role'
    ];
}

Create user controller

namespace App\Http\Controllers;
use App\Repositories\UserRepository;
use App\Http\Resources\UserResource;
use App\Http\Requests\User\CreateRequest;
use App\Http\Requests\User\UpdateRequest;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * repository
     *
     * @var \App\Repositories\UserRepository
     */
    protected $repository;

    public function __construct()
    {
        $this->repository = new UserRepository();
    }

    /**
     * get list of companies
     */
    public function getList(Request $request)
    {
        $collection = $this->repository->getList($request);

        return UserResource::collection($collection);
    }

    /**
     * get detail of companies
     */
    public function getDetail(Request $request, int $id)
    {
        $user = $this->repository->getDetail($request, $id);

        return new UserResource($user);
    }

    /**
     * create User
     */
    public function create(CreateRequest $request)
    {
        $user = $this->repository->create($request);

        return (new UserResource($user))->additional([
            'message' => 'User has been created'
        ]);
    }

    /**
     * update User
     */
    public function update(UpdateRequest $request, int $id)
    {
        $user = $this->repository->update($request, $id);

        return (new UserResource($user))->additional([
            'message' => 'User has been updated'
        ]);
    }

    /**
     * activate User
     */
    public function activate(Request $request, int $id)
    {
        $user = $this->repository->activate($request, $id);

        return (new UserResource($user))->additional([
            'message' => 'User has been activated'
        ]);
    }

    /**
     * inactive User
     */
    public function inactive(Request $request, int $id)
    {
        $user = $this->repository->inactive($request, $id);

        return (new UserResource($user))->additional([
            'message' => 'User has been inactived'
        ]);
    }

    /**
     * delete User
     */
    public function delete(Request $request, int $id)
    {
        $user = $this->repository->delete($request, $id);

        return (new UserResource($user))->additional([
            'message' => 'User has been deleted'
        ]);
    }

    /**
     * restore User
     */
    public function restore(Request $request, int $id)
    {
        $user = $this->repository->restore($request, $id);

        return (new UserResource($user))->additional([
            'message' => 'User has been restored'
        ]);
    }

    /**
     * forceDelete User
     */
    public function forceDelete(Request $request, int $id)
    {
        $user = $this->repository->forceDelete($request, $id);

        return (new UserResource($user))->additional([
            'message' => 'User has been force deleted'
        ]);
    }
}

Route::prefix('/user')->group(function () {
    Route::get('/', [UserController::class, 'getList'])->name('user.list');
    Route::get('/{id}', [UserController::class, 'getDetail'])->name('user.detail');
    Route::post('/', [UserController::class, 'create'])->name('user.create');
    Route::put('/{id}', [UserController::class, 'update'])->name('user.update');
    Route::put('/{id}/activate', [UserController::class, 'activate'])->name('user.activate');
    Route::put('/{id}/inactive', [UserController::class, 'inactive'])->name('user.inactive');
    Route::pute('/{id}/restore', [UserController::class, 'restore'])->name('user.restore');
    Route::delete('/{id}', [UserController::class, 'delete'])->name('user.delete');
    Route::delete('/{id}', [UserController::class, 'forceDelete'])->name('user.force-delete');
});


    /**
     * paginationable.
     *
     * @var bool
     */
    protected $paginationable = false;

    /**
     * optional pagination.
     *
     * @var bool
     */
    protected $optionalPagination = true;

    /**
     * apply filter.
     */
    protected function applyFilter(Request $request, Builder &$builder): void
    {
        if ($request->query('role')) {
            $builder->whereRole($request->role);
        }
    }

    /**
     * sortable.
     *
     * @var bool
     */
    protected $sortable = true;

    /**
     * field allowed to sort.
     *
     * @var array
     */
    protected $sortAllowedFields = ['id'];

    /**
     * default sort field.
     *
     * @var string
     */
    protected $defaultSortField = null;

    /**
     * relationable.
     *
     * @var bool
     */
    protected $relationable = true;

    /**
     * field allowed to get relation.
     *
     * @var array
     */
    protected $relationAllowed = ['contact', 'parent', 'parent.contact'];

    /**
     * relation autoload.
     *
     * @var mixed
     */
    protected $relation = null;

    /**
     * on User created
     * 
     * @var \Illuminate\Http\Request
     * @var \Illuminate\Database\Eloquent\Model
     */
    public function onCreated(CreateRequest $request, User $user): void
    {
        $user->contact->create([...]);
    }