添加竞猜接口

main
liutk 2024-05-19 18:06:59 +08:00
parent 7259eb5fc4
commit e6bb448140
10 changed files with 172 additions and 11 deletions

View File

@ -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([

View File

@ -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']);
}
}
}

View File

@ -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()

View File

@ -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]]));
}
}

View File

@ -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'
];

View File

@ -10,6 +10,10 @@ class UserGame extends Model
use HasFactory;
protected $fillable = [
'user_id',
'activity_id',
'game_id',
'score',
'is_right'
];
}

View File

@ -91,7 +91,7 @@ class ActivityGameService extends BaseService
)
->incrementEach([
'mark'=> $activityGame->mark,
'right_time'=> 1
'right_times'=> 1
]);
DB::commit();

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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']);
//更新资料
//竞猜记录
//中奖记录