$m->id, 'type' => $m->type ?? 'message', 'message' => $m->is_deleted ? null : $m->message, 'user_id' => $m->user_id, 'is_deleted' => $m->is_deleted, 'created_at' => $m->created_at, 'user' => $m->user ? [ 'id' => $m->user->id, 'username' => $m->user->username, 'avatar' => $m->user->avatar ?? $m->user->avatar_url, ] : null, 'reply_to' => $m->replyTo ? [ 'id' => $m->replyTo->id, 'message' => $m->replyTo->is_deleted ? null : $m->replyTo->message, 'user_id' => $m->replyTo->user_id, ] : null, ]; } // GET /api/guild-chat/me public function myGuild() { $me = Auth::id(); $member = GuildMember::where('user_id', $me)->with('guild')->first(); if (!$member || !$member->guild) { return response()->json(['data' => null]); } $guild = $member->guild; return response()->json([ 'data' => [ 'id' => $guild->id, 'name' => $guild->name, 'tag' => $guild->tag, 'logo_url' => $guild->logo_url, ], ]); } // GET /api/guild-chat/{guildId} public function messages($guildId) { $me = Auth::id(); $isMember = GuildMember::where('guild_id', $guildId)->where('user_id', $me)->exists(); if (!$isMember) { return response()->json(['error' => 'Not a guild member.'], 403); } $msgs = GuildMessage::where('guild_id', $guildId) ->with(['user:id,username,avatar,avatar_url', 'replyTo']) ->orderBy('created_at') ->limit(100) ->get() ->map(fn ($m) => $this->formatMessage($m)); return response()->json(['data' => $msgs]); } // POST /api/guild-chat/{guildId} public function send(Request $request, $guildId) { $me = Auth::id(); $isMember = GuildMember::where('guild_id', $guildId)->where('user_id', $me)->exists(); if (!$isMember) { return response()->json(['error' => 'Not a guild member.'], 403); } $request->validate([ 'message' => 'required|string|max:1000', 'reply_to_id' => 'nullable|integer|exists:guild_messages,id', ]); $msg = GuildMessage::create([ 'guild_id' => $guildId, 'user_id' => $me, 'type' => 'message', 'message' => $request->message, 'reply_to_id' => $request->reply_to_id, ]); $msg->load(['user:id,username,avatar,avatar_url', 'replyTo']); return response()->json(['data' => $this->formatMessage($msg)], 201); } // GET /api/guild-chat/{guildId}/members public function members($guildId) { $me = Auth::id(); $isMember = GuildMember::where('guild_id', $guildId)->where('user_id', $me)->exists(); if (!$isMember) { return response()->json(['error' => 'Not a guild member.'], 403); } $members = GuildMember::where('guild_id', $guildId) ->with('user:id,username,avatar,avatar_url') ->orderByRaw("FIELD(role, 'owner', 'officer', 'member')") ->get() ->map(fn ($m) => [ 'id' => $m->user->id, 'username' => $m->user->username, 'avatar' => $m->user->avatar ?? $m->user->avatar_url, 'role' => $m->role, ]); return response()->json(['data' => $members]); } }