using System; using System.Collections.Generic; using System.Threading.Tasks; /// /// 玩家空间模块。 /// public sealed class BriskSpaceModule : BriskModuleBase { /// /// 按玩家 ID 获取空间数据。 /// public async Task GetByPlayerIdAsync(string playerId) { ValidatePlayerId(playerId); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetDataAsync($"/spaces/{playerId}", null, true); return BriskModelMapper.ToSpaceView(data); }); } /// /// 按登录身份获取空间数据。 /// public async Task GetByLoginIdentityAsync(string loginProvider, string loginUserId) { ValidateLoginIdentity(loginProvider, loginUserId); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetDataAsync("/spaces/by-login", CreateLoginIdentityQuery(loginProvider, loginUserId), true); return BriskModelMapper.ToSpaceView(data); }); } /// /// 按玩家 ID 获取空间统计。 /// public async Task GetStatsByPlayerIdAsync(string playerId) { ValidatePlayerId(playerId); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetDataAsync($"/spaces/{playerId}/stats", null, true); return BriskModelMapper.ToSpaceStats(data); }); } /// /// 按登录身份获取空间统计。 /// public async Task GetStatsByLoginIdentityAsync(string loginProvider, string loginUserId) { ValidateLoginIdentity(loginProvider, loginUserId); return await ExecuteAsync(async context => { var data = await context.HttpClient.GetDataAsync("/spaces/by-login/stats", CreateLoginIdentityQuery(loginProvider, loginUserId), true); return BriskModelMapper.ToSpaceStats(data); }); } /// /// 按玩家 ID 点赞空间。 /// public async Task LikeByPlayerIdAsync(string playerId) { ValidatePlayerId(playerId); await ExecuteAsync(async context => { await context.HttpClient.PostJsonRawAsync($"/spaces/{playerId}/like", new Dictionary(), true); }); } /// /// 按玩家 ID 取消点赞空间。 /// public async Task UnlikeByPlayerIdAsync(string playerId) { ValidatePlayerId(playerId); await ExecuteAsync(async context => { await context.HttpClient.SendDeleteJsonRawAsync($"/spaces/{playerId}/like", null, true); }); } /// /// 按登录身份点赞空间。 /// public async Task LikeByLoginIdentityAsync(string loginProvider, string loginUserId) { ValidateLoginIdentity(loginProvider, loginUserId); await ExecuteAsync(async context => { await context.HttpClient.PostJsonRawAsync("/spaces/by-login/like", new Dictionary(), true, CreateLoginIdentityQuery(loginProvider, loginUserId)); }); } /// /// 按登录身份取消点赞空间。 /// public async Task UnlikeByLoginIdentityAsync(string loginProvider, string loginUserId) { ValidateLoginIdentity(loginProvider, loginUserId); await ExecuteAsync(async context => { await context.HttpClient.SendDeleteJsonRawAsync("/spaces/by-login/like", CreateLoginIdentityQuery(loginProvider, loginUserId), true); }); } /// /// 更新当前玩家自己的空间内容。 /// public async Task UpdateMyAsync(object payload) { RequireNotNull(payload, nameof(payload)); await ExecuteAsync(async context => { await context.HttpClient.SendPutJsonRawAsync( "/spaces/me", new Dictionary { { "payload_json", payload } }, true); }); } /// /// 获取我的访客列表。 /// public async Task> GetMyVisitsAsync() { return await ExecuteAsync(async context => { var data = await context.HttpClient.GetRawDataAsync("/spaces/me/visits", null, true); return (IReadOnlyList)BriskModelMapper.ToSpaceVisits(data); }); } private static Dictionary CreateLoginIdentityQuery(string loginProvider, string loginUserId) { return new Dictionary { { "login_provider", loginProvider }, { "login_user_id", loginUserId } }; } private static void ValidatePlayerId(string playerId) { RequireNotEmpty(playerId, nameof(playerId)); } private static void ValidateLoginIdentity(string loginProvider, string loginUserId) { RequireNotEmpty(loginProvider, nameof(loginProvider)); RequireNotEmpty(loginUserId, nameof(loginUserId)); } }