generated from liutk/owl-admin-base
94 lines
3.0 KiB
PHP
94 lines
3.0 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(100);
|
|
|
|
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()]);
|
|
}
|
|
} |