From c83110984ade4a1e30b4c9a2cdd87ea3d77886bf Mon Sep 17 00:00:00 2001 From: liutk <961510893@qq.com> Date: Sat, 18 May 2024 22:34:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E9=A6=96=E9=A1=B5=E4=BB=8A?= =?UTF-8?q?=E6=97=A5=E7=AB=9E=E7=8C=9C=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/ActivityGameController.php | 40 +++++++++++++++++++ .../Resources/Api/ActivityGameResource.php | 35 ++++++++++++++++ app/Http/Resources/Api/UserResource.php | 1 + app/Models/Activity.php | 10 +++++ app/Models/ActivityGame.php | 9 +++++ routes/api.php | 2 + 6 files changed, 97 insertions(+) create mode 100644 app/Http/Controllers/Api/ActivityGameController.php create mode 100644 app/Http/Resources/Api/ActivityGameResource.php diff --git a/app/Http/Controllers/Api/ActivityGameController.php b/app/Http/Controllers/Api/ActivityGameController.php new file mode 100644 index 0000000..90a20f0 --- /dev/null +++ b/app/Http/Controllers/Api/ActivityGameController.php @@ -0,0 +1,40 @@ +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); + } +} \ No newline at end of file diff --git a/app/Http/Resources/Api/ActivityGameResource.php b/app/Http/Resources/Api/ActivityGameResource.php new file mode 100644 index 0000000..9582fd9 --- /dev/null +++ b/app/Http/Resources/Api/ActivityGameResource.php @@ -0,0 +1,35 @@ + $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' => '']; + } +} \ No newline at end of file diff --git a/app/Http/Resources/Api/UserResource.php b/app/Http/Resources/Api/UserResource.php index 86faa47..7b40d5b 100644 --- a/app/Http/Resources/Api/UserResource.php +++ b/app/Http/Resources/Api/UserResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources\Api; use Illuminate\Http\Resources\Json\JsonResource; +use Illuminate\Http\Response; class UserResource extends JsonResource { diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 02597e7..ab62676 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -10,6 +10,11 @@ class Activity extends Model { use HasFactory,Filterable; + public function scopeShow($q){ + $q->where('state', '>' ,0) + ->where('start_at', '<', now()); + } + public function scopeSort($q) { $q->orderBy('state', 'asc') @@ -17,6 +22,11 @@ class Activity extends Model ->orderBy('created_at', 'desc'); } + public function games() + { + return $this->hasMany(ActivityGame::class, 'activity_id'); + } + public function gifts() { return $this->hasMany(ActivityGift::class, 'activity_id'); diff --git a/app/Models/ActivityGame.php b/app/Models/ActivityGame.php index b33b477..a3779c9 100644 --- a/app/Models/ActivityGame.php +++ b/app/Models/ActivityGame.php @@ -10,10 +10,19 @@ class ActivityGame extends Model { use HasFactory,Filterable; + protected $casts = [ + 'game_at' => 'datetime' + ]; + protected $fillable = [ 'state', 'score', ]; + public function scopeShow($q) + { + $q->where('state', '>' ,0); + } + public function scopeSort($q) { $q->orderBy('game_at', 'desc'); diff --git a/routes/api.php b/routes/api.php index c8e08b6..4e33cfc 100644 --- a/routes/api.php +++ b/routes/api.php @@ -21,6 +21,8 @@ Route::group(['prefix' => 'miniprogram', 'namespace' => 'Api\Miniprogram'], func Route::middleware('auth:sanctum')->group(function(){ // 令牌刷新 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(){