From 4bce7d9b099e4e4ec4e7de27a1a713a530acccbd Mon Sep 17 00:00:00 2001 From: GoldenBIOS Date: Tue, 5 May 2026 07:56:04 +0200 Subject: [PATCH] Refactor: Update NetworkService with proper initializer and REST methods (GET, POST, PATCH, DELETE) --- Core/ApiClient.cs | 24 +++ Models/NetworkModels.cs | 7 +- .../{NetworkMethods.cs => NetworkService.cs} | 172 +++++++++++------- 3 files changed, 135 insertions(+), 68 deletions(-) rename Services/{NetworkMethods.cs => NetworkService.cs} (56%) diff --git a/Core/ApiClient.cs b/Core/ApiClient.cs index 7e19851..b108853 100644 --- a/Core/ApiClient.cs +++ b/Core/ApiClient.cs @@ -32,5 +32,29 @@ namespace Chtn.CSharp.SDK.Core return JsonConvert.DeserializeObject(responseJson); } + public async Task GetAsync(string endpoint) + { + var response = await _httpClient.GetAsync(endpoint); + response.EnsureSuccessStatusCode(); + var content = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(content); + } + public async Task PatchAsync(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(responseContent); + } + public async Task DeleteAsync(string endpoint) + { + var response = await _httpClient.DeleteAsync(endpoint); + response.EnsureSuccessStatusCode(); + var content = await response.Content.ReadAsStringAsync(); + return JsonConvert.DeserializeObject(content); + } } } \ No newline at end of file diff --git a/Models/NetworkModels.cs b/Models/NetworkModels.cs index 1b0077f..18f832a 100644 --- a/Models/NetworkModels.cs +++ b/Models/NetworkModels.cs @@ -175,7 +175,8 @@ namespace Chtn.CSharp.SDK.Models.Network public class UnbanMemberReq { [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 AssignRankToMemberReq @@ -186,7 +187,9 @@ namespace Chtn.CSharp.SDK.Models.Network public class RemoveRankFromMemberReq { [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 diff --git a/Services/NetworkMethods.cs b/Services/NetworkService.cs similarity index 56% rename from Services/NetworkMethods.cs rename to Services/NetworkService.cs index 8af9f3d..4f6fef4 100644 --- a/Services/NetworkMethods.cs +++ b/Services/NetworkService.cs @@ -10,19 +10,19 @@ namespace Chtn.CSharp.SDK.Services { // General & Discovery Task CreateInvite(CreateInviteReq req); - Task> GetInvites(GetInvitesReq req); + Task> GetInvites(); Task Create(CreateNetworkReq req); - Task> GetNetworks(GetNetworksReq req); + Task> GetNetworks(); Task AcceptInvite(AcceptInviteReq req); Task JoinPublicNetwork(JoinPublicNetworkReq req); - Task Leave(LeaveNetworkReq req); - Task Delete(DeleteNetworkReq req); - Task GetFromInvite(GetFromInviteReq req); + Task Leave(); + Task Delete(); + Task GetFromInvite(string inviteCode); Task GetDiscovery(); // Categories Task CreateCategory(CreateCategoryReq req); - Task DeleteCategory(DeleteCategoryReq req); + Task DeleteCategory(string categoryId); Task MoveCategory(MoveCategoryReq req); Task EditCategory(EditCategoryReq req); Task ToggleCategoryMute(ToggleCategoryMuteReq req); @@ -47,14 +47,14 @@ namespace Chtn.CSharp.SDK.Services Task UnbanMember(UnbanMemberReq req); Task> GetBannedMembers(GetBannedMembersReq req); - //Permissions & Overwrites + // Permissions & Overwrites Task ModifyRankPermissions(ModifyPermissionsReq req); Task OverwritePermission(OverwritePermissionReq req); Task OverwriteChannelPermission(OverwriteChannelPermissionReq req); Task> GetOverwrites(GetOverwritesReq req); Task> GetChannelOverwrites(GetChannelOverwritesReq req); - // Settings & Realtime + // Settings & Real-time Task UploadNewPic(UploadNewPictureReq req); Task ChangeVisibility(ChangeVisibilityReq req); Task EditName(EditNameReq req); @@ -62,112 +62,152 @@ namespace Chtn.CSharp.SDK.Services Task JoinWebSocketRoom(JoinWebSocketRoomReq req); } - public class NetworkServiceProvider : INetworkService + public class NetworkService : INetworkService { 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)); + _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 public async Task CreateInvite(CreateInviteReq req) => await _apiClient.PostAsync("network/createInvite", req); - public async Task> GetInvites(GetInvitesReq req) => - await _apiClient.PostAsync>("network/invites", req); - public async Task Create(CreateNetworkReq req) => + + public async Task> GetInvites() => + await _apiClient.GetAsync>($"network/invites?networkId={_networkId}"); + + public async Task Create(CreateNetworkReq req) => await _apiClient.PostAsync("network/create", req); - public async Task> GetNetworks(GetNetworksReq req) => - await _apiClient.PostAsync>("network/get", req); - public async Task AcceptInvite(AcceptInviteReq req) => + + public async Task> GetNetworks() => + await _apiClient.GetAsync>("network/get"); + + public async Task AcceptInvite(AcceptInviteReq req) => await _apiClient.PostAsync("network/acceptInvite", req); - public async Task JoinPublicNetwork(JoinPublicNetworkReq req) => + + public async Task JoinPublicNetwork(JoinPublicNetworkReq req) => await _apiClient.PostAsync("network/joinNetworkDiscovery", req); - public async Task Leave(LeaveNetworkReq req) => - await _apiClient.PostAsync("network/leave", req); - public async Task Delete(DeleteNetworkReq req) => - await _apiClient.PostAsync("network/delete", req); - public async Task GetFromInvite(GetFromInviteReq req) => - await _apiClient.PostAsync("network/fromInvite", req); - public async Task GetDiscovery() => - await _apiClient.PostAsync("network/discovery", new { }); + + public async Task Leave() => + await _apiClient.DeleteAsync($"network/leave/{_networkId}/{_userId}"); + + public async Task Delete() => + await _apiClient.DeleteAsync($"network/delete/{_networkId}"); + + public async Task GetFromInvite(string inviteCode) => + await _apiClient.GetAsync($"network/fromInvite?code={inviteCode}"); + + public async Task GetDiscovery() => + await _apiClient.GetAsync("network/discovery"); #endregion #region Categories public async Task CreateCategory(CreateCategoryReq req) => await _apiClient.PostAsync("network/createCategory", req); - public async Task DeleteCategory(DeleteCategoryReq req) => - await _apiClient.PostAsync("network/deleteCategory", req); - public async Task MoveCategory(MoveCategoryReq req) => - await _apiClient.PostAsync("network/moveCategory", req); - public async Task EditCategory(EditCategoryReq req) => - await _apiClient.PostAsync("network/editCategory", req); - public async Task ToggleCategoryMute(ToggleCategoryMuteReq req) => + + public async Task DeleteCategory(string categoryId) => + await _apiClient.DeleteAsync($"network/deleteCategory/{_networkId}/{categoryId}"); + + public async Task MoveCategory(MoveCategoryReq req) => + await _apiClient.PatchAsync("network/moveCategory", req); + + public async Task EditCategory(EditCategoryReq req) => + await _apiClient.PatchAsync("network/editCategory", req); + + public async Task ToggleCategoryMute(ToggleCategoryMuteReq req) => await _apiClient.PostAsync("network/toggleCatMute", req); #endregion #region Channels - public async Task CreateChannel(CreateChannelReq req) => + public async Task CreateChannel(CreateChannelReq req) => await _apiClient.PostAsync("network/createChannel", req); - public async Task EditChannel(EditChannelReq req) => - await _apiClient.PostAsync("network/editChannel", req); - public async Task ToggleChannelMute(ToggleChannelMuteReq req) => + + public async Task EditChannel(EditChannelReq req) => + await _apiClient.PatchAsync("network/editChannel", req); + + public async Task ToggleChannelMute(ToggleChannelMuteReq req) => await _apiClient.PostAsync("network/toggleChanMute", req); #endregion #region Ranks & Members - public async Task CreateRank(CreateRankReq req) => + public async Task CreateRank(CreateRankReq req) => await _apiClient.PostAsync("network/createRank", req); - public async Task DeleteRank(DeleteRankReq req) => - await _apiClient.PostAsync("network/deleteRank", req); + + public async Task DeleteRank(DeleteRankReq req) => + await _apiClient.DeleteAsync($"network/deleteRank/{_networkId}/{req.RankId}"); + public async Task MoveRank(MoveRankReq req) => - await _apiClient.PostAsync("network/moveRank", req); - public async Task EditRank(EditRankReq req) => - await _apiClient.PostAsync("network/editRank", req); - public async Task AssignRankToMember(AssignRankToMemberReq req) => + await _apiClient.PatchAsync("network/moveRank", req); + + public async Task EditRank(EditRankReq req) => + await _apiClient.PatchAsync("network/editRank", req); + + public async Task AssignRankToMember(AssignRankToMemberReq req) => await _apiClient.PostAsync("network/assignRankToMember", req); - public async Task RemoveRankFromMember(RemoveRankFromMemberReq req) => - await _apiClient.PostAsync("network/removeRankFromMember", req); + + public async Task RemoveRankFromMember(RemoveRankFromMemberReq req) => + await _apiClient.DeleteAsync($"network/removeRankFromMember/{_networkId}/{req.UserId}/{req.RankId}"); + public async Task> GetMembers(GetMembersReq req) => - await _apiClient.PostAsync>("network/getMembers", req); + await _apiClient.GetAsync>($"network/getMembers?networkId={_networkId}"); #endregion #region Moderation - public async Task KickMember(KickMemberReq req) => + public async Task KickMember(KickMemberReq req) => await _apiClient.PostAsync("network/kickMember", req); - public async Task BanMember(BanMemberReq req) => + + public async Task BanMember(BanMemberReq req) => await _apiClient.PostAsync("network/banMember", req); - public async Task UnbanMember(UnbanMemberReq req) => - await _apiClient.PostAsync("network/unbanMember", req); - public async Task> GetBannedMembers(GetBannedMembersReq req) => - await _apiClient.PostAsync>("network/getBannedMembers", req); + + public async Task UnbanMember(UnbanMemberReq req) => + await _apiClient.DeleteAsync($"network/unbanMember/{_networkId}/{req.UserId}"); + + public async Task> GetBannedMembers(GetBannedMembersReq req) => + await _apiClient.GetAsync>($"network/getBannedMembers?networkId={_networkId}"); #endregion #region Permissions & Overwrites public async Task ModifyRankPermissions(ModifyPermissionsReq req) => - await _apiClient.PostAsync("network/modifyPermissions", req); - public async Task OverwritePermission(OverwritePermissionReq req) => + await _apiClient.PatchAsync("network/modifyPermissions", req); + + public async Task OverwritePermission(OverwritePermissionReq req) => await _apiClient.PostAsync("network/overwritePermission", req); - public async Task OverwriteChannelPermission(OverwriteChannelPermissionReq req) => + + public async Task OverwriteChannelPermission(OverwriteChannelPermissionReq req) => await _apiClient.PostAsync("network/overwriteChannelPermission", req); - public async Task> GetOverwrites(GetOverwritesReq req) => - await _apiClient.PostAsync>("network/getOverwrites", req); - public async Task> GetChannelOverwrites(GetChannelOverwritesReq req) => - await _apiClient.PostAsync>("network/getChannelOverwrites", req); + + public async Task> GetOverwrites(GetOverwritesReq req) => + await _apiClient.GetAsync>($"network/getOverwrites?networkId={_networkId}"); + + public async Task> GetChannelOverwrites(GetChannelOverwritesReq req) => + await _apiClient.GetAsync>($"network/getChannelOverwrites?channelId={req.ChannelId}"); #endregion #region Settings & Real-time - public async Task UploadNewPic(UploadNewPictureReq req) => + public async Task UploadNewPic(UploadNewPictureReq req) => await _apiClient.PostAsync("v2/network/uploadNewPic", req); - public async Task ChangeVisibility(ChangeVisibilityReq req) => - await _apiClient.PostAsync("network/changeVisibility", req); + + public async Task ChangeVisibility(ChangeVisibilityReq req) => + await _apiClient.PatchAsync("network/changeVisibility", req); + public async Task EditName(EditNameReq req) => - await _apiClient.PostAsync("network/editName", req); - public async Task ToggleMute(ToggleNetworkMuteReq req) => + await _apiClient.PatchAsync("network/editName", req); + + public async Task ToggleMute(ToggleNetworkMuteReq req) => await _apiClient.PostAsync("network/toggleNetMute", req); - public async Task JoinWebSocketRoom(JoinWebSocketRoomReq req) => + + public async Task JoinWebSocketRoom(JoinWebSocketRoomReq req) => await _apiClient.PostAsync("v2/network/joinWebSocketRoom", req); #endregion } -} +} \ No newline at end of file