You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
6.4 KiB
191 lines
6.4 KiB
2 years ago
|
<?php
|
||
|
|
||
|
namespace App\Http\Controllers\Api\V1\Vendor;
|
||
|
|
||
|
use App\Http\Controllers\Controller;
|
||
|
use App\Models\AddOn;
|
||
|
use Illuminate\Http\Request;
|
||
|
use App\CentralLogics\Helpers;
|
||
|
use Illuminate\Support\Facades\Validator;
|
||
|
use App\Scopes\RestaurantScope;
|
||
|
use App\Models\Translation;
|
||
|
|
||
|
class AddOnController extends Controller
|
||
|
{
|
||
|
public function list(Request $request)
|
||
|
{
|
||
|
$vendor = $request['vendor'];
|
||
|
$addons = AddOn::withoutGlobalScope(RestaurantScope::class)->withoutGlobalScope('translate')->with('translations')->where('restaurant_id', $vendor->restaurants[0]->id)->latest()->get();
|
||
|
|
||
|
return response()->json(Helpers::addon_data_formatting($addons, true, true, app()->getLocale()),200);
|
||
|
}
|
||
|
|
||
|
public function store(Request $request)
|
||
|
{
|
||
|
if(!$request->vendor->restaurants[0]->food_section)
|
||
|
{
|
||
|
return response()->json([
|
||
|
'errors'=>[
|
||
|
['code'=>'unauthorized', 'message'=>translate('messages.permission_denied')]
|
||
|
]
|
||
|
],403);
|
||
|
}
|
||
|
$validator = Validator::make($request->all(), [
|
||
|
'name' => 'required',
|
||
|
'price' => 'required|numeric',
|
||
|
'translations' => 'array'
|
||
|
]);
|
||
|
|
||
|
$data = $request->translations;
|
||
|
|
||
|
if (count($data) < 1) {
|
||
|
$validator->getMessageBag()->add('translations', translate('messages.Name and description in english is required'));
|
||
|
}
|
||
|
|
||
|
if ($validator->fails() || count($data) < 1 ) {
|
||
|
return response()->json(['errors' => Helpers::error_processor($validator)], 403);
|
||
|
}
|
||
|
|
||
|
$vendor = $request['vendor'];
|
||
|
|
||
|
|
||
|
$addon = new AddOn();
|
||
|
$addon->name = $data[0]['value'];
|
||
|
$addon->price = $request->price;
|
||
|
$addon->restaurant_id = $vendor->restaurants[0]->id;
|
||
|
$addon->save();
|
||
|
|
||
|
foreach ($data as $key=>$item) {
|
||
|
Translation::updateOrInsert(
|
||
|
['translationable_type' => 'App\Models\AddOn',
|
||
|
'translationable_id' => $addon->id,
|
||
|
'locale' => $item['locale'],
|
||
|
'key' => $item['key']],
|
||
|
['value' => $item['value']]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return response()->json(['message' => translate('messages.addon_added_successfully')], 200);
|
||
|
}
|
||
|
|
||
|
|
||
|
public function update(Request $request)
|
||
|
{
|
||
|
if(!$request->vendor->restaurants[0]->food_section)
|
||
|
{
|
||
|
return response()->json([
|
||
|
'errors'=>[
|
||
|
['code'=>'unauthorized', 'message'=>translate('messages.permission_denied')]
|
||
|
]
|
||
|
],403);
|
||
|
}
|
||
|
$validator = Validator::make($request->all(), [
|
||
|
'id' => 'required',
|
||
|
'name' => 'required',
|
||
|
'price' => 'required',
|
||
|
'translations' => 'array'
|
||
|
]);
|
||
|
|
||
|
$data = $request->translations;
|
||
|
|
||
|
if (count($data) < 1) {
|
||
|
$validator->getMessageBag()->add('translations', translate('messages.Name and description in english is required'));
|
||
|
}
|
||
|
|
||
|
if ($validator->fails() || count($data) < 1 ) {
|
||
|
return response()->json(['errors' => Helpers::error_processor($validator)], 403);
|
||
|
}
|
||
|
|
||
|
$addon = AddOn::withoutGlobalScope(RestaurantScope::class)->find($request->id);
|
||
|
$addon->name = $data[0]['value'];;
|
||
|
$addon->price = $request->price;
|
||
|
$addon->save();
|
||
|
|
||
|
foreach ($data as $key=>$item) {
|
||
|
Translation::updateOrInsert(
|
||
|
['translationable_type' => 'App\Models\AddOn',
|
||
|
'translationable_id' => $addon->id,
|
||
|
'locale' => $item['locale'],
|
||
|
'key' => $item['key']],
|
||
|
['value' => $item['value']]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return response()->json(['message' => translate('messages.addon_updated_successfully')], 200);
|
||
|
}
|
||
|
|
||
|
public function delete(Request $request)
|
||
|
{
|
||
|
if(!$request->vendor->restaurants[0]->food_section)
|
||
|
{
|
||
|
return response()->json([
|
||
|
'errors'=>[
|
||
|
['code'=>'unauthorized', 'message'=>translate('messages.permission_denied')]
|
||
|
]
|
||
|
],403);
|
||
|
}
|
||
|
$validator = Validator::make($request->all(), [
|
||
|
'id' => 'required',
|
||
|
]);
|
||
|
|
||
|
if ($validator->fails()) {
|
||
|
return response()->json(['errors' => Helpers::error_processor($validator)], 403);
|
||
|
}
|
||
|
$addon = AddOn::withoutGlobalScope(RestaurantScope::class)->withoutGlobalScope('translate')->findOrFail($request->id);
|
||
|
$addon->translations()->delete();
|
||
|
$addon->delete();
|
||
|
|
||
|
return response()->json(['message' => translate('messages.addon_deleted_successfully')], 200);
|
||
|
}
|
||
|
|
||
|
public function status(Request $request)
|
||
|
{
|
||
|
if(!$request->vendor->restaurants[0]->food_section)
|
||
|
{
|
||
|
return response()->json([
|
||
|
'errors'=>[
|
||
|
['code'=>'unauthorized', 'message'=>translate('messages.permission_denied')]
|
||
|
]
|
||
|
],403);
|
||
|
}
|
||
|
$validator = Validator::make($request->all(), [
|
||
|
'id' => 'required',
|
||
|
'status' => 'required|boolean',
|
||
|
]);
|
||
|
|
||
|
if ($validator->fails()) {
|
||
|
return response()->json(['errors' => Helpers::error_processor($validator)], 403);
|
||
|
}
|
||
|
|
||
|
$addon_data = AddOn::withoutGlobalScope(RestaurantScope::class)->findOrFail($request->id);
|
||
|
$addon_data->status = $request->status;
|
||
|
$addon_data->save();
|
||
|
|
||
|
return response()->json(['message' => translate('messages.addon_status_updated')], 200);
|
||
|
}
|
||
|
|
||
|
public function search(Request $request){
|
||
|
|
||
|
$vendor = $request['vendor'];
|
||
|
$limit = $request['limite']??25;
|
||
|
$offset = $request['offset']??1;
|
||
|
|
||
|
$key = explode(' ', $request['search']);
|
||
|
$addons=AddOn::withoutGlobalScope(RestaurantScope::class)->whereHas('restaurant',function($query)use($vendor){
|
||
|
return $query->where('vendor_id', $vendor['id']);
|
||
|
})->where(function ($q) use ($key) {
|
||
|
foreach ($key as $value) {
|
||
|
$q->orWhere('name', 'like', "%{$value}%");
|
||
|
}
|
||
|
})->orderBy('name')->paginate($limit, ['*'], 'page', $offset);
|
||
|
$data = [
|
||
|
'total_size' => $addons->total(),
|
||
|
'limit' => $limit,
|
||
|
'offset' => $offset,
|
||
|
'addons' => $addons->items()
|
||
|
];
|
||
|
|
||
|
return response()->json([$data],200);
|
||
|
}
|
||
|
}
|