guessing-miniprogram/app/Services/Api/ActivityGameService.php

84 lines
2.4 KiB
PHP

<?php
namespace App\Services\Api;
use DB;
use App\Models\User;
use App\Models\ActivityGame;
use App\Models\UserActivity;
use App\Models\UserGame;
use Illuminate\Http\Response;
class ActivityGameService
{
public static function make(): static
{
return new static;
}
public function join(ActivityGame $game, User $user, $score)
{
$res = [
'status' => false,
'message'=> '',
];
//判断是否参加对应竞猜场次;
if(UserGame::where([
'user_id' => $user->id,
'game_id' => $game->id,
])->exists()){
$res['message'] = '您已参与竞猜,请勿重复提交';
return $res;
}
//判断该场竞猜是否还能参加
if($game->state != 1 || $game->game_at <= now()){
$res['message'] = '该场竞猜已结束,请选择其他场次参与';
return $res;
}
//判断活动是否还能参加
if($game->activity->start_at > now() || $game->activity->end_at < now()){
$res['message'] = '活动已结束,请选择其他活动参与';
return $res;
}
try{
DB::beginTransaction();
//添加活动参与记录;
$userActivity = UserActivity::where([
'user_id' => $user->id,
'activity_id' => $game->activity_id,
])->first();
if(!$userActivity){
$userActivity = new UserActivity();
$userActivity->user_id = $user->id;
$userActivity->activity_id = $game->activity_id;
$userActivity->last_join_at = now();
$userActivity->save();
}
//添加场次竞猜记录;
UserGame::create([
'user_id' => $user->id,
'activity_id' =>$game->activity_id,
'game_id'=>$game->id,
'score'=>$score,
]);
//更新活动参与记录;
$userActivity->update([
'last_join_at' => now()
]);
$userActivity->increment('join_times');
DB::commit();
}
catch(Throwable $th){
DB::rollBack();
report($th);
$res['message'] = '系统错误,请刷新后重试';
return $res;
}
$res['status'] = true;
return $res;
}
}