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

88 lines
2.6 KiB
PHP

<?php
namespace App\Endpoint\Api\Http\Controllers;
use App\Endpoint\Api\Http\Resources\ClickLogSimpleResource;
use App\Exceptions\BizException;
use App\Models\Click;
use App\Models\ClickLog;
use App\Services\PointsService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Throwable;
class ClickController extends Controller
{
/**
* 获取指定时间范围的签到情况
*
* @param Request $request
* @return void
*/
public function index(Request $request)
{
$input = $request->validate([
'start_at' => ['bail', 'required', 'date_format:Y-m-d'],
'end_at' => ['bail', 'required', 'date_format:Y-m-d'],
]);
return ClickLogSimpleResource::collection($request->user()->clickLogs()->whereBetween('created_at', [$input['start_at'], $input['end_at']])->get());
}
/**
* 签到动作
*
* @return void
*/
public function click(Request $request, PointsService $pointsService)
{
if (Click::isClick($request->user())) {
throw new BizException('今天已签到,请明天再来');
}
$points = 0;
try {
DB::beginTransaction();
$user = $request->user();
$click = $user->click()->firstOrCreate([], [
'continue_click_times' => 1,
'last_click_at' => now(),
]);
if (!$click->wasRecentlyCreated) {
$click->update([
'continue_click_times' => $click->last_click_at->isYesterday() ? DB::raw('continue_click_times + 1') : 1, //如果是更新则判断昨天是否签到
'last_click_at' => now(),
]);
}
$click->refresh();
ClickLog::create([
'user_id'=>$user->id,
]);
//发放当天签到积分
$points = 5;
$pointsService->sendPoints(1, $user, $points, '签到奖励');
//发放额外的奖励积分
// $continueClickDays = 7;//默认7天
// $continueClickPoints = 10;//默认10分
// if (($click->continue_click_times % $continueClickDays) == 0) {
// $pointsService->sendPoints(1, $user, $continueClickPoints, '连续签到奖励');
// }
DB::commit();
} catch (Throwable $th) {
DB::rollBack();
report($th);
throw new BizException('系统繁忙,请稍后再试');
}
return response()->json(
['points'=>$points]
);
}
}