59 lines
1.9 KiB
PHP
59 lines
1.9 KiB
PHP
<?php
|
|||
|
|
|
||
|
|
namespace App\Http\Controllers\Api\V1;
|
||
|
|
|
||
|
|
use App\Http\Controllers\Controller;
|
||
|
|
use App\Models\User;
|
||
|
|
use Illuminate\Http\JsonResponse;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
|
||
|
|
class UserApiController extends Controller
|
||
|
|
{
|
||
|
|
public function show(User $user): JsonResponse
|
||
|
|
{
|
||
|
|
$library = $user->library();
|
||
|
|
|
||
|
|
return response()->json([
|
||
|
|
'data' => [
|
||
|
|
'username' => $user->slug,
|
||
|
|
'name' => $user->name,
|
||
|
|
'avatar_url' => $user->avatar,
|
||
|
|
'joined_at' => $user->created_at->toIso8601String(),
|
||
|
|
'stats' => [
|
||
|
|
'played' => (clone $library)->where('status', 'played')->count(),
|
||
|
|
'playing' => (clone $library)->where('status', 'playing')->count(),
|
||
|
|
'want_to_play' => (clone $library)->where('status', 'want_to_play')->count(),
|
||
|
|
'total' => $user->library()->count(),
|
||
|
|
],
|
||
|
|
],
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function library(User $user, Request $request): JsonResponse
|
||
|
|
{
|
||
|
|
$paginator = $user->library()
|
||
|
|
->with('game')
|
||
|
|
->orderByDesc('updated_at')
|
||
|
|
->paginate(20);
|
||
|
|
|
||
|
|
return response()->json([
|
||
|
|
'data' => $paginator->map(fn ($ug) => [
|
||
|
|
'game' => [
|
||
|
|
'title' => $ug->game->title,
|
||
|
|
'slug' => $ug->game->slug,
|
||
|
|
'cover_url' => $ug->game->cover_url,
|
||
|
|
],
|
||
|
|
'status' => $ug->status,
|
||
|
|
'rating' => $ug->rating,
|
||
|
|
'updated_at' => $ug->updated_at->toIso8601String(),
|
||
|
|
])->values(),
|
||
|
|
'meta' => [
|
||
|
|
'current_page' => $paginator->currentPage(),
|
||
|
|
'last_page' => $paginator->lastPage(),
|
||
|
|
'per_page' => $paginator->perPage(),
|
||
|
|
'total' => $paginator->total(),
|
||
|
|
],
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
}
|