#4- wip
This commit is contained in:
@@ -15,4 +15,14 @@ enum FormOfEmployment: string
|
||||
{
|
||||
return __($this->value);
|
||||
}
|
||||
|
||||
public static function casesToSelect(): array
|
||||
{
|
||||
$cases = collect(FormOfEmployment::cases());
|
||||
|
||||
return $cases->map(fn(FormOfEmployment $enum) => [
|
||||
"label" => $enum->label(),
|
||||
"value" => $enum->value]
|
||||
)->toArray();
|
||||
}
|
||||
}
|
@@ -4,8 +4,12 @@ declare(strict_types=1);
|
||||
|
||||
namespace Toby\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Response;
|
||||
use Toby\Enums\FormOfEmployment;
|
||||
use Toby\Http\Requests\UserRequest;
|
||||
use Toby\Http\Resources\UserFormDataResource;
|
||||
use Toby\Http\Resources\UserResource;
|
||||
use Toby\Models\User;
|
||||
|
||||
@@ -14,6 +18,7 @@ class UserController extends Controller
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
$users = User::query()
|
||||
->withTrashed()
|
||||
->search($request->query("search"))
|
||||
->paginate()
|
||||
->withQueryString();
|
||||
@@ -23,4 +28,55 @@ class UserController extends Controller
|
||||
"filters" => $request->only("search"),
|
||||
]);
|
||||
}
|
||||
|
||||
public function create(): Response
|
||||
{
|
||||
return inertia("Users/Create", [
|
||||
"employmentForms" => FormOfEmployment::casesToSelect(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(UserRequest $request): RedirectResponse
|
||||
{
|
||||
User::query()->create($request->data());
|
||||
|
||||
return redirect()
|
||||
->route("users.index")
|
||||
->with("success", __("User has been created"));
|
||||
}
|
||||
|
||||
public function edit(User $user): Response
|
||||
{
|
||||
return inertia("Users/Edit", [
|
||||
"user" => new UserFormDataResource($user),
|
||||
"employmentForms" => FormOfEmployment::casesToSelect()
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(UserRequest $request, User $user): RedirectResponse
|
||||
{
|
||||
$user->update($request->data());
|
||||
|
||||
return redirect()
|
||||
->route("users.index")
|
||||
->with("success", __("User has been updated"));
|
||||
}
|
||||
|
||||
public function destroy(User $user): RedirectResponse
|
||||
{
|
||||
$user->delete();
|
||||
|
||||
return redirect()
|
||||
->route("users.index")
|
||||
->with("success", __("User has been deleted"));
|
||||
}
|
||||
|
||||
public function restore(User $user): RedirectResponse
|
||||
{
|
||||
$user->restore();
|
||||
|
||||
return redirect()
|
||||
->route("users.index")
|
||||
->with("success", __("User has been restored"));
|
||||
}
|
||||
}
|
||||
|
33
app/Http/Requests/UserRequest.php
Normal file
33
app/Http/Requests/UserRequest.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Toby\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Rules\Enum;
|
||||
use Toby\Enums\FormOfEmployment;
|
||||
|
||||
class UserRequest extends FormRequest
|
||||
{
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
"name" => ["required", "min:3", "max: 150"],
|
||||
"email" => ["required", "email", Rule::unique("users", "email")->ignore($this->user)],
|
||||
"employmentForm" => ["required", new Enum(FormOfEmployment::class)],
|
||||
"employmentDate" => ["required", "date"],
|
||||
];
|
||||
}
|
||||
|
||||
public function data(): array
|
||||
{
|
||||
return [
|
||||
"name" => $this->get("name"),
|
||||
"email" => $this->get("email"),
|
||||
"employment_form" => $this->get("employmentForm"),
|
||||
"employment_date" => $this->get("employmentDate"),
|
||||
];
|
||||
}
|
||||
}
|
23
app/Http/Resources/UserFormDataResource.php
Normal file
23
app/Http/Resources/UserFormDataResource.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Toby\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class UserFormDataResource extends JsonResource
|
||||
{
|
||||
public static $wrap = false;
|
||||
|
||||
public function toArray($request): array
|
||||
{
|
||||
return [
|
||||
"id" => $this->id,
|
||||
"name" => $this->name,
|
||||
"email" => $this->email,
|
||||
"employmentForm" => $this->employment_form,
|
||||
"employmentDate" => $this->employment_date,
|
||||
];
|
||||
}
|
||||
}
|
@@ -16,8 +16,9 @@ class UserResource extends JsonResource
|
||||
"email" => $this->email,
|
||||
"role" => "Human Resources Manager",
|
||||
"avatar" => asset($this->avatar),
|
||||
"trashed" => $this->trashed(),
|
||||
"employmentForm" => $this->employment_form->label(),
|
||||
"employmentStartDate" => $this->employment_start_date->translatedFormat("j F Y"),
|
||||
"employmentDate" => $this->employment_date->translatedFormat("j F Y"),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@@ -6,6 +6,7 @@ namespace Toby\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Carbon;
|
||||
@@ -17,12 +18,13 @@ use Toby\Enums\FormOfEmployment;
|
||||
* @property string $email
|
||||
* @property string $avatar
|
||||
* @property FormOfEmployment $employment_form
|
||||
* @property Carbon $empoyment_start_date
|
||||
* @property Carbon $empoyment_date
|
||||
*/
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use HasFactory;
|
||||
use Notifiable;
|
||||
use SoftDeletes;
|
||||
|
||||
protected $perPage = 10;
|
||||
|
||||
@@ -31,12 +33,12 @@ class User extends Authenticatable
|
||||
"email",
|
||||
"avatar",
|
||||
"employment_form",
|
||||
"employment_start_date",
|
||||
"employment_date",
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
"employment_form" => FormOfEmployment::class,
|
||||
"employment_start_date" => "datetime",
|
||||
"employment_date" => "datetime",
|
||||
];
|
||||
|
||||
protected $hidden = [
|
||||
|
@@ -29,7 +29,7 @@ class UserObserver
|
||||
}
|
||||
}
|
||||
|
||||
public function deleted(User $user): void
|
||||
public function forceDeleted(User $user): void
|
||||
{
|
||||
Storage::delete($user->avatar);
|
||||
}
|
||||
|
Reference in New Issue
Block a user