generated from liutk/owl-admin-base
完善活动详情
parent
4a3ba818ec
commit
7259eb5fc4
|
|
@ -4,6 +4,7 @@ namespace App\Exceptions;
|
|||
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Throwable;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
|
||||
class Handler extends ExceptionHandler
|
||||
{
|
||||
|
|
@ -27,4 +28,12 @@ class Handler extends ExceptionHandler
|
|||
//
|
||||
});
|
||||
}
|
||||
public function render($request, Throwable $e){
|
||||
// // FirstOrFail 和 FindOrFail 异常处理
|
||||
if ($e instanceof ModelNotFoundException) {
|
||||
if ($request->ajax() || $request->wantsJson()) {
|
||||
return response()->json(['data'=>null,'code'=>404 , 'message' => '数据未找到,或已被删除' ], 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use App\Models\Activity;
|
||||
use App\Models\UserActivity;
|
||||
use App\Http\Resources\Api\ActivityResource;
|
||||
use App\Http\Resources\Api\UserActivityResource;
|
||||
|
||||
class ActivityController extends ApiController
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$activities = Activity::show()->sort()
|
||||
->simplePaginate($request->query('per_page', 20));
|
||||
|
||||
return $this->success(['activities' => ActivityResource::collection($activities)->resolve()]);
|
||||
}
|
||||
|
||||
public function show(Activity $activity)
|
||||
{
|
||||
return ActivityResource::make($activity);
|
||||
}
|
||||
|
||||
public function rankList(Request $request)
|
||||
{
|
||||
$activityId = $request->input('activity_id', 0);
|
||||
|
||||
//获取排行表
|
||||
$list = UserActivity::with('user')->where('activity_id', $activityId)->sort()->limit(30)->get();
|
||||
|
||||
//获取当前排名;
|
||||
$userMark = UserActivity::where([
|
||||
'user_id' => $request->user()->id,
|
||||
'activity_id' => $activityId,
|
||||
])->value('mark');
|
||||
|
||||
$rankNumber = null;
|
||||
if($userMark){
|
||||
$rankNumber = UserActivity::where('activity_id', $activityId)->where('mark', '>', $userMark)->sort()->count();
|
||||
$rankNumber++;
|
||||
}
|
||||
|
||||
return $this->success(['rank_list' => UserActivityResource::collection($list)->resolve(), 'rank_number'=>$rankNumber]);
|
||||
}
|
||||
}
|
||||
|
|
@ -6,10 +6,24 @@ use Carbon\Carbon;
|
|||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use App\Models\Activity;
|
||||
use App\Models\ActivityGame;
|
||||
use App\Http\Resources\Api\ActivityGameResource;
|
||||
|
||||
class ActivityGameController extends ApiController
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$activityId = $request->input('activity_id', 0);
|
||||
|
||||
$games = ActivityGame::with(['logs'=> function($q){
|
||||
$q->where('user_id', auth('api')->user()?->id ?? 0);
|
||||
}])
|
||||
->where('activity_id', $activityId)->show()->sort()
|
||||
->simplePaginate($request->query('per_page', 20));
|
||||
|
||||
return $this->success(['games'=>ActivityGameResource::collection($games)->resolve()]);
|
||||
}
|
||||
|
||||
public function latestGame(Request $request)
|
||||
{
|
||||
//获取最新的活动;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@ class UserController extends ApiController
|
|||
|
||||
public function bindPhone(CodeRequest $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
if($user->phone){
|
||||
return $this->error('您已绑定手机号,请勿重复绑定');
|
||||
}
|
||||
|
||||
$code = $request->input('code');
|
||||
$app = EasyWeChat::miniApp();
|
||||
|
||||
|
|
@ -34,7 +39,7 @@ class UserController extends ApiController
|
|||
|
||||
$phone = Arr::get($response['phone_info'], 'phoneNumber');
|
||||
// $phone = '17784326301';
|
||||
$res = $this->service->bindPhone(auth('api')->user(), $phone);
|
||||
$res = $this->service->bindPhone($user, $phone);
|
||||
|
||||
if($res){
|
||||
return $this->success(null, '绑定成功');
|
||||
|
|
@ -42,4 +47,9 @@ class UserController extends ApiController
|
|||
|
||||
return $this->error('绑定失败,请稍后重试');
|
||||
}
|
||||
|
||||
public function updateUserInfo()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -25,6 +25,7 @@ class ActivityGameResource extends JsonResource
|
|||
'away_logo' => $this->away_logo ??'',
|
||||
'game_at' => $this->game_at->format('Y-m-d H:i'),
|
||||
'has_guess' => !$this->logs->isEmpty() ? ($this->logs[0]->score):false,
|
||||
'state' => $this->state,
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Resources\Api;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class ActivityResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'name' => $this->name,
|
||||
'cover' => $this->cover ??'',
|
||||
'rules' => $this->rules ??'',
|
||||
'start_at' => $this->start_at->format('Y-m-d H:i'),
|
||||
'end_at' => $this->end_at->format('Y-m-d H:i'),
|
||||
'state' => $this->state,
|
||||
];
|
||||
}
|
||||
|
||||
public function with($request)
|
||||
{
|
||||
return ['code' => Response::HTTP_OK, 'message' => ''];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Resources\Api;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class UserActivityResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'nick_name' => $this->user?->nick_name ?? '',
|
||||
'avatar' => $this->user?->avatar ?? '',
|
||||
|
||||
'join_times' => $this->join_times,
|
||||
'right_times' => $this->right_times,
|
||||
'mark' => $this->mark,
|
||||
];
|
||||
}
|
||||
|
||||
public function with($request)
|
||||
{
|
||||
return ['code' => Response::HTTP_OK, 'message' => ''];
|
||||
}
|
||||
}
|
||||
|
|
@ -10,6 +10,11 @@ class Activity extends Model
|
|||
{
|
||||
use HasFactory,Filterable;
|
||||
|
||||
protected $casts = [
|
||||
'start_at' => 'datetime',
|
||||
'end_at' => 'datetime'
|
||||
];
|
||||
|
||||
public function scopeShow($q){
|
||||
$q->where('state', '>' ,0)
|
||||
->where('start_at', '<', now());
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Models;
|
||||
|
||||
use DB;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
|
|
@ -16,7 +17,12 @@ class UserActivity extends Model
|
|||
public function scopeSort($q)
|
||||
{
|
||||
$q->orderBy('mark', 'desc')
|
||||
->orderBy('right_time', 'desc')
|
||||
->orderBy('right_times', 'desc')
|
||||
->orderBy('last_join_at', 'asc');
|
||||
}
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'user_id');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ return new class extends Migration
|
|||
$table->unsignedBigInteger('user_id');
|
||||
$table->unsignedBigInteger('activity_id');
|
||||
$table->unsignedInteger('mark')->default(0)->comment('分数');
|
||||
$table->unsignedInteger('join_time')->default(0)->comment('竞猜次数');
|
||||
$table->unsignedInteger('right_time')->default(0)->comment('猜对次数');
|
||||
$table->unsignedInteger('join_times')->default(0)->comment('竞猜次数');
|
||||
$table->unsignedInteger('right_times')->default(0)->comment('猜对次数');
|
||||
$table->timestamp('last_join_at')->comment('最后一次竞猜时间');
|
||||
$table->unsignedTinyInteger('has_gift')->default(0)->comment('是否获奖');
|
||||
$table->timestamps();
|
||||
|
|
|
|||
|
|
@ -29,13 +29,23 @@ Route::group(['prefix' => 'miniprogram', 'namespace' => 'Api\Miniprogram'], func
|
|||
Route::get('categories', [App\Http\Controllers\Api\ArticleController::class, 'category']);
|
||||
Route::get('articles', [App\Http\Controllers\Api\ArticleController::class, 'index']);
|
||||
Route::get('articles/{article}', [App\Http\Controllers\Api\ArticleController::class, 'show']);
|
||||
// 活动接口
|
||||
Route::get('activities', [App\Http\Controllers\Api\ActivityController::class, 'index']);
|
||||
Route::get('activities/rank-list', [App\Http\Controllers\Api\ActivityController::class, 'rankList']);
|
||||
Route::get('activities/{activity}', [App\Http\Controllers\Api\ActivityController::class, 'show']);
|
||||
Route::get('games', [App\Http\Controllers\Api\ActivityGameController::class, 'index']);
|
||||
|
||||
// 绑定接口
|
||||
Route::put('users/bind-phone', [App\Http\Controllers\Api\UserController::class, 'bindPhone']);
|
||||
|
||||
// 已授权绑定手机号
|
||||
Route::middleware([HasBindPhone::class])->group(function(){
|
||||
|
||||
//参与竞猜
|
||||
//更新资料
|
||||
//竞猜记录
|
||||
//中奖记录
|
||||
//领奖
|
||||
//中奖记录详情;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue