generated from liutk/owl-admin-base
添加竞猜接口
parent
7259eb5fc4
commit
e6bb448140
|
|
@ -30,7 +30,7 @@ class ActivityController extends ApiController
|
||||||
$activityId = $request->input('activity_id', 0);
|
$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([
|
$userMark = UserActivity::where([
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,14 @@ use Illuminate\Support\Arr;
|
||||||
use App\Models\Activity;
|
use App\Models\Activity;
|
||||||
use App\Models\ActivityGame;
|
use App\Models\ActivityGame;
|
||||||
use App\Http\Resources\Api\ActivityGameResource;
|
use App\Http\Resources\Api\ActivityGameResource;
|
||||||
|
use App\Http\Requests\JoinGameRequest;
|
||||||
|
use App\Services\Api\ActivityGameService;
|
||||||
|
|
||||||
class ActivityGameController extends ApiController
|
class ActivityGameController extends ApiController
|
||||||
{
|
{
|
||||||
|
|
||||||
|
protected string $serviceName = ActivityGameService::class;
|
||||||
|
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$activityId = $request->input('activity_id', 0);
|
$activityId = $request->input('activity_id', 0);
|
||||||
|
|
@ -51,4 +56,15 @@ class ActivityGameController extends ApiController
|
||||||
|
|
||||||
return $this->success();
|
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']);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -41,11 +41,11 @@ class UserController extends ApiController
|
||||||
// $phone = '17784326301';
|
// $phone = '17784326301';
|
||||||
$res = $this->service->bindPhone($user, $phone);
|
$res = $this->service->bindPhone($user, $phone);
|
||||||
|
|
||||||
if($res){
|
if($res['status']){
|
||||||
return $this->success(null, '绑定成功');
|
return $this->success(null, '绑定成功');
|
||||||
|
}else{
|
||||||
|
return $this->error($res['message']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->error('绑定失败,请稍后重试');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateUserInfo()
|
public function updateUserInfo()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||||
|
use Illuminate\Contracts\Validation\Validator;
|
||||||
|
use App\Enums\Score;
|
||||||
|
use Illuminate\Validation\Rules\Enum;
|
||||||
|
|
||||||
|
class JoinGameRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'score' => [
|
||||||
|
'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]]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -11,6 +11,8 @@ class UserActivity extends Model
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
|
'user_id', 'activity_id', 'join_times',
|
||||||
|
'right_times', 'last_join_at',
|
||||||
'mark','has_gift'
|
'mark','has_gift'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,10 @@ class UserGame extends Model
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
|
'user_id',
|
||||||
|
'activity_id',
|
||||||
|
'game_id',
|
||||||
|
'score',
|
||||||
'is_right'
|
'is_right'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ class ActivityGameService extends BaseService
|
||||||
)
|
)
|
||||||
->incrementEach([
|
->incrementEach([
|
||||||
'mark'=> $activityGame->mark,
|
'mark'=> $activityGame->mark,
|
||||||
'right_time'=> 1
|
'right_times'=> 1
|
||||||
]);
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
<?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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,10 +5,6 @@ namespace App\Services\Api;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
|
|
||||||
/**
|
|
||||||
* @method User getModel()
|
|
||||||
* @method User|\Illuminate\Database\Query\Builder query()
|
|
||||||
*/
|
|
||||||
class UserService
|
class UserService
|
||||||
{
|
{
|
||||||
public static function make(): static
|
public static function make(): static
|
||||||
|
|
@ -46,14 +42,24 @@ class UserService
|
||||||
|
|
||||||
public function bindPhone(User $user, $phone)
|
public function bindPhone(User $user, $phone)
|
||||||
{
|
{
|
||||||
|
$res = [
|
||||||
|
'status' => false,
|
||||||
|
'message'=> ''
|
||||||
|
];
|
||||||
|
|
||||||
if(User::where('phone', $phone)->where('id', '<>', $user->id)->exists()){
|
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,
|
'phone' => $phone,
|
||||||
'bind_phone_at' => now()
|
'bind_phone_at' => now()
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$res['status'] = true;
|
||||||
|
|
||||||
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -41,6 +41,7 @@ Route::group(['prefix' => 'miniprogram', 'namespace' => 'Api\Miniprogram'], func
|
||||||
// 已授权绑定手机号
|
// 已授权绑定手机号
|
||||||
Route::middleware([HasBindPhone::class])->group(function(){
|
Route::middleware([HasBindPhone::class])->group(function(){
|
||||||
//参与竞猜
|
//参与竞猜
|
||||||
|
Route::post('games/{game}/join', [App\Http\Controllers\Api\ActivityGameController::class, 'joinGame']);
|
||||||
//更新资料
|
//更新资料
|
||||||
//竞猜记录
|
//竞猜记录
|
||||||
//中奖记录
|
//中奖记录
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue