generated from liutk/owl-admin-base
添加竞猜接口
parent
7259eb5fc4
commit
e6bb448140
|
|
@ -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([
|
||||
|
|
|
|||
|
|
@ -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']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
protected $fillable = [
|
||||
'user_id', 'activity_id', 'join_times',
|
||||
'right_times', 'last_join_at',
|
||||
'mark','has_gift'
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,10 @@ class UserGame extends Model
|
|||
use HasFactory;
|
||||
|
||||
protected $fillable = [
|
||||
'user_id',
|
||||
'activity_id',
|
||||
'game_id',
|
||||
'score',
|
||||
'is_right'
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ class ActivityGameService extends BaseService
|
|||
)
|
||||
->incrementEach([
|
||||
'mark'=> $activityGame->mark,
|
||||
'right_time'=> 1
|
||||
'right_times'=> 1
|
||||
]);
|
||||
|
||||
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 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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']);
|
||||
//更新资料
|
||||
//竞猜记录
|
||||
//中奖记录
|
||||
|
|
|
|||
Loading…
Reference in New Issue