Files
wticreatorstudio/Modules/WTIALaCarte/Http/Controllers/ALaCarteManageController.php
T
2024-02-12 22:54:20 -05:00

129 lines
3.5 KiB
PHP

<?php
namespace Modules\WTIALaCarte\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\WTIALaCarte\Services\StripeService;
use Modules\WTIJobBoard\Services\JobRequestCategoriesService;
use Modules\WTIALaCarte\Entities\Alacarte;
class ALaCarteManageController extends Controller
{
private $stripe;
private $category;
public function __construct()
{
$this->stripe = new StripeService();
$this->category = new JobRequestCategoriesService();
}
public function manage()
{
new \Modules\WTIALaCarte\Services\AugmentationService();
return view('wtialacarte::manage');
}
public function all(Request $request)
{
$products = Alacarte::latest()->where('status',1)->get();
return response()->json([
'products' => $products
]);
}
public function store(Request $request){
try {
$data = $request->validate([
'name' => ['required'],
'description' => ['required'],
'price' => ['required'],
'credits' => ['required'],
'image' => ['required', 'image']
]);
$data['image'] = $request->file('image')->store('al-a-carte','public');
$stripeResponse = $this->stripe->createProduct($data);
$data['stripe_product_id'] = $stripeResponse['id'];
$data['stripe_price_id'] = $stripeResponse['default_price'];
Alacarte::create($data);
return response()->json([
'message' => 'Àl a carte successfully created'
]);
} catch (\Exception $e) {
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function update(Request $request, Alacarte $alacarte){
try {
$data = $request->validate([
'name' => ['required'],
'description' => ['required'],
'price' => ['required'],
'credits' => ['required'],
'image' => ['nullable', 'image']
]);
if ($request->image) {
if(\Storage::exists($alacarte->image)){
\Storage::delete($alacarte->image);
}
$data['image'] = $request->file('image')->store('al-a-carte','public');
}
$stripeResponse = $this->stripe->updateProduct($alacarte,$data);
if($alacarte->price != (float)$data['price']){
$this->stripe->archivePrice($alacarte->stripe_price_id);
$data['stripe_price_id'] = $stripeResponse['default_price'];
}
$alacarte->update($data);
return response()->json([
'message' => 'Àl a carte successfully created'
]);
} catch (\Exception $e) {
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
public function delete(Alacarte $alacarte)
{
try {
$this->stripe->archiveProduct($alacarte->stripe_product_id);
$alacarte->update(['status' => 0]);
return response()->json([
'message' => 'Àl a carte successfully deleted'
]);
} catch (\Exception $e) {
return response()->json([
'message' => $e->getMessage()
], 500);
}
}
}