using Postall.Domain.Dtos; using Postall.Domain.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Postall.Domain.Contracts.Repositories { /// /// Interface para repositório de canais do YouTube no MongoDB /// public interface IChannelRepository { /// /// Obtém todos os canais /// Task> GetAllAsync(); /// /// Obtém um canal pelo ID do MongoDB /// Task GetByIdAsync(string id); /// /// Obtém os canais pelo ID do usuario do MongoDB /// Task> GetByUserIdAsync(string userId); /// /// Obtém os canais pelo ID do usuario e o channelId /// Task GetByUserIdAndChannelIdAsync(string userId, string channelId); /// /// Obtém um canal pelo ID do YouTube /// Task GetByYoutubeIdAsync(string youtubeId); /// /// Adiciona um novo canal /// Task AddAsync(ChannelData ChannelData); /// /// Adiciona vários canais de uma vez /// Task> AddManyAsync(IEnumerable channels); /// /// Atualiza um canal existente /// Task UpdateAsync(ChannelData ChannelData); /// /// Remove um canal pelo ID do MongoDB /// Task DeleteAsync(string id); /// /// Remove um canal pelo ID do YouTube /// Task DeleteByYoutubeIdAsync(string youtubeId); /// /// Busca canais com base em um termo de pesquisa no título ou descrição /// Task> SearchAsync(string searchTerm); /// /// Obtém canais selecionados (IsSelected = true) /// Task> GetSelectedAsync(); /// /// Marca ou desmarca um canal como selecionado /// Task SetSelectedStatusAsync(string id, bool isSelected); /// /// Converte ChannelResponse para ChannelData /// ChannelData ConvertFromResponse(ChannelResponse channelResponse); /// /// Converte ChannelData para ChannelResponse /// ChannelResponse ConvertToResponse(ChannelData ChannelData); } }