Files
Atomcms-edit/app/Http/Controllers/Api/ShopApiController.php
T

56 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Resources\Api\ShopPackageResource;
use App\Models\Shop\WebsiteShopArticle;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ShopApiController extends Controller
{
public function packages(): JsonResponse
{
$packages = WebsiteShopArticle::latest('id')->paginate(12);
return response()->json([
'data' => ShopPackageResource::collection($packages),
'meta' => [
'current_page' => $packages->currentPage(),
'last_page' => $packages->lastPage(),
'per_page' => $packages->perPage(),
'total' => $packages->total(),
],
]);
}
public function categories(): JsonResponse
{
return response()->json([
'data' => ['furniture', 'badges', 'ranks'],
]);
}
public function purchase(Request $request, int $packageId): JsonResponse
{
$package = WebsiteShopArticle::findOrFail($packageId);
$user = $request->user();
if ($package->give_rank && $user->rank >= $package->give_rank) {
return response()->json(['error' => 'You already have this or a higher rank'], 400);
}
if ($user->credits < $package->costs) {
return response()->json(['error' => 'Not enough credits'], 400);
}
$user->decrement('credits', $package->costs);
return response()->json(['success' => true, 'message' => 'Purchase successful']);
}
}