Added relationships, validation, controllers
This commit is contained in:
parent
efaf634867
commit
08e43ceb44
15
app/Enums/RoleEnum.php
Normal file
15
app/Enums/RoleEnum.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum RoleEnum: int
|
||||
{
|
||||
case ADMIN = 1;
|
||||
case DISPATCHER = 2;
|
||||
case CLIENT = 3;
|
||||
|
||||
public static function getRange()
|
||||
{
|
||||
return [RoleEnum::ADMIN, RoleEnum::DISPATCHER, RoleEnum::CLIENT];
|
||||
}
|
||||
}
|
15
app/Enums/StatusEnum.php
Normal file
15
app/Enums/StatusEnum.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum StatusEnum: int
|
||||
{
|
||||
case CREATED = 1;
|
||||
case SENT = 2;
|
||||
case DELIVERED = 3;
|
||||
|
||||
public static function getRange()
|
||||
{
|
||||
return [StatusEnum::CREATED, StatusEnum::SENT, StatusEnum::DELIVERED];
|
||||
}
|
||||
}
|
85
app/Http/Controllers/CarController.php
Normal file
85
app/Http/Controllers/CarController.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\CarPostRequest;
|
||||
use App\Models\Car;
|
||||
use App\Repositories\Interfaces\CarRepositoryInterface;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class CarController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private CarRepositoryInterface $carRepository
|
||||
){
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(): View
|
||||
{
|
||||
return view('cars.index', [
|
||||
'cars' => $this->carRepository->getAllCars(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create(): View
|
||||
{
|
||||
return view('cars.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(CarPostRequest $request): RedirectResponse
|
||||
{
|
||||
$this->carRepository->createCar($request->validated());
|
||||
|
||||
return redirect()->route('cars.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(Car $car): View
|
||||
{
|
||||
return view('cars.show', [
|
||||
'car' => $car,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(Car $car): View
|
||||
{
|
||||
return view('cars.edit', [
|
||||
'car' => $car,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(CarPostRequest $request, Car $car): RedirectResponse
|
||||
{
|
||||
$this->carRepository->updateCar($car, $request->validated());
|
||||
|
||||
return redirect()->route('cars.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(Car $car): RedirectResponse
|
||||
{
|
||||
$this->carRepository->deleteCar($car);
|
||||
|
||||
return redirect()->route('cars.index');
|
||||
}
|
||||
}
|
86
app/Http/Controllers/DeliveryController.php
Normal file
86
app/Http/Controllers/DeliveryController.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\DeliveryPostRequest;
|
||||
use App\Models\Delivery;
|
||||
use App\Repositories\Interfaces\DeliveryRepositoryInterface;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class DeliveryController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private DeliveryRepositoryInterface $deliveryRepository
|
||||
){
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(): View
|
||||
{
|
||||
return view('deliveries.index', [
|
||||
'deliveries' => $this->deliveryRepository->getAllDeliveries(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create(): View
|
||||
{
|
||||
return view('deliveries.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(DeliveryPostRequest $request): RedirectResponse
|
||||
{
|
||||
$this->deliveryRepository->createDelivery($request->validated());
|
||||
|
||||
return redirect()->route('deliveries.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(Delivery $delivery): View
|
||||
{
|
||||
return view('deliveries.show', [
|
||||
'delivery' => $delivery,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(Delivery $delivery): View
|
||||
{
|
||||
return view('deliveries.edit', [
|
||||
'delivery' => $delivery,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(DeliveryPostRequest $request, Delivery $delivery): RedirectResponse
|
||||
{
|
||||
$this->deliveryRepository->updateDelivery($delivery, $request->validated());
|
||||
|
||||
return redirect()->route('deliveries.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(Delivery $delivery): RedirectResponse
|
||||
{
|
||||
$this->deliveryRepository->deleteDelivery($delivery);
|
||||
|
||||
return redirect()->route('deliveries.index');
|
||||
}
|
||||
}
|
85
app/Http/Controllers/UserController.php
Normal file
85
app/Http/Controllers/UserController.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\UserPostRequest;
|
||||
use App\Models\User;
|
||||
use App\Repositories\Interfaces\UserRepositoryInterface;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private UserRepositoryInterface $userRepository
|
||||
){
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(): View
|
||||
{
|
||||
return view('users.index', [
|
||||
'users' => $this->userRepository->getAllUsers()
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create(): View
|
||||
{
|
||||
return view('users.create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(UserPostRequest $request): RedirectResponse
|
||||
{
|
||||
$this->userRepository->createUser($request->validated());
|
||||
|
||||
return redirect()->route('users.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(User $user): View
|
||||
{
|
||||
return view('users.show', [
|
||||
'user' => $user,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(User $user): View
|
||||
{
|
||||
return view('users.edit', [
|
||||
'user' => $user,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(UserPostRequest $request, User $user): RedirectResponse
|
||||
{
|
||||
$this->userRepository->updateUser($user, $request->validated());
|
||||
|
||||
return redirect()->route('users.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(User $user): RedirectResponse
|
||||
{
|
||||
$this->userRepository->deleteUser($user);
|
||||
|
||||
return redirect()->route('users.index');
|
||||
}
|
||||
}
|
85
app/Http/Controllers/WarehouseController.php
Normal file
85
app/Http/Controllers/WarehouseController.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\WarehousePostRequest;
|
||||
use App\Models\Warehouse;
|
||||
use App\Repositories\Interfaces\WarehouseRepositoryInterface;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class WarehouseController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private WarehouseRepositoryInterface $warehouseRepository
|
||||
){
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(): View
|
||||
{
|
||||
return view('warehouses.index', [
|
||||
'warehouses' => $this->warehouseRepository->getAllWarehouses(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create(): View
|
||||
{
|
||||
return view('warehouses.view');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(WarehousePostRequest $request): RedirectResponse
|
||||
{
|
||||
$this->warehouseRepository->createWarehouse($request->validated());
|
||||
|
||||
return redirect()->route('warehouses.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(Warehouse $warehouse): View
|
||||
{
|
||||
return view('warehouses.show', [
|
||||
'warehouse' => $warehouse,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
*/
|
||||
public function edit(Warehouse $warehouse): View
|
||||
{
|
||||
return view('warehouse.edit', [
|
||||
'warehouse' => $warehouse,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(WarehousePostRequest $request, Warehouse $warehouse): RedirectResponse
|
||||
{
|
||||
$this->warehouseRepository->updateWarehouse($warehouse, $request->validated());
|
||||
|
||||
return redirect()->route('warehouses.index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(Warehouse $warehouse): RedirectResponse
|
||||
{
|
||||
$this->warehouseRepository->deleteWarehouse($warehouse);
|
||||
|
||||
return redirect()->route('warehouses.index');
|
||||
}
|
||||
}
|
22
app/Http/Requests/CarPostRequest.php
Normal file
22
app/Http/Requests/CarPostRequest.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class CarPostRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'name' => 'required|string|max:255',
|
||||
'number' => 'required|string|max:255',
|
||||
'driver_id' => 'required|exists:users,id',
|
||||
];
|
||||
}
|
||||
}
|
20
app/Http/Requests/DeliveryPostRequest.php
Normal file
20
app/Http/Requests/DeliveryPostRequest.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class DeliveryPostRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'delivery' => 'required|string|max:255',
|
||||
];
|
||||
}
|
||||
}
|
28
app/Http/Requests/UserPostRequest.php
Normal file
28
app/Http/Requests/UserPostRequest.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use App\Enums\RoleEnum;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class UserPostRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'name' => 'required|string|max:255',
|
||||
'surname' => 'required|string|max:255',
|
||||
'patronymic' => 'required|string|max:255',
|
||||
'email' => 'required|max:255|email|lowercase',
|
||||
'password' => 'required|max:255',
|
||||
'role' => ['required', Rule::in(RoleEnum::getRange())],
|
||||
'phone_number' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:10',
|
||||
];
|
||||
}
|
||||
}
|
21
app/Http/Requests/WarehousePostRequest.php
Normal file
21
app/Http/Requests/WarehousePostRequest.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class WarehousePostRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'address' => 'required|string|max:255',
|
||||
'phone_number' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:10',
|
||||
];
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class Car extends Model
|
||||
{
|
||||
@ -14,4 +15,9 @@ class Car extends Model
|
||||
'number',
|
||||
'driver_id',
|
||||
];
|
||||
|
||||
public function user(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,8 @@ namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
|
||||
class Delivery extends Model
|
||||
{
|
||||
@ -15,4 +17,14 @@ class Delivery extends Model
|
||||
'sending_date',
|
||||
'delivery_date',
|
||||
];
|
||||
|
||||
public function users(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(User::class);
|
||||
}
|
||||
|
||||
public function warehouse(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Warehouse::class);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,8 @@ namespace App\Models;
|
||||
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
@ -46,4 +48,14 @@ class User extends Authenticatable
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
|
||||
public function car(): HasOne
|
||||
{
|
||||
return $this->hasOne(Car::class);
|
||||
}
|
||||
|
||||
public function deliveries(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(Delivery::class);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
|
||||
class Warehouse extends Model
|
||||
{
|
||||
@ -13,4 +14,9 @@ class Warehouse extends Model
|
||||
'address',
|
||||
'phoneNumber',
|
||||
];
|
||||
|
||||
public function delivery(): HasMany
|
||||
{
|
||||
return $this->hasMany(Delivery::class);
|
||||
}
|
||||
}
|
||||
|
@ -14,8 +14,9 @@ return new class extends Migration
|
||||
Schema::create('deliveries', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedInteger('status');
|
||||
$table->date('sending_date');
|
||||
$table->date('delivery_date');
|
||||
$table->date('sending_date')->nullable();
|
||||
$table->date('delivery_date')->nullable();
|
||||
$table->foreignId('warehouse_id')->constrained('warehouses');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\UserController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
@ -16,3 +17,7 @@ use Illuminate\Support\Facades\Route;
|
||||
Route::get('/', function () {
|
||||
return view('welcome');
|
||||
});
|
||||
|
||||
Route::resources([
|
||||
'users' => UserController::class,
|
||||
]);
|
||||
|
Loading…
Reference in New Issue
Block a user