using System.Collections.Generic;
using System.Threading.Tasks;
using GxPress.Common.Page;
using GxPress.Request.App.Topic;
using GxPress.Result.App.Topic;
using Datory;
using GxPress.Result.Job;

namespace GxPress.Repository.Interface
{
    public interface ITopicRepository : IRepository
    {

        /// <summary>
        /// 通知查询
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<PagedList<Entity.Topic.Topic>> GetTopicByUserIdAsync(TopicPageSearchRequest request);

        /// <summary>
        /// 根据GroupId获取通知
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        Task<PagedList<TopicListPageResult>> FindTopicByGroupIdAsync(TopicDetailListRequest request);

        Task<int> GetGroupTopicCountAsync(int groupId);

        /// <summary>
        /// 根据ID获取话题
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<Entity.Topic.Topic> GetAsync(int id);

        Task<int> CountAsync(SqlKata.Query query);

        Task<IEnumerable<Entity.Topic.Topic>> GetAllAsync(SqlKata.Query query);

        Task<int> InsertAsync(Entity.Topic.Topic topic);

        Task<bool> DeleteAsync(int id);

        Task<bool> UpdateAsync(Entity.Topic.Topic topic);
         /// <summary>
        /// 执行话题
        /// </summary>
        /// <returns></returns>
        Task<List<JobTopicResult>> ExecuteTopic();

        Task<PagedList<TopicListPageResult>> GetTopicPage(TopicPageSearchRequest request);
    }
}