using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Knot.Modules.Stories.Domain;

namespace Knot.Modules.Stories.Application.Abstractions;

public interface IStoryRepository
{
    Task AddAsync(Story story, CancellationToken cancellationToken = default);
    Task UpdateAsync(Story story, CancellationToken cancellationToken = default);
    Task DeleteAsync(Story story, CancellationToken cancellationToken = default);
    Task<Story?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
    Task<List<Story>> GetActiveUserStoriesAsync(Guid userId, CancellationToken cancellationToken = default);
    Task<List<Story>> GetFeedStoriesAsync(List<Guid> userIds, CancellationToken cancellationToken = default);
    Task IncrementViewsCountAsync(Guid storyId, CancellationToken cancellationToken = default);
}
