using Microsoft.AspNetCore.Mvc; using SVSim.Database.Models.Config; using SVSim.Database.Services; using SVSim.Database.Services.Guild; using SVSim.EmulatedEntrypoint.Models.Dtos.Common; using SVSim.EmulatedEntrypoint.Models.Dtos.Guild; using SVSim.EmulatedEntrypoint.Models.Dtos.Requests; namespace SVSim.EmulatedEntrypoint.Controllers; /// /guild/* — 22 endpoints. See docs/api-spec/endpoints/post-login/guild-*.md. [Route("guild")] public sealed class GuildController : SVSimController { private readonly IGuildService _guild; private readonly IGameConfigService _configs; public GuildController(IGuildService guild, IGameConfigService configs) { _guild = guild; _configs = configs; } [HttpPost("info")] public async Task> Info([FromBody] BaseRequest _, CancellationToken ct) { if (!TryGetViewerId(out var viewerId)) return Unauthorized(); var cfg = _configs.Get(); var view = await _guild.GetMyGuildAsync(viewerId, ct); var resp = new GuildInfoResponse { MaxMemberNum = cfg.MaxMemberNum, MaxSubLeaderNum = cfg.MaxSubLeaderNum, UsableStampList = cfg.UsableStampList.ConvertAll(i => i.ToString()), }; if (view is null) { resp.GuildStatus = 0; // NOT_JOINING } else { resp.GuildStatus = 2; // JOINING — fully populated path lands in Task 7 // Task 7 populates `Guild`, JoinRequestCount, InviteCount. } return resp; } // ===== 21 remaining stubs — each returns the response DTO with defaults ===== [HttpPost("create")] public Task> Create([FromBody] GuildCreateRequest req, CancellationToken ct) => Stub(); [HttpPost("breakup")] public Task> Breakup([FromBody] BaseRequest _, CancellationToken ct) => Stub(); [HttpPost("update")] public Task> Update([FromBody] GuildUpdateRequest req, CancellationToken ct) => Task.FromResult>(new GuildUpdateResponse()); [HttpPost("update_description")] public Task> UpdateDescription([FromBody] GuildUpdateDescriptionRequest req, CancellationToken ct) => Stub(); [HttpPost("update_emblem")] public Task> UpdateEmblem([FromBody] GuildUpdateEmblemRequest req, CancellationToken ct) => Task.FromResult>(new GuildUpdateResponse()); [HttpPost("search_guild")] public Task> SearchGuild([FromBody] GuildSearchGuildRequest req, CancellationToken ct) => Task.FromResult>(new GuildSearchGuildResponse { List = new() }); [HttpPost("emblem_list")] public Task> EmblemList([FromBody] BaseRequest _, CancellationToken ct) => Task.FromResult>(new GuildEmblemListResponse { EmblemList = new() }); [HttpPost("others_info")] public Task> OthersInfo([FromBody] GuildOthersInfoRequest req, CancellationToken ct) => Task.FromResult>(new GuildOthersInfoResponse()); [HttpPost("friend_list")] public Task> FriendList([FromBody] BaseRequest _, CancellationToken ct) => Task.FromResult>(new GuildFriendListResponse { Friends = new() }); [HttpPost("invite_user_list")] public Task> InviteUserList([FromBody] BaseRequest _, CancellationToken ct) => Task.FromResult>(new GuildInviteUserListResponse { Users = new() }); [HttpPost("invited_guild_list")] public Task> InvitedGuildList([FromBody] GuildInvitedGuildListRequest req, CancellationToken ct) => Task.FromResult>(new GuildInvitedGuildListResponse { List = new() }); [HttpPost("invite")] public Task> Invite([FromBody] GuildInviteRequest req, CancellationToken ct) => Stub(); [HttpPost("cancel_invite")] public Task> CancelInvite([FromBody] GuildCancelInviteRequest req, CancellationToken ct) => Stub(); [HttpPost("reject_invite")] public Task> RejectInvite([FromBody] GuildRejectInviteRequest req, CancellationToken ct) => Stub(); [HttpPost("join")] public Task> Join([FromBody] GuildJoinEndpointRequest req, CancellationToken ct) => Task.FromResult>(new GuildJoinResponse { GuildStatus = 0 }); [HttpPost("cancel_join_request")] public Task> CancelJoinRequest([FromBody] GuildCancelJoinRequestRequest req, CancellationToken ct) => Stub(); [HttpPost("join_request_list")] public Task> JoinRequestList([FromBody] GuildJoinRequestListRequest req, CancellationToken ct) => Task.FromResult>(new GuildJoinRequestListResponse { Users = new() }); [HttpPost("join_request_accept")] public Task> JoinRequestAccept([FromBody] GuildJoinRequestAcceptRequest req, CancellationToken ct) => Stub(); [HttpPost("reject_join_request")] public Task> RejectJoinRequest([FromBody] GuildRejectJoinRequestRequest req, CancellationToken ct) => Stub(); [HttpPost("leave")] public Task> Leave([FromBody] BaseRequest _, CancellationToken ct) => Stub(); [HttpPost("remove")] public Task> Remove([FromBody] GuildRemoveRequest req, CancellationToken ct) => Stub(); [HttpPost("change_role")] public Task> ChangeRole([FromBody] GuildChangeRoleRequest req, CancellationToken ct) => Task.FromResult>(new GuildChangeRoleResponse { Members = new() }); private static Task> Stub() => Task.FromResult>(new EmptyResponse()); }