using EchoHub.Core.DTOs; namespace EchoHub.Core.Contracts; public interface IChannelService { // Channel CRUD Task> GetChannelsAsync(Guid userId, int offset, int limit); Task CreateChannelAsync(Guid creatorUserId, string name, string? topic, bool isPublic); Task UpdateTopicAsync(Guid callerUserId, string channelName, string? topic); Task DeleteChannelAsync(Guid callerUserId, string channelName); // Channel queries Task<(string? Topic, bool Exists)> GetChannelTopicAsync(string channelName); Task> GetChannelListAsync(); Task GetChannelByNameAsync(string channelName); // Membership Task<(bool Success, string? Error)> EnsureChannelMembershipAsync(Guid userId, string channelName); } public record ChannelListItem(string Name, string? Topic, int OnlineCount);