53 lines
1.3 KiB
PHP
53 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Endpoint\Api\Http\Controllers;
|
|
|
|
use App\Endpoint\Api\Http\Resources\{VipResource, UserVipResource};
|
|
use App\Models\Vip;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Exceptions\BizException;
|
|
use App\Services\VipService;
|
|
|
|
class VipController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$list = Vip::where('status', 1)->get();
|
|
|
|
return VipResource::collection($list);
|
|
}
|
|
|
|
public function buy(Request $request)
|
|
{
|
|
$request->validate([
|
|
'vip_id' => 'required'
|
|
]);
|
|
$vip = Vip::findOrFail($request->input('vip_id'));
|
|
$service = new VipService();
|
|
try {
|
|
DB::beginTransaction();
|
|
$user_vip = $service->buy($request->user(), $vip);
|
|
|
|
$result = $service->pay($user_vip, $request->input('pay_way'));
|
|
DB::commit();
|
|
return $result;
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
report($e);
|
|
throw new BizException($e->getMessage());
|
|
}
|
|
}
|
|
|
|
public function list(Request $request)
|
|
{
|
|
$user = $request->user();
|
|
|
|
$query = $user->vips();
|
|
|
|
$list = $query->paginate($request->input('per_page'));
|
|
|
|
return UserVipResource::collection($list);
|
|
}
|
|
}
|