using Koogle.Application.DTOs; using Koogle.Domain.Enums; using Microsoft.AspNetCore.Http; namespace Koogle.Application.Interfaces; /// /// Service for managing club GIFs and submission tokens. /// public interface IClubGifService { // GIF Management Task GetByIdAsync(Guid id, CancellationToken ct = default); Task> GetByClubAsync(Guid clubId, bool includePending = false, CancellationToken ct = default); Task UploadAsync(Guid clubId, IFormFile file, CreateClubGifDto dto, CancellationToken ct = default); Task ImportFromUrlAsync(Guid clubId, ImportClubGifDto dto, CancellationToken ct = default); Task UpdateAsync(UpdateClubGifDto dto, CancellationToken ct = default); Task DeleteAsync(Guid id, CancellationToken ct = default); // Approval Task ApproveAsync(Guid id, CancellationToken ct = default); Task RejectAsync(Guid id, CancellationToken ct = default); // Playback Task SelectRandomForEventAsync(Guid clubId, ThrowEventType eventType, CancellationToken ct = default); Task> GetPreloadGifsAsync(Guid clubId, CancellationToken ct = default); // Rating Task RateAsync(Guid gifId, Guid userProfileId, int value, CancellationToken ct = default); // Submission Tokens Task CreateSubmissionTokenAsync(CreateGifSubmissionTokenDto dto, CancellationToken ct = default); Task GetSubmissionTokenAsync(string token, CancellationToken ct = default); Task> GetSubmissionTokensByClubAsync(Guid clubId, CancellationToken ct = default); Task DeleteSubmissionTokenAsync(Guid id, CancellationToken ct = default); // Anonymous Submission Task SubmitAnonymousAsync(string token, IFormFile file, string name, CancellationToken ct = default); Task SubmitAnonymousFromUrlAsync(string token, string url, string name, CancellationToken ct = default); // Template Seeding /// /// Seeds template GIFs from club-template folder to a club. /// Should be called after creating a new club. /// Task SeedTemplateGifsAsync(Guid clubId, CancellationToken ct = default); }