diff --git a/app/Http/Controllers/Api/ActivityController.php b/app/Http/Controllers/Api/ActivityController.php index 753c41a..557e7ef 100644 --- a/app/Http/Controllers/Api/ActivityController.php +++ b/app/Http/Controllers/Api/ActivityController.php @@ -30,7 +30,7 @@ class ActivityController extends ApiController $activityId = $request->input('activity_id', 0); //获取排行表 - $list = UserActivity::with('user')->where('activity_id', $activityId)->sort()->limit(30)->get(); + $list = UserActivity::with('user')->where('activity_id', $activityId)->where('mark', '>', 0)->sort()->limit(30)->get(); //获取当前排名; $userMark = UserActivity::where([ diff --git a/app/Http/Controllers/Api/ActivityGameController.php b/app/Http/Controllers/Api/ActivityGameController.php index ca076d7..c73e6a9 100644 --- a/app/Http/Controllers/Api/ActivityGameController.php +++ b/app/Http/Controllers/Api/ActivityGameController.php @@ -8,9 +8,14 @@ use Illuminate\Support\Arr; use App\Models\Activity; use App\Models\ActivityGame; use App\Http\Resources\Api\ActivityGameResource; +use App\Http\Requests\JoinGameRequest; +use App\Services\Api\ActivityGameService; class ActivityGameController extends ApiController { + + protected string $serviceName = ActivityGameService::class; + public function index(Request $request) { $activityId = $request->input('activity_id', 0); @@ -51,4 +56,15 @@ class ActivityGameController extends ApiController return $this->success(); } + + public function joinGame(ActivityGame $activityGame, JoinGameRequest $request) + { + $res = $this->service->join($activityGame, $request->user(), $request->input('score')); + + if($res['status']){ + return $this->success(null, '参与成功'); + }else{ + return $this->error($res['message']); + } + } } \ No newline at end of file diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index 9660718..cb84a1c 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -41,11 +41,11 @@ class UserController extends ApiController // $phone = '17784326301'; $res = $this->service->bindPhone($user, $phone); - if($res){ + if($res['status']){ return $this->success(null, '绑定成功'); + }else{ + return $this->error($res['message']); } - - return $this->error('绑定失败,请稍后重试'); } public function updateUserInfo() diff --git a/app/Http/Requests/JoinGameRequest.php b/app/Http/Requests/JoinGameRequest.php new file mode 100644 index 0000000..e0ed78d --- /dev/null +++ b/app/Http/Requests/JoinGameRequest.php @@ -0,0 +1,49 @@ + [ + 'required', + new Enum(Score::class) + ] + ]; + } + + public function messages(){ + $message = [ + 'score.required' => '竞猜比分为必选', + ]; + return $message; + } + + protected function failedValidation(Validator $validator){ + $error = $validator->errors()->all(); + throw new HttpResponseException(response()->json(['data' => null, 'code' => 400, 'message' => $error[0]])); + } +} diff --git a/app/Models/UserActivity.php b/app/Models/UserActivity.php index 3794534..39d883f 100644 --- a/app/Models/UserActivity.php +++ b/app/Models/UserActivity.php @@ -11,6 +11,8 @@ class UserActivity extends Model use HasFactory; protected $fillable = [ + 'user_id', 'activity_id', 'join_times', + 'right_times', 'last_join_at', 'mark','has_gift' ]; diff --git a/app/Models/UserGame.php b/app/Models/UserGame.php index b5185bf..963b38b 100644 --- a/app/Models/UserGame.php +++ b/app/Models/UserGame.php @@ -10,6 +10,10 @@ class UserGame extends Model use HasFactory; protected $fillable = [ + 'user_id', + 'activity_id', + 'game_id', + 'score', 'is_right' ]; } diff --git a/app/Services/Admin/ActivityGameService.php b/app/Services/Admin/ActivityGameService.php index 6f11815..443cdff 100644 --- a/app/Services/Admin/ActivityGameService.php +++ b/app/Services/Admin/ActivityGameService.php @@ -91,7 +91,7 @@ class ActivityGameService extends BaseService ) ->incrementEach([ 'mark'=> $activityGame->mark, - 'right_time'=> 1 + 'right_times'=> 1 ]); DB::commit(); diff --git a/app/Services/Api/ActivityGameService.php b/app/Services/Api/ActivityGameService.php new file mode 100644 index 0000000..c6f39fe --- /dev/null +++ b/app/Services/Api/ActivityGameService.php @@ -0,0 +1,83 @@ + 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; + } +} \ No newline at end of file diff --git a/app/Services/Api/UserService.php b/app/Services/Api/UserService.php index c26834c..b347cd7 100644 --- a/app/Services/Api/UserService.php +++ b/app/Services/Api/UserService.php @@ -5,10 +5,6 @@ namespace App\Services\Api; use App\Models\User; use Illuminate\Http\Response; -/** - * @method User getModel() - * @method User|\Illuminate\Database\Query\Builder query() - */ class UserService { public static function make(): static @@ -46,14 +42,24 @@ class UserService public function bindPhone(User $user, $phone) { + $res = [ + 'status' => false, + 'message'=> '' + ]; + if(User::where('phone', $phone)->where('id', '<>', $user->id)->exists()){ - return response()->json(['data'=>[], 'code'=> Response::HTTP_BAD_REQUEST, 'message' => '该手机号已被其他微信号绑定,请更换手机号绑定']); + $res['message'] = '该手机号已被其他微信号绑定,请更换手机号绑定'; + return $res; } - return $user->update([ + $user->update([ 'phone' => $phone, 'bind_phone_at' => now() ]); + + $res['status'] = true; + + return $res; } } \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 7ccaad5..71817ad 100644 --- a/routes/api.php +++ b/routes/api.php @@ -41,6 +41,7 @@ Route::group(['prefix' => 'miniprogram', 'namespace' => 'Api\Miniprogram'], func // 已授权绑定手机号 Route::middleware([HasBindPhone::class])->group(function(){ //参与竞猜 + Route::post('games/{game}/join', [App\Http\Controllers\Api\ActivityGameController::class, 'joinGame']); //更新资料 //竞猜记录 //中奖记录