- add cv management

This commit is contained in:
2023-07-29 00:34:32 +02:00
parent f32f13604f
commit 1ccc934561
15 changed files with 741 additions and 4 deletions

View File

@@ -0,0 +1,95 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Http\Requests\CVRequest;
use App\Http\Resources\CVInfoCollection;
use App\Http\Resources\FullCVCollection;
use App\Http\Resources\FullCVResource;
use App\Models\CV;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Inertia\Response as InertiaResponse;
class CVController extends Controller
{
public function index(Request $request): InertiaResponse
{
return inertia('CV/Index', [
'cvs' => new FullCVCollection(CV::all()),
]);
}
public function show(CV $cv): InertiaResponse
{
return inertia('CV/Show', [
'cv' => new FullCVResource($cv),
'cvInfo' => new CVInfoCollection($cv->info()->orderByDesc('id')->get()),
]);
}
public function create(): InertiaResponse
{
return inertia('CV/Create');
}
public function store(CVRequest $request): RedirectResponse
{
CV::query()
->create([
'token' => Str::random(50),
'recipient' => $request->get('recipient'),
'email' => $request->get('email'),
'phone_number' => $request->get('phone_number'),
'locations' => ($locations = $request->get('locations')) === [''] ? [] : $locations,
'mission' => ($mission = $request->get('mission')) === [''] ? [] : $mission,
'rodo' => ($rodo =$request->get('rodo')) === '' ? null : $rodo,
'position' => $request->get('position'),
]);
return redirect()
->route('admin.cv.store')
->with('success', 'Utworzono nowe CV dla firmy ' . $request->get('recipient'));
}
public function edit(CV $cv): InertiaResponse
{
return inertia('CV/Edit', [
'cv' => new FullCVResource($cv),
]);
}
public function update(CVRequest $request, CV $cv): RedirectResponse
{
$cv->update([
'recipient' => $request->get('recipient'),
'email' => $request->get('email'),
'phone_number' => $request->get('phone_number'),
'locations' => ($locations = $request->get('locations')) === [''] ? [] : $locations,
'mission' => ($mission = $request->get('mission')) === [''] ? [] : $mission,
'rodo' => ($rodo =$request->get('rodo')) === '' ? null : $rodo,
'position' => $request->get('position'),
]);
return redirect()
->back()
->with('success', 'Zaktualizowano CV dla firmy ' . $request->get('recipient'));
}
public function delete(CV $cv): InertiaResponse
{
return inertia('CV/ConfirmDelete', compact('cv'));
}
public function destroy(CV $cv): RedirectResponse
{
$name = $cv->recipient;
$cv->delete();
return redirect()
->route('admin.cv.index')
->with('info', 'Usunięto CV dla firmy "'. $name .'"');
}
}

View File

@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CVRequest extends FormRequest
{
public function rules(): array
{
return [
'recipient' => 'required|string',
'email' => 'required|email',
'phone_number' => 'required|string',
'locations' => 'required|array',
'mission' => 'nullable|string',
'rodo' => 'nullable|string',
'position' => 'required|string',
];
}
}

View File

@@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class CVCollection extends ResourceCollection
{
public function toArray($request): array
{
return [
'data' => $this->collection,
];
}
}

View File

@@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class CVInfoCollection extends ResourceCollection
{
public function toArray($request): array
{
return [
'data' => $this->collection,
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class CVInfoResource extends JsonResource
{
public static $wrap = null;
public function toArray($request): array
{
return [
'id' => $this->id,
'ip' => $this->ip,
'created_at' => $this->created_at->format('d-m-Y H:i:s'),
];
}
}

View File

@@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class FullCVCollection extends ResourceCollection
{
public function toArray($request): array
{
return [
'data' => $this->collection,
];
}
}

View File

@@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class FullCVResource extends JsonResource
{
public static $wrap = null;
public function toArray($request = null): array
{
return [
'id' => $this->id,
'token' => $this->token,
'email' => $this->email,
'recipient' => $this->recipient,
'phone' => new PhoneResource($this->resource),
'locations' => $this->locations,
'views' => $this->resource->info()->select('id')->get()->count(),
'registeredViews' => $this->views,
'mission' => explode(PHP_EOL, $this->mission ?? '', 5),
'rodo' => $this->rodo,
'position' => $this->position,
];
}
}