guessing-miniprogram/app/Http/Controllers/Api/ActivityGameController.php

94 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use App\Models\Activity;
use App\Models\ActivityGame;
use App\Models\UserGame;
use App\Http\Resources\Api\ActivityGameResource;
use App\Http\Resources\Api\UserGameResource;
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);
$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)
{
$game = ActivityGame::whereHas('activity', function($q){
return $q->where('state', '>' ,0);
})->show()
// ->whereDate('game_at', now())
->where('game_at', '>', now())
->where('state', 1)
->orderBy('game_at', 'asc')->first();
//若已经没有最新的活动了, 则拿取当天最后一个
if(!$game){
$game = ActivityGame::whereHas('activity', function($q){
return $q->where('state', '>' ,0);
})->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();
}
public function joinGame(ActivityGame $game, JoinGameRequest $request)
{
$res = $this->service->join($game, $request->user(), $request->input('score'));
if($res['status']){
return $this->success(null, '竞猜成功');
}else{
return $this->error($res['message']);
}
}
public function latestUserGame(Request $request)
{
$list = UserGame::with('user', 'game', 'userActivity')->orderBy('created_at', 'desc')->limit(30)->get();
return $this->success(['list' => UserGameResource::collection($list)->resolve()]);
}
public function activityUserGame(Request $request)
{
$activityId = $request->input('activity_id', 0);
$userId = $request->input('user_id', auth('api')->user()?->id ?? 0);
$list = UserGame::with('user', 'game')->where([
'activity_id' => $activityId,
'user_id' => $userId,
])->orderBy('created_at', 'desc')
->simplePaginate($request->query('per_page', 20));
return $this->success(['list'=>UserGameResource::collection($list)->resolve()]);
}
}