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));
}
}