88 lines
2.6 KiB
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]
|
|
);
|
|
}
|
|
}
|