Files
BetiX/app/Http/Controllers/GuildController.php
Dolo 0280278978
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
Initialer Laravel Commit für BetiX
2026-04-04 18:01:50 +02:00

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]);
}
}