fix(guild): /guild/join returns guild_status per branch (APPLYING for approval path, JOINING otherwise)

GuildJoinTask.Parse() reads data[guild_status].ToInt() directly; hardcoding 2
for the APPROVAL path was wrong. GuildOpResult gains nullable GuildStatus; JoinAsync
sets 1 (APPLYING) for the pending-request path and 2 (JOINING) for instant joins.
Controller reads r.GuildStatus. Two new tests assert the wire value per path.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
gamer147
2026-06-27 13:51:04 -04:00
parent d7f9ba8f2a
commit 771d884314
4 changed files with 59 additions and 7 deletions

View File

@@ -248,9 +248,9 @@ public sealed class GuildController : SVSimController
if (!TryGetViewerId(out var viewerId)) return Unauthorized();
var r = await _guild.JoinAsync(viewerId, req.GuildId, ct);
if (!r.IsOk) return WireError();
// guild_status=2 (JOINING) on successful join; APPROVAL path also returns 2 as the viewer
// is now "awaiting" — client drives the display from result_code, not guild_status alone.
return new GuildJoinResponse { GuildStatus = 2 };
// guild_status is branch-specific: JOINING (2) for instant joins, APPLYING (1) for approval path.
// GuildJoinTask.Parse() reads this directly: GuildStatus = (eGUILD_STATUS)data["guild_status"].ToInt()
return new GuildJoinResponse { GuildStatus = r.GuildStatus ?? 2 };
}
[HttpPost("cancel_join_request")]