- add cv management
This commit is contained in:
95
app/Http/Controllers/Dashboard/CVController.php
Normal file
95
app/Http/Controllers/Dashboard/CVController.php
Normal 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 .'"');
|
||||
}
|
||||
}
|
23
app/Http/Requests/CVRequest.php
Normal file
23
app/Http/Requests/CVRequest.php
Normal 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',
|
||||
];
|
||||
}
|
||||
}
|
17
app/Http/Resources/CVCollection.php
Normal file
17
app/Http/Resources/CVCollection.php
Normal 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,
|
||||
];
|
||||
}
|
||||
}
|
17
app/Http/Resources/CVInfoCollection.php
Normal file
17
app/Http/Resources/CVInfoCollection.php
Normal 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,
|
||||
];
|
||||
}
|
||||
}
|
21
app/Http/Resources/CVInfoResource.php
Normal file
21
app/Http/Resources/CVInfoResource.php
Normal 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'),
|
||||
];
|
||||
}
|
||||
}
|
17
app/Http/Resources/FullCVCollection.php
Normal file
17
app/Http/Resources/FullCVCollection.php
Normal 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,
|
||||
];
|
||||
}
|
||||
}
|
29
app/Http/Resources/FullCVResource.php
Normal file
29
app/Http/Resources/FullCVResource.php
Normal 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,
|
||||
];
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user