Skip to content

Tambah integrasi dengan inertiajs #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"spatie/laravel-package-tools": "^1.15.0"
},
"require-dev": {
"inertiajs/inertia-laravel": "^0.6.11",
"laravel/pint": "^1.10",
"orchestra/testbench": "^8.0",
"roave/security-advisories": "dev-latest",
Expand Down
19 changes: 19 additions & 0 deletions src/Actions/FetchUploadFileRecordPaginator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Actions;

use FromHome\ModelUpload\Models\ModelUploadFile;
use Illuminate\Contracts\Pagination\CursorPaginator;

final class FetchUploadFileRecordPaginator
{
public function handle(ModelUploadFile $uploadFile): CursorPaginator
{
return $uploadFile->records()
->with('model')
->cursorPaginate()
->withQueryString();
}
}
31 changes: 31 additions & 0 deletions src/Actions/FetchUserUploadFilePaginator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Actions;

use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Builder;
use FromHome\ModelUpload\Models\ModelUploadFile;
use Illuminate\Contracts\Pagination\CursorPaginator;

final class FetchUserUploadFilePaginator
{
public function handle(Request $request): CursorPaginator
{
$keyword = $request->string('keyword');

$modelType = $request->get('model_type');

return ModelUploadFile::query()
->when($keyword, function (Builder $builder) use ($keyword): void {
$value = \mb_strtolower((string) $keyword, 'UTF8');

$builder->orWhereRaw('LOWER(file_name) LIKE ?', ["%{$value}%"]);
})
->when($modelType, fn (Builder $builder) => $builder->where('model_type', $modelType))
->where('user_id', $request->user()?->getKey())
->cursorPaginate()
->withQueryString();
}
}
22 changes: 22 additions & 0 deletions src/Http/Controllers/FileUploadRecordController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Controllers;

use Illuminate\Contracts\Support\Responsable;
use FromHome\ModelUpload\Http\Responses\ShowFileUploadRecordResponse;
use FromHome\ModelUpload\Http\Responses\FetchFileUploadRecordResponse;

final class FileUploadRecordController
{
public function index(): Responsable
{
return app(FetchFileUploadRecordResponse::class);
}

public function show(): Responsable
{
return app(ShowFileUploadRecordResponse::class);
}
}
35 changes: 35 additions & 0 deletions src/Http/Controllers/UserFileUploadController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Pipeline;
use Illuminate\Contracts\Support\Responsable;
use FromHome\ModelUpload\Pipelines\StoreUploadFile;
use FromHome\ModelUpload\Http\Responses\FetchUserFileUploadResponse;
use FromHome\ModelUpload\Http\Responses\StoreUserFileUploadResponse;
use FromHome\ModelUpload\Http\Responses\CreateUserFileUploadResponse;

final class UserFileUploadController
{
public function index(): Responsable
{
return app(FetchUserFileUploadResponse::class);
}

public function create(): Responsable
{
return app(CreateUserFileUploadResponse::class);
}

public function store(Request $request): Responsable
{
Pipeline::send($request)->through([
StoreUploadFile::class,
]);

return app(StoreUserFileUploadResponse::class);
}
}
11 changes: 11 additions & 0 deletions src/Http/Responses/CreateUserFileUploadResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Illuminate\Contracts\Support\Responsable;

interface CreateUserFileUploadResponse extends Responsable
{
}
16 changes: 16 additions & 0 deletions src/Http/Responses/CreateUserFileUploadView.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Inertia\Inertia;
use Symfony\Component\HttpFoundation\Response;

final class CreateUserFileUploadView implements CreateUserFileUploadResponse
{
public function toResponse($request): Response
{
return Inertia::render('model-upload/create')->toResponse($request);
}
}
11 changes: 11 additions & 0 deletions src/Http/Responses/FetchFileUploadRecordResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Illuminate\Contracts\Support\Responsable;

interface FetchFileUploadRecordResponse extends Responsable
{
}
33 changes: 33 additions & 0 deletions src/Http/Responses/FetchFileUploadRecordView.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Inertia\Inertia;
use Symfony\Component\HttpFoundation\Response;
use FromHome\ModelUpload\Models\ModelUploadFile;
use FromHome\ModelUpload\Actions\FetchUploadFileRecordPaginator;

final class FetchFileUploadRecordView implements FetchFileUploadRecordResponse
{
public function __construct(
private readonly FetchUploadFileRecordPaginator $recordPaginator,
) {
}

public function toResponse($request): Response
{
$model = $request->route('model');

/** @var ModelUploadFile $modelUploadFile */
$modelUploadFile = $model instanceof ModelUploadFile ?
$model :
ModelUploadFile::query()->findOrFail($model);

return Inertia::render('model-upload/show', [
'model' => $modelUploadFile,
'records' => $this->recordPaginator->handle($modelUploadFile),
])->toResponse($request);
}
}
11 changes: 11 additions & 0 deletions src/Http/Responses/FetchUserFileUploadResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Illuminate\Contracts\Support\Responsable;

interface FetchUserFileUploadResponse extends Responsable
{
}
24 changes: 24 additions & 0 deletions src/Http/Responses/FetchUserFileUploadView.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Inertia\Inertia;
use Symfony\Component\HttpFoundation\Response;
use FromHome\ModelUpload\Actions\FetchUserUploadFilePaginator;

final class FetchUserFileUploadView implements FetchUserFileUploadResponse
{
public function __construct(
private readonly FetchUserUploadFilePaginator $filePaginator
) {
}

public function toResponse($request): Response
{
return Inertia::render('model-upload/list', [
'files' => $this->filePaginator->handle($request),
])->toResponse($request);
}
}
11 changes: 11 additions & 0 deletions src/Http/Responses/ShowFileUploadRecordResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Illuminate\Contracts\Support\Responsable;

interface ShowFileUploadRecordResponse extends Responsable
{
}
26 changes: 26 additions & 0 deletions src/Http/Responses/ShowFileUploadRecordView.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Inertia\Inertia;
use Symfony\Component\HttpFoundation\Response;
use FromHome\ModelUpload\Models\ModelUploadRecord;

final class ShowFileUploadRecordView implements ShowFileUploadRecordResponse
{
public function toResponse($request): Response
{
$record = $request->route('record');

/** @var ModelUploadRecord $modelUploadRecord */
$modelUploadRecord = $record instanceof ModelUploadRecord ?
$record->loadMissing(['model', 'file']) :
ModelUploadRecord::query()->with(['model', 'file'])->findOrFail($record);

return Inertia::render('model-upload/record', [
'record' => $modelUploadRecord,
])->toResponse($request);
}
}
11 changes: 11 additions & 0 deletions src/Http/Responses/StoreUserFileUploadResponse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Illuminate\Contracts\Support\Responsable;

interface StoreUserFileUploadResponse extends Responsable
{
}
15 changes: 15 additions & 0 deletions src/Http/Responses/StoreUserFileUploadView.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Http\Responses;

use Symfony\Component\HttpFoundation\Response;

final class StoreUserFileUploadView implements StoreUserFileUploadResponse
{
public function toResponse($request): Response
{
return redirect()->back();
}
}
14 changes: 14 additions & 0 deletions src/ModelUpload.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@

use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Route;
use FromHome\ModelUpload\Models\ModelUploadFile;
use FromHome\ModelUpload\Actions\StoreModelUploadFile;
use FromHome\ModelUpload\Processor\RecordProcessorManager;
use FromHome\ModelUpload\Http\Controllers\UserFileUploadController;
use FromHome\ModelUpload\Http\Controllers\FileUploadRecordController;

final class ModelUpload
{
Expand All @@ -32,4 +35,15 @@ public static function storeModelUploadFile(Request $request, array $meta = []):
$request->user(), $file, $request->input('model_type'), $meta
);
}

public static function routes(): void
{
Route::get('/model-upload', [UserFileUploadController::class, 'index']);
Route::get('/model-upload/create', [UserFileUploadController::class, 'create']);
Route::post('/model-upload', [UserFileUploadController::class, 'store']);

Route::get('/model-upload/{model}/record', [FileUploadRecordController::class, 'index']);

Route::get('/model-upload/record/{record}', [FileUploadRecordController::class, 'show']);
}
}
17 changes: 17 additions & 0 deletions src/ModelUploadServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,30 @@
use FromHome\ModelUpload\Actions\StoreModelUploadFile;
use Spatie\LaravelPackageTools\PackageServiceProvider;
use FromHome\ModelUpload\Processor\RecordProcessorManager;
use FromHome\ModelUpload\Http\Responses\FetchUserFileUploadView;
use FromHome\ModelUpload\Http\Responses\StoreUserFileUploadView;
use FromHome\ModelUpload\Http\Responses\CreateUserFileUploadView;
use FromHome\ModelUpload\Http\Responses\ShowFileUploadRecordView;
use FromHome\ModelUpload\Http\Responses\FetchFileUploadRecordView;
use FromHome\ModelUpload\Http\Responses\FetchUserFileUploadResponse;
use FromHome\ModelUpload\Http\Responses\StoreUserFileUploadResponse;
use FromHome\ModelUpload\Http\Responses\CreateUserFileUploadResponse;
use FromHome\ModelUpload\Http\Responses\ShowFileUploadRecordResponse;
use FromHome\ModelUpload\Http\Responses\FetchFileUploadRecordResponse;

final class ModelUploadServiceProvider extends PackageServiceProvider
{
public function registeringPackage(): void
{
$this->app->singleton(StoreModelUploadFile::class);
$this->app->singleton(RecordProcessorManager::class);

$this->app->bind(FetchUserFileUploadResponse::class, FetchUserFileUploadView::class);
$this->app->bind(CreateUserFileUploadResponse::class, CreateUserFileUploadView::class);
$this->app->bind(StoreUserFileUploadResponse::class, StoreUserFileUploadView::class);

$this->app->bind(FetchFileUploadRecordResponse::class, FetchFileUploadRecordView::class);
$this->app->bind(ShowFileUploadRecordResponse::class, ShowFileUploadRecordView::class);
}

public function configurePackage(Package $package): void
Expand Down
21 changes: 21 additions & 0 deletions src/Pipelines/StoreUploadFile.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

declare(strict_types=1);

namespace FromHome\ModelUpload\Pipelines;

use Illuminate\Http\Request;
use FromHome\ModelUpload\ModelUpload;

final class StoreUploadFile
{
public function handle(Request $request, callable $next): mixed
{
$model = ModelUpload::storeModelUploadFile(
$request,
$request->except(['file', 'model_type'])
);

return $next($model);
}
}