generated from liutk/owl-admin-base
83 lines
2.4 KiB
PHP
83 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->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;
|
|
}
|
|
} |