处理首页今日竞猜接口

main
liutk 2024-05-18 22:34:45 +08:00
parent 1d6a2ab0b3
commit c83110984a
6 changed files with 97 additions and 0 deletions

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Api;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use App\Models\Activity;
use App\Http\Resources\Api\ActivityGameResource;
class ActivityGameController extends ApiController
{
public function latestGame(Request $request)
{
//获取最新的活动;
$activity = Activity::show()->sort()->first();
$game = $activity?->games()->show()
->whereDate('game_at', now())
->where('game_at', '>', now())
->where('state', 1)
->orderBy('game_at', 'asc')->first();
//若已经没有最新的活动了, 则拿取当天最后一个
if(!$game){
$activity?->games()->show()
->whereDate('game_at', now())
->orderBy('game_at', 'desc')->first();
}
if($game){
$game->load(['logs'=> function($q){
$q->where('user_id', auth('api')->user()?->id ?? 0);
}]);
return ActivityGameResource::make($game);
}
return $this->success(null);
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace App\Http\Resources\Api;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Response;
class ActivityGameResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'activity_id' => $this->activity_id,
'name' => $this->name,
'home_field' => $this->home_field ??'',
'home_logo' => $this->home_logo ??'',
'away' => $this->away ??'',
'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,
];
}
public function with($request)
{
return ['code' => Response::HTTP_OK, 'message' => ''];
}
}

View File

@ -3,6 +3,7 @@
namespace App\Http\Resources\Api; namespace App\Http\Resources\Api;
use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Response;
class UserResource extends JsonResource class UserResource extends JsonResource
{ {

View File

@ -10,6 +10,11 @@ class Activity extends Model
{ {
use HasFactory,Filterable; use HasFactory,Filterable;
public function scopeShow($q){
$q->where('state', '>' ,0)
->where('start_at', '<', now());
}
public function scopeSort($q) public function scopeSort($q)
{ {
$q->orderBy('state', 'asc') $q->orderBy('state', 'asc')
@ -17,6 +22,11 @@ class Activity extends Model
->orderBy('created_at', 'desc'); ->orderBy('created_at', 'desc');
} }
public function games()
{
return $this->hasMany(ActivityGame::class, 'activity_id');
}
public function gifts() public function gifts()
{ {
return $this->hasMany(ActivityGift::class, 'activity_id'); return $this->hasMany(ActivityGift::class, 'activity_id');

View File

@ -10,10 +10,19 @@ class ActivityGame extends Model
{ {
use HasFactory,Filterable; use HasFactory,Filterable;
protected $casts = [
'game_at' => 'datetime'
];
protected $fillable = [ protected $fillable = [
'state', 'score', 'state', 'score',
]; ];
public function scopeShow($q)
{
$q->where('state', '>' ,0);
}
public function scopeSort($q) public function scopeSort($q)
{ {
$q->orderBy('game_at', 'desc'); $q->orderBy('game_at', 'desc');

View File

@ -21,6 +21,8 @@ Route::group(['prefix' => 'miniprogram', 'namespace' => 'Api\Miniprogram'], func
Route::middleware('auth:sanctum')->group(function(){ Route::middleware('auth:sanctum')->group(function(){
// 令牌刷新 // 令牌刷新
Route::post('refresh-token', [App\Http\Controllers\Api\AuthController::class, 'refreshToken']); Route::post('refresh-token', [App\Http\Controllers\Api\AuthController::class, 'refreshToken']);
// 首页接口
Route::get('latest-game', [App\Http\Controllers\Api\ActivityGameController::class, 'latestGame']);
// 已授权绑定手机号 // 已授权绑定手机号
Route::middleware([HasBindPhone::class])->group(function(){ Route::middleware([HasBindPhone::class])->group(function(){