102 lines
3.3 KiB
PHP
102 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Guild;
|
|
use App\Models\GuildMember;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
|
|
class GuildController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$user = $request->user();
|
|
|
|
if (!$user) {
|
|
return Inertia::render('guilds/Index', [
|
|
'guild' => null,
|
|
'myRole' => null,
|
|
'canManage' => false,
|
|
'invite' => null,
|
|
'topPlayers' => [],
|
|
]);
|
|
}
|
|
|
|
$member = GuildMember::where('user_id', $user->id)->first();
|
|
|
|
if (!$member) {
|
|
return Inertia::render('guilds/Index', [
|
|
'guild' => null,
|
|
'myRole' => null,
|
|
'canManage' => false,
|
|
'invite' => null,
|
|
'topPlayers' => [],
|
|
]);
|
|
}
|
|
|
|
$guild = Guild::with(['owner:id,username,avatar_url', 'members:id,username,avatar_url'])
|
|
->findOrFail($member->guild_id);
|
|
|
|
$myRole = $member->role;
|
|
$canManage = in_array($myRole, ['owner', 'officer']);
|
|
|
|
// Build member list with pivot data
|
|
$memberRows = GuildMember::where('guild_id', $guild->id)
|
|
->with('user:id,username,avatar_url')
|
|
->get()
|
|
->map(fn ($m) => [
|
|
'id' => $m->user_id,
|
|
'username' => $m->user?->username,
|
|
'avatar_url'=> $m->user?->avatar_url,
|
|
'role' => $m->role,
|
|
'joined_at' => $m->joined_at?->toIso8601String(),
|
|
'wagered' => (float) ($m->wagered ?? 0),
|
|
]);
|
|
|
|
$guildData = [
|
|
'id' => $guild->id,
|
|
'name' => $guild->name,
|
|
'tag' => $guild->tag,
|
|
'logo_url' => $guild->logo_url,
|
|
'description' => $guild->description,
|
|
'points' => $guild->points,
|
|
'members_count'=> $guild->members_count,
|
|
'owner' => [
|
|
'id' => $guild->owner->id,
|
|
'username' => $guild->owner->username,
|
|
'avatar_url'=> $guild->owner->avatar_url,
|
|
],
|
|
'members' => $memberRows,
|
|
];
|
|
|
|
return Inertia::render('guilds/Index', [
|
|
'guild' => $guildData,
|
|
'myRole' => $myRole,
|
|
'canManage' => $canManage,
|
|
'invite' => $canManage ? $guild->invite_code : null,
|
|
'topPlayers' => [],
|
|
]);
|
|
}
|
|
|
|
public function top(Request $request)
|
|
{
|
|
$guilds = Guild::with('owner:id,username')
|
|
->orderByDesc('points')
|
|
->orderByDesc('members_count')
|
|
->limit(50)
|
|
->get()
|
|
->map(fn ($g) => [
|
|
'id' => $g->id,
|
|
'name' => $g->name,
|
|
'tag' => $g->tag,
|
|
'logo_url' => $g->logo_url,
|
|
'points' => $g->points,
|
|
'members_count'=> $g->members_count,
|
|
'owner' => ['id' => $g->owner?->id, 'username' => $g->owner?->username],
|
|
]);
|
|
|
|
return Inertia::render('guilds/Top', ['guilds' => $guilds]);
|
|
}
|
|
}
|