Initialer Laravel Commit für BetiX
This commit is contained in:
101
app/Http/Controllers/GuildController.php
Normal file
101
app/Http/Controllers/GuildController.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?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]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user