You've already forked Atomcms-edit
56 lines
1.6 KiB
PHP
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']);
|
|
}
|
|
}
|