Refactor: Update NetworkService with proper initializer and REST methods (GET, POST, PATCH, DELETE)

This commit is contained in:
2026-05-05 07:56:04 +02:00
parent fd6f9246ba
commit 4bce7d9b09
3 changed files with 135 additions and 68 deletions

View File

@@ -32,5 +32,29 @@ namespace Chtn.CSharp.SDK.Core
return JsonConvert.DeserializeObject<TResponse>(responseJson); return JsonConvert.DeserializeObject<TResponse>(responseJson);
} }
public async Task<TResponse> GetAsync<TResponse>(string endpoint)
{
var response = await _httpClient.GetAsync(endpoint);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResponse>(content);
}
public async Task<TResponse> PatchAsync<TRequest, TResponse>(string endpoint, TRequest data)
{
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var request = new HttpRequestMessage(new HttpMethod("PATCH"), endpoint) { Content = content };
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResponse>(responseContent);
}
public async Task<TResponse> DeleteAsync<TResponse>(string endpoint)
{
var response = await _httpClient.DeleteAsync(endpoint);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<TResponse>(content);
}
} }
} }

View File

@@ -176,6 +176,7 @@ namespace Chtn.CSharp.SDK.Models.Network
{ {
[JsonProperty("networkId")] public string NetworkId { get; set; } [JsonProperty("networkId")] public string NetworkId { get; set; }
[JsonProperty("targetId")] public string TargetId { get; set; } [JsonProperty("targetId")] public string TargetId { get; set; }
[JsonProperty("userId")] public string UserId { get; set; }
} }
public class GetBannedMembersReq { [JsonProperty("networkId")] public string NetworkId { get; set; } } public class GetBannedMembersReq { [JsonProperty("networkId")] public string NetworkId { get; set; } }
public class AssignRankToMemberReq public class AssignRankToMemberReq
@@ -187,6 +188,8 @@ namespace Chtn.CSharp.SDK.Models.Network
{ {
[JsonProperty("rankId")] public string RankId { get; set; } [JsonProperty("rankId")] public string RankId { get; set; }
[JsonProperty("targetId")] public string TargetId { get; set; } [JsonProperty("targetId")] public string TargetId { get; set; }
[JsonProperty("networkId")] public string NetworkId { get; set; }
[JsonProperty("userId")] public string UserId { get; set; }
} }
#endregion #endregion

View File

@@ -10,19 +10,19 @@ namespace Chtn.CSharp.SDK.Services
{ {
// General & Discovery // General & Discovery
Task<NetworkInvite> CreateInvite(CreateInviteReq req); Task<NetworkInvite> CreateInvite(CreateInviteReq req);
Task<List<NetworkInvite>> GetInvites(GetInvitesReq req); Task<List<NetworkInvite>> GetInvites();
Task Create(CreateNetworkReq req); Task Create(CreateNetworkReq req);
Task<List<Network>> GetNetworks(GetNetworksReq req); Task<List<Network>> GetNetworks();
Task AcceptInvite(AcceptInviteReq req); Task AcceptInvite(AcceptInviteReq req);
Task JoinPublicNetwork(JoinPublicNetworkReq req); Task JoinPublicNetwork(JoinPublicNetworkReq req);
Task Leave(LeaveNetworkReq req); Task Leave();
Task Delete(DeleteNetworkReq req); Task Delete();
Task<Network> GetFromInvite(GetFromInviteReq req); Task<Network> GetFromInvite(string inviteCode);
Task<NetworkDiscovery> GetDiscovery(); Task<NetworkDiscovery> GetDiscovery();
// Categories // Categories
Task CreateCategory(CreateCategoryReq req); Task CreateCategory(CreateCategoryReq req);
Task DeleteCategory(DeleteCategoryReq req); Task DeleteCategory(string categoryId);
Task MoveCategory(MoveCategoryReq req); Task MoveCategory(MoveCategoryReq req);
Task EditCategory(EditCategoryReq req); Task EditCategory(EditCategoryReq req);
Task ToggleCategoryMute(ToggleCategoryMuteReq req); Task ToggleCategoryMute(ToggleCategoryMuteReq req);
@@ -54,7 +54,7 @@ namespace Chtn.CSharp.SDK.Services
Task<List<PermissionOverwrite>> GetOverwrites(GetOverwritesReq req); Task<List<PermissionOverwrite>> GetOverwrites(GetOverwritesReq req);
Task<List<PermissionOverwrite>> GetChannelOverwrites(GetChannelOverwritesReq req); Task<List<PermissionOverwrite>> GetChannelOverwrites(GetChannelOverwritesReq req);
// Settings & Realtime // Settings & Real-time
Task UploadNewPic(UploadNewPictureReq req); Task UploadNewPic(UploadNewPictureReq req);
Task ChangeVisibility(ChangeVisibilityReq req); Task ChangeVisibility(ChangeVisibilityReq req);
Task EditName(EditNameReq req); Task EditName(EditNameReq req);
@@ -62,47 +62,68 @@ namespace Chtn.CSharp.SDK.Services
Task JoinWebSocketRoom(JoinWebSocketRoomReq req); Task JoinWebSocketRoom(JoinWebSocketRoomReq req);
} }
public class NetworkServiceProvider : INetworkService public class NetworkService : INetworkService
{ {
private readonly ApiClient _apiClient; private readonly ApiClient _apiClient;
private readonly string _userId;
private readonly string _token;
private readonly string _networkId;
private readonly string _database;
public NetworkServiceProvider(ApiClient apiClient) public NetworkService(ApiClient apiClient, string userId, string token, string networkId, string database)
{ {
_apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient)); _apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient));
_userId = userId ?? throw new ArgumentNullException(nameof(userId));
_token = token ?? throw new ArgumentNullException(nameof(token));
_networkId = networkId ?? throw new ArgumentNullException(nameof(networkId));
_database = database ?? throw new ArgumentNullException(nameof(database));
} }
#region General & Discovery #region General & Discovery
public async Task<NetworkInvite> CreateInvite(CreateInviteReq req) => public async Task<NetworkInvite> CreateInvite(CreateInviteReq req) =>
await _apiClient.PostAsync<CreateInviteReq, NetworkInvite>("network/createInvite", req); await _apiClient.PostAsync<CreateInviteReq, NetworkInvite>("network/createInvite", req);
public async Task<List<NetworkInvite>> GetInvites(GetInvitesReq req) =>
await _apiClient.PostAsync<GetInvitesReq, List<NetworkInvite>>("network/invites", req); public async Task<List<NetworkInvite>> GetInvites() =>
await _apiClient.GetAsync<List<NetworkInvite>>($"network/invites?networkId={_networkId}");
public async Task Create(CreateNetworkReq req) => public async Task Create(CreateNetworkReq req) =>
await _apiClient.PostAsync<CreateNetworkReq, object>("network/create", req); await _apiClient.PostAsync<CreateNetworkReq, object>("network/create", req);
public async Task<List<Network>> GetNetworks(GetNetworksReq req) =>
await _apiClient.PostAsync<GetNetworksReq, List<Network>>("network/get", req); public async Task<List<Network>> GetNetworks() =>
await _apiClient.GetAsync<List<Network>>("network/get");
public async Task AcceptInvite(AcceptInviteReq req) => public async Task AcceptInvite(AcceptInviteReq req) =>
await _apiClient.PostAsync<AcceptInviteReq, object>("network/acceptInvite", req); await _apiClient.PostAsync<AcceptInviteReq, object>("network/acceptInvite", req);
public async Task JoinPublicNetwork(JoinPublicNetworkReq req) => public async Task JoinPublicNetwork(JoinPublicNetworkReq req) =>
await _apiClient.PostAsync<JoinPublicNetworkReq, object>("network/joinNetworkDiscovery", req); await _apiClient.PostAsync<JoinPublicNetworkReq, object>("network/joinNetworkDiscovery", req);
public async Task Leave(LeaveNetworkReq req) =>
await _apiClient.PostAsync<LeaveNetworkReq, object>("network/leave", req); public async Task Leave() =>
public async Task Delete(DeleteNetworkReq req) => await _apiClient.DeleteAsync<object>($"network/leave/{_networkId}/{_userId}");
await _apiClient.PostAsync<DeleteNetworkReq, object>("network/delete", req);
public async Task<Network> GetFromInvite(GetFromInviteReq req) => public async Task Delete() =>
await _apiClient.PostAsync<GetFromInviteReq, Network>("network/fromInvite", req); await _apiClient.DeleteAsync<object>($"network/delete/{_networkId}");
public async Task<Network> GetFromInvite(string inviteCode) =>
await _apiClient.GetAsync<Network>($"network/fromInvite?code={inviteCode}");
public async Task<NetworkDiscovery> GetDiscovery() => public async Task<NetworkDiscovery> GetDiscovery() =>
await _apiClient.PostAsync<object, NetworkDiscovery>("network/discovery", new { }); await _apiClient.GetAsync<NetworkDiscovery>("network/discovery");
#endregion #endregion
#region Categories #region Categories
public async Task CreateCategory(CreateCategoryReq req) => public async Task CreateCategory(CreateCategoryReq req) =>
await _apiClient.PostAsync<CreateCategoryReq, object>("network/createCategory", req); await _apiClient.PostAsync<CreateCategoryReq, object>("network/createCategory", req);
public async Task DeleteCategory(DeleteCategoryReq req) =>
await _apiClient.PostAsync<DeleteCategoryReq, object>("network/deleteCategory", req); public async Task DeleteCategory(string categoryId) =>
await _apiClient.DeleteAsync<object>($"network/deleteCategory/{_networkId}/{categoryId}");
public async Task MoveCategory(MoveCategoryReq req) => public async Task MoveCategory(MoveCategoryReq req) =>
await _apiClient.PostAsync<MoveCategoryReq, object>("network/moveCategory", req); await _apiClient.PatchAsync<MoveCategoryReq, object>("network/moveCategory", req);
public async Task EditCategory(EditCategoryReq req) => public async Task EditCategory(EditCategoryReq req) =>
await _apiClient.PostAsync<EditCategoryReq, object>("network/editCategory", req); await _apiClient.PatchAsync<EditCategoryReq, object>("network/editCategory", req);
public async Task ToggleCategoryMute(ToggleCategoryMuteReq req) => public async Task ToggleCategoryMute(ToggleCategoryMuteReq req) =>
await _apiClient.PostAsync<ToggleCategoryMuteReq, object>("network/toggleCatMute", req); await _apiClient.PostAsync<ToggleCategoryMuteReq, object>("network/toggleCatMute", req);
#endregion #endregion
@@ -110,8 +131,10 @@ namespace Chtn.CSharp.SDK.Services
#region Channels #region Channels
public async Task CreateChannel(CreateChannelReq req) => public async Task CreateChannel(CreateChannelReq req) =>
await _apiClient.PostAsync<CreateChannelReq, object>("network/createChannel", req); await _apiClient.PostAsync<CreateChannelReq, object>("network/createChannel", req);
public async Task EditChannel(EditChannelReq req) => public async Task EditChannel(EditChannelReq req) =>
await _apiClient.PostAsync<EditChannelReq, object>("network/editChannel", req); await _apiClient.PatchAsync<EditChannelReq, object>("network/editChannel", req);
public async Task ToggleChannelMute(ToggleChannelMuteReq req) => public async Task ToggleChannelMute(ToggleChannelMuteReq req) =>
await _apiClient.PostAsync<ToggleChannelMuteReq, object>("network/toggleChanMute", req); await _apiClient.PostAsync<ToggleChannelMuteReq, object>("network/toggleChanMute", req);
#endregion #endregion
@@ -119,53 +142,70 @@ namespace Chtn.CSharp.SDK.Services
#region Ranks & Members #region Ranks & Members
public async Task CreateRank(CreateRankReq req) => public async Task CreateRank(CreateRankReq req) =>
await _apiClient.PostAsync<CreateRankReq, object>("network/createRank", req); await _apiClient.PostAsync<CreateRankReq, object>("network/createRank", req);
public async Task DeleteRank(DeleteRankReq req) => public async Task DeleteRank(DeleteRankReq req) =>
await _apiClient.PostAsync<DeleteRankReq, object>("network/deleteRank", req); await _apiClient.DeleteAsync<object>($"network/deleteRank/{_networkId}/{req.RankId}");
public async Task MoveRank(MoveRankReq req) => public async Task MoveRank(MoveRankReq req) =>
await _apiClient.PostAsync<MoveRankReq, object>("network/moveRank", req); await _apiClient.PatchAsync<MoveRankReq, object>("network/moveRank", req);
public async Task EditRank(EditRankReq req) => public async Task EditRank(EditRankReq req) =>
await _apiClient.PostAsync<EditRankReq, object>("network/editRank", req); await _apiClient.PatchAsync<EditRankReq, object>("network/editRank", req);
public async Task AssignRankToMember(AssignRankToMemberReq req) => public async Task AssignRankToMember(AssignRankToMemberReq req) =>
await _apiClient.PostAsync<AssignRankToMemberReq, object>("network/assignRankToMember", req); await _apiClient.PostAsync<AssignRankToMemberReq, object>("network/assignRankToMember", req);
public async Task RemoveRankFromMember(RemoveRankFromMemberReq req) => public async Task RemoveRankFromMember(RemoveRankFromMemberReq req) =>
await _apiClient.PostAsync<RemoveRankFromMemberReq, object>("network/removeRankFromMember", req); await _apiClient.DeleteAsync<object>($"network/removeRankFromMember/{_networkId}/{req.UserId}/{req.RankId}");
public async Task<List<NetworkMember>> GetMembers(GetMembersReq req) => public async Task<List<NetworkMember>> GetMembers(GetMembersReq req) =>
await _apiClient.PostAsync<GetMembersReq, List<NetworkMember>>("network/getMembers", req); await _apiClient.GetAsync<List<NetworkMember>>($"network/getMembers?networkId={_networkId}");
#endregion #endregion
#region Moderation #region Moderation
public async Task KickMember(KickMemberReq req) => public async Task KickMember(KickMemberReq req) =>
await _apiClient.PostAsync<KickMemberReq, object>("network/kickMember", req); await _apiClient.PostAsync<KickMemberReq, object>("network/kickMember", req);
public async Task BanMember(BanMemberReq req) => public async Task BanMember(BanMemberReq req) =>
await _apiClient.PostAsync<BanMemberReq, object>("network/banMember", req); await _apiClient.PostAsync<BanMemberReq, object>("network/banMember", req);
public async Task UnbanMember(UnbanMemberReq req) => public async Task UnbanMember(UnbanMemberReq req) =>
await _apiClient.PostAsync<UnbanMemberReq, object>("network/unbanMember", req); await _apiClient.DeleteAsync<object>($"network/unbanMember/{_networkId}/{req.UserId}");
public async Task<List<BannedMember>> GetBannedMembers(GetBannedMembersReq req) => public async Task<List<BannedMember>> GetBannedMembers(GetBannedMembersReq req) =>
await _apiClient.PostAsync<GetBannedMembersReq, List<BannedMember>>("network/getBannedMembers", req); await _apiClient.GetAsync<List<BannedMember>>($"network/getBannedMembers?networkId={_networkId}");
#endregion #endregion
#region Permissions & Overwrites #region Permissions & Overwrites
public async Task ModifyRankPermissions(ModifyPermissionsReq req) => public async Task ModifyRankPermissions(ModifyPermissionsReq req) =>
await _apiClient.PostAsync<ModifyPermissionsReq, object>("network/modifyPermissions", req); await _apiClient.PatchAsync<ModifyPermissionsReq, object>("network/modifyPermissions", req);
public async Task OverwritePermission(OverwritePermissionReq req) => public async Task OverwritePermission(OverwritePermissionReq req) =>
await _apiClient.PostAsync<OverwritePermissionReq, object>("network/overwritePermission", req); await _apiClient.PostAsync<OverwritePermissionReq, object>("network/overwritePermission", req);
public async Task OverwriteChannelPermission(OverwriteChannelPermissionReq req) => public async Task OverwriteChannelPermission(OverwriteChannelPermissionReq req) =>
await _apiClient.PostAsync<OverwriteChannelPermissionReq, object>("network/overwriteChannelPermission", req); await _apiClient.PostAsync<OverwriteChannelPermissionReq, object>("network/overwriteChannelPermission", req);
public async Task<List<PermissionOverwrite>> GetOverwrites(GetOverwritesReq req) => public async Task<List<PermissionOverwrite>> GetOverwrites(GetOverwritesReq req) =>
await _apiClient.PostAsync<GetOverwritesReq, List<PermissionOverwrite>>("network/getOverwrites", req); await _apiClient.GetAsync<List<PermissionOverwrite>>($"network/getOverwrites?networkId={_networkId}");
public async Task<List<PermissionOverwrite>> GetChannelOverwrites(GetChannelOverwritesReq req) => public async Task<List<PermissionOverwrite>> GetChannelOverwrites(GetChannelOverwritesReq req) =>
await _apiClient.PostAsync<GetChannelOverwritesReq, List<PermissionOverwrite>>("network/getChannelOverwrites", req); await _apiClient.GetAsync<List<PermissionOverwrite>>($"network/getChannelOverwrites?channelId={req.ChannelId}");
#endregion #endregion
#region Settings & Real-time #region Settings & Real-time
public async Task UploadNewPic(UploadNewPictureReq req) => public async Task UploadNewPic(UploadNewPictureReq req) =>
await _apiClient.PostAsync<UploadNewPictureReq, object>("v2/network/uploadNewPic", req); await _apiClient.PostAsync<UploadNewPictureReq, object>("v2/network/uploadNewPic", req);
public async Task ChangeVisibility(ChangeVisibilityReq req) => public async Task ChangeVisibility(ChangeVisibilityReq req) =>
await _apiClient.PostAsync<ChangeVisibilityReq, object>("network/changeVisibility", req); await _apiClient.PatchAsync<ChangeVisibilityReq, object>("network/changeVisibility", req);
public async Task EditName(EditNameReq req) => public async Task EditName(EditNameReq req) =>
await _apiClient.PostAsync<EditNameReq, object>("network/editName", req); await _apiClient.PatchAsync<EditNameReq, object>("network/editName", req);
public async Task ToggleMute(ToggleNetworkMuteReq req) => public async Task ToggleMute(ToggleNetworkMuteReq req) =>
await _apiClient.PostAsync<ToggleNetworkMuteReq, object>("network/toggleNetMute", req); await _apiClient.PostAsync<ToggleNetworkMuteReq, object>("network/toggleNetMute", req);
public async Task JoinWebSocketRoom(JoinWebSocketRoomReq req) => public async Task JoinWebSocketRoom(JoinWebSocketRoomReq req) =>
await _apiClient.PostAsync<JoinWebSocketRoomReq, object>("v2/network/joinWebSocketRoom", req); await _apiClient.PostAsync<JoinWebSocketRoomReq, object>("v2/network/joinWebSocketRoom", req);
#endregion #endregion