File "AddressBookApiController.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Controllers/Api/V1/Admin/AddressBookApiController.php
File size: 4.27 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Controllers\Api\V1\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreAddressBookRequest;
use App\Http\Requests\Admin\UpdateAddressBookRequest;
use App\Http\Resources\Admin\AddressBookResource;
use App\Http\Resources\Admin\AddressBookSpecificResource;
use App\Http\Resources\Admin\AddressBookUserResource;
use App\Models\AddressBook;
use Gate;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class AddressBookApiController extends Controller
{
public function index(Request $request)
{
$search = addslashes($request->get('search'));
$userId = (int)$request->get('user_id');
abort_if(Gate::denies('address_book_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$address_books = AddressBook::selectRaw("address_books.*, users.id as userId, users.name as user_name, state_sales_taxes.name as state_name")
->leftJoin("users", "address_books.user_id", "users.id")
->leftJoin("state_sales_taxes", "address_books.state_id", "state_sales_taxes.id")
->when($request->filled('search'), function ($query) use ($search) {
$query->whereRaw("(users.name like '%".$search."%' OR address_books.company_name like '%".$search."%' OR address_books.address_line_1 like '%".$search."%' OR address_books.address_line_2 like '%".$search."%' OR state_sales_taxes.name like '%".$search."%' OR address_books.city like '%".$search."%')");
})->orderBy('created_at', 'DESC');
$address_books = $userId > 0 ? $address_books->where('user_id', $userId)->get() : $address_books->paginate(50);
AddressBookResource::withoutWrapping();
return AddressBookResource::collection($address_books);
}
public function get_user_address(Request $request, $user_id)
{
abort_if(Gate::denies('address_book_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$request->validate([
'user_id' => 'required,exists:users,id'
]);
$address_books = AddressBook::where('user_id', $user_id)
->with(['user'])->orderBy('created_at', 'DESC')->get();
AddressBookResource::withoutWrapping();
return AddressBookResource::collection($address_books);
}
public function my_addresses()
{
AddressBookUserResource::withoutWrapping();
return AddressBookUserResource::collection(auth()->user()->userAddressBooks);
}
public function store(StoreAddressBookRequest $request)
{
if (auth()->user()->user_type != 1) $request->merge(['user_id' => auth()->id()]);
$addressBook = AddressBook::create($request->all());
return (new AddressBookResource($addressBook))
->response()
->setStatusCode(Response::HTTP_CREATED);
}
public function show(AddressBook $addressBook)
{
abort_if(Gate::denies('update-record', $addressBook) &&
Gate::denies('address_book_show'),
Response::HTTP_FORBIDDEN, '403 Forbidden');
return new AddressBookSpecificResource($addressBook->load(['user']));
}
public function update(UpdateAddressBookRequest $request, AddressBook $addressBook)
{
if (auth()->user()->user_type != 1) $request->merge(['user_id' => auth()->id()]);
$addressBook->update($request->all());
return (new AddressBookResource($addressBook))
->response()
->setStatusCode(Response::HTTP_CREATED);
}
public function destroy(AddressBook $addressBook)
{
abort_if(Gate::denies('update-record', $addressBook) &&
Gate::denies('address_book_delete'),
Response::HTTP_FORBIDDEN, '403 Forbidden');
try {
$addressBook->delete();
return response()
->json(['message' => 'Address book deleted successfully'], Response::HTTP_OK);
}catch (\Exception $e){
\Log::channel('db_errors')->info('Record Deletion Error : Address Book -> '.$addressBook->id);
\Log::channel('db_errors')->info($e->getMessage());
return response()
->json([
'message' => "Record not deleted.",
'errors' => ["error" => ["Unable to delete address book."]]
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
}