6
0
Fork 0
jiqu-library-server/app/Endpoint/Api/Http/Controllers/UserCouponController.php

94 lines
2.6 KiB
PHP

<?php
namespace App\Endpoint\Api\Http\Controllers;
use App\Endpoint\Api\Http\Resources\UserCouponResource;
use App\Exceptions\BizException;
use App\Helpers\Paginator as PaginatorHelper;
use App\Models\User;
use App\Models\UserCoupon;
use Illuminate\Http\Request;
class UserCouponController extends Controller
{
/**
* 我的优惠券
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request)
{
$user = $request->user();
$query = $user->coupons();
$coupons = $query->filter($request->all())->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50));
return UserCouponResource::collection($coupons);
}
/**
* 查询所有用户的优惠券
*/
public function list(Request $request)
{
$user = $request->user();
// 员工身份
if (!$user->userInfo->is_company) {
throw new BizException("非员工身份");
}
$query = UserCoupon::query();
if ($request->input('user_phone')) {
$user = User::where('phone', $request->input('user_phone'))->first();
if (!$user) {
throw new BizException("手机号不存在");
}
$query->where('user_id', $user->id);
}
$coupons = $query->filter($request->all())->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50));
return UserCouponResource::collection($coupons);
}
/**
* 计算优惠券抵扣金额
*/
public function discount(Request $request)
{
$request->validate([
'id' => 'required'
], [
'id.required' => '优惠券id必填'
]);
$id = $request->input('id');
$coupon = UserCoupon::query()->onlyAvailable()->findOrFail($id);
$total = $request->input('total', 0) * 100;
$discount = $coupon->getDiscountAmount($total);
return response()->json(['discount' => bcdiv($discount, 100, 2)]);
}
/**
* 直接核销优惠券
*/
public function check(Request $request)
{
$user = $request->user();
// 员工身份
if (!$user->userInfo->is_company) {
throw new BizException("非员工身份");
}
$request->validate([
'id' => 'requreid'
], [
'id.required' => '优惠券id必填'
]);
$id = $request->input('id');
$coupon = UserCoupon::query()->onlyAvailable()->findOrFail($id);
$coupon->markAsUse();
return response()->json([]);
}
}