This commit is contained in:
Adrian Hopek
2022-04-14 14:29:36 +02:00
parent 27c43872ba
commit e3998238ef
13 changed files with 499 additions and 183 deletions

View File

@@ -4,20 +4,83 @@ declare(strict_types=1);
namespace Toby\Infrastructure\Http\Controllers;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\Request;
use Inertia\Response;
use Toby\Eloquent\Helpers\YearPeriodRetriever;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Toby\Eloquent\Models\Key;
use Toby\Eloquent\Models\User;
use Toby\Infrastructure\Http\Requests\GiveKeyRequest;
use Toby\Infrastructure\Http\Resources\KeyResource;
use Toby\Infrastructure\Http\Resources\SimpleUserResource;
class KeysController extends Controller
{
public function index(Request $request, YearPeriodRetriever $yearPeriodRetriever): Response
public function index(Request $request): Response
{
$keys = Key::query()->get();
$keys = Key::query()
->oldest()
->get();
return inertia("Keys/Index", [
$users = User::query()
->where("id", "!=", $request->user()->id)
->orderByProfileField("last_name")
->orderByProfileField("first_name")
->get();
return inertia("Keys", [
"keys" => KeyResource::collection($keys),
"users" => SimpleUserResource::collection($users),
"can" => [
"manageKeys" => $request->user()->can("manage", Key::class),
],
]);
}
/**
* @throws AuthorizationException
*/
public function store(Request $request): RedirectResponse
{
$this->authorize("manageKeys");
$request->user()->keys()->create();
return redirect()
->back()
->with("success", __("Key has been created."));
}
public function take(Key $key, Request $request): RedirectResponse
{
$key->user()->associate($request->user());
$key->save();
return redirect()
->back()
->with("success", __("Key has been taked."));
}
public function give(Key $key, GiveKeyRequest $request): RedirectResponse
{
$key->user()->associate($request->recipient());
$key->save();
return redirect()
->back()
->with("success", __("Key has been given."));
}
public function destroy(Key $key): RedirectResponse
{
$this->authorize("manageKeys");
$key->delete();
return redirect()
->back()
->with("success", __("Key has been deleted."));
}
}

View File

@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Toby\Infrastructure\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Toby\Eloquent\Models\User;
class GiveKeyRequest extends FormRequest
{
public function rules(): array
{
return [
"user" => ["required", "exists:users,id"],
];
}
public function recipient(): User
{
return User::find($this->get("user"));
}
}

View File

@@ -14,9 +14,12 @@ class KeyResource extends JsonResource
{
return [
"id" => $this->id,
"owner" => new UserResource($this->owner),
"previousOwner" => new UserResource($this->previousOwner),
"user" => new SimpleUserResource($this->user),
"updatedAt" => $this->updated_at->toDatetimeString(),
"can" => [
"give" => $request->user()->can("give", $this->resource),
"take" => !$this->user()->is($request->user()),
],
];
}
}