File: //home/armgroup/libs/app/Http/Controllers/Account/AddressController.php
<?php
namespace App\Http\Controllers\Account;
use App\Http\Controllers\Controller;
use App\Http\Requests\Account\AddressRequest;
use App\Models\Address;
use App\Models\Province;
use App\Models\User;
use Artesaos\SEOTools\Facades\SEOTools;
use Illuminate\Support\Facades\DB;
class AddressController extends Controller
{
public function index()
{
SEOTools::setTitle('پنل کاربری');
$addresses = auth()->user()->addresses->load('city');
return view('account.address.index', compact('addresses'));
}
public function create()
{
SEOTools::setTitle('پنل کاربری');
$provinces = Province::select('id', 'name')->get();
return view('account.address.create', compact('provinces'));
}
public function store(AddressRequest $request)
{
$address = auth()->user()->addresses()->create($request->validated());
session(['address_id' => $address->id]);
$this->doneMessage('Saved Successfully');
if ($request->has('_back')) {
return redirect()->route('addresses.index');
}
return redirect()->route('account.addresses.index');
}
public function edit(Address $address)
{
abort_unless(optional($address->users()->first())->id == auth()->id(), 403);
SEOTools::setTitle('پنل کاربری');
$address->load('city');
$provinces = Province::select('id', 'name')->get();
return view('account.address.edit', compact('provinces', 'address'));
}
public function update(AddressRequest $request, Address $address)
{
abort_unless(optional($address->users()->first())->id == auth()->id(), 403);
$address->name = $request->name;
$address->mobile = $request->mobile;
$address->city_id = $request->city_id;
$address->postal_code = $request->postal_code;
$address->national_code = $request->national_code;
$address->plaque = $request->plaque;
$address->floor = $request->floor;
$address->address = $request->address;
$address->lat = $request->lat;
$address->lng = $request->lng;
if ($address->isDirty()) {
DB::transaction(function () use ($address, $request) {
$check = DB::table('addressables')->where('address_id', $address->id)->count();
if ($check > 1) {
DB::table('addressables')
->where('address_id', $address->id)
->where('addressable_id', auth()->id())
->where('addressable_type', User::class)->delete();
auth()->user()->addresses()->create($request->validated());
} else {
$address->update();
}
});
}
$this->doneMessage('Saved Successfully');
if ($request->has('_back')) {
return redirect()->route('addresses.index');
}
return redirect()->route('account.addresses.index');
}
public function destroy(Address $address)
{
abort_unless(optional($address->users()->first())->id == auth()->id(), 403);
$check = DB::table('addressables')->where('address_id', $address->id)->count();
if ($check == 1) {
$address->delete();
}
DB::table('addressables')
->where('address_id', $address->id)
->where('addressable_id', auth()->id())
->where('addressable_type', User::class)->delete();
$this->doneMessage();
return redirect()->route('account.addresses.index');
}
}