using System; using System.Collections.Generic; using System.Threading.Tasks; using Chtn.CSharp.SDK.Core; using Chtn.CSharp.SDK.Models.Network; namespace Chtn.CSharp.SDK.Services { public interface INetworkService { // General & Discovery Task CreateInvite(CreateInviteReq req); Task> GetInvites(); Task Create(CreateNetworkReq req); Task> GetNetworks(); Task AcceptInvite(AcceptInviteReq req); Task JoinPublicNetwork(JoinPublicNetworkReq req); Task Leave(); Task Delete(); Task GetFromInvite(string inviteCode); Task GetDiscovery(); // Categories Task CreateCategory(CreateCategoryReq req); Task DeleteCategory(string categoryId); Task MoveCategory(MoveCategoryReq req); Task EditCategory(EditCategoryReq req); Task ToggleCategoryMute(ToggleCategoryMuteReq req); // Channels Task CreateChannel(CreateChannelReq req); Task EditChannel(EditChannelReq req); Task ToggleChannelMute(ToggleChannelMuteReq req); // Ranks & Members Task CreateRank(CreateRankReq req); Task DeleteRank(DeleteRankReq req); Task MoveRank(MoveRankReq req); Task EditRank(EditRankReq req); Task AssignRankToMember(AssignRankToMemberReq req); Task RemoveRankFromMember(RemoveRankFromMemberReq req); Task> GetMembers(GetMembersReq req); // Moderation Task KickMember(KickMemberReq req); Task BanMember(BanMemberReq req); Task UnbanMember(UnbanMemberReq req); Task> GetBannedMembers(GetBannedMembersReq req); // Permissions & Overwrites Task ModifyRankPermissions(ModifyPermissionsReq req); Task OverwritePermission(OverwritePermissionReq req); Task OverwriteChannelPermission(OverwriteChannelPermissionReq req); Task> GetOverwrites(GetOverwritesReq req); Task> GetChannelOverwrites(GetChannelOverwritesReq req); // Settings & Real-time Task UploadNewPic(UploadNewPictureReq req); Task ChangeVisibility(ChangeVisibilityReq req); Task EditName(EditNameReq req); Task ToggleMute(ToggleNetworkMuteReq req); Task JoinWebSocketRoom(JoinWebSocketRoomReq req); } 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 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() => await _apiClient.GetAsync>($"network/invites?networkId={_networkId}"); public async Task Create(CreateNetworkReq req) => await _apiClient.PostAsync("network/create", 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) => await _apiClient.PostAsync("network/joinNetworkDiscovery", req); 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(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) => await _apiClient.PostAsync("network/createChannel", 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) => await _apiClient.PostAsync("network/createRank", req); public async Task DeleteRank(DeleteRankReq req) => await _apiClient.DeleteAsync($"network/deleteRank/{_networkId}/{req.RankId}"); public async Task MoveRank(MoveRankReq 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.DeleteAsync($"network/removeRankFromMember/{_networkId}/{req.UserId}/{req.RankId}"); public async Task> GetMembers(GetMembersReq req) => await _apiClient.GetAsync>($"network/getMembers?networkId={_networkId}"); #endregion #region Moderation public async Task KickMember(KickMemberReq req) => await _apiClient.PostAsync("network/kickMember", req); public async Task BanMember(BanMemberReq req) => await _apiClient.PostAsync("network/banMember", 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.PatchAsync("network/modifyPermissions", req); public async Task OverwritePermission(OverwritePermissionReq req) => await _apiClient.PostAsync("network/overwritePermission", req); public async Task OverwriteChannelPermission(OverwriteChannelPermissionReq req) => await _apiClient.PostAsync("network/overwriteChannelPermission", 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) => await _apiClient.PostAsync("v2/network/uploadNewPic", req); public async Task ChangeVisibility(ChangeVisibilityReq req) => await _apiClient.PatchAsync("network/changeVisibility", req); public async Task EditName(EditNameReq 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) => await _apiClient.PostAsync("v2/network/joinWebSocketRoom", req); #endregion } }