using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Kavita.Common.Helpers; using Kavita.Models.DTOs; using Kavita.Models.DTOs.Metadata.Browse; using Kavita.Models.DTOs.Metadata.Browse.Requests; using Kavita.Models.DTOs.Person; using Kavita.Models.Entities.Enums; using Kavita.Models.Entities.Person; namespace Kavita.API.Repositories; [Flags] public enum PersonIncludes { None = 1 << 0, Aliases = 1 << 1, ChapterPeople = 1 << 2, SeriesPeople = 1 << 3, All = Aliases | ChapterPeople | SeriesPeople, } public interface IPersonRepository { void Attach(Person person); void Attach(IEnumerable person); void Remove(Person person); void Remove(ChapterPeople person); void Remove(SeriesMetadataPeople person); void Update(Person person); Task> GetAllPeople(PersonIncludes includes = PersonIncludes.Aliases, CancellationToken ct = default); Task> GetAllPersonDtosAsync(int userId, PersonIncludes includes = PersonIncludes.None, CancellationToken ct = default); Task> GetAllPersonDtosByRoleAsync(int userId, PersonRole role, PersonIncludes includes = PersonIncludes.None, CancellationToken ct = default); Task RemoveAllPeopleNoLongerAssociated(CancellationToken ct = default); Task> GetAllPeopleDtosForLibrariesAsync(int userId, List? libraryIds = null, PersonIncludes includes = PersonIncludes.None, CancellationToken ct = default); Task GetCoverImageAsync(int personId, CancellationToken ct = default); Task> GetAllCoverImagesAsync(CancellationToken ct = default); Task GetCoverImageByNameAsync(string name, CancellationToken ct = default); Task> GetRolesForPersonByName(int personId, int userId, CancellationToken ct = default); Task> GetBrowsePersonDtos(int userId, BrowsePersonFilterDto filter, UserParams userParams, CancellationToken ct = default); Task GetPersonById(int personId, PersonIncludes includes = PersonIncludes.None, CancellationToken ct = default); Task GetPersonDtoByName(string name, int userId, PersonIncludes includes = PersonIncludes.Aliases, CancellationToken ct = default); /// /// Returns a person matched on a normalized name or alias /// /// /// /// /// Task GetPersonByNameOrAliasAsync(string name, PersonIncludes includes = PersonIncludes.Aliases, CancellationToken ct = default); Task IsNameUnique(string name, CancellationToken ct = default); Task> GetSeriesKnownFor(int personId, int userId, CancellationToken ct = default); Task> GetChaptersForPersonByRole(int personId, int userId, PersonRole role, CancellationToken ct = default); /// /// Returns all people with a matching name, or alias /// /// /// /// /// Task> GetPeopleByNames(List normalizedNames, PersonIncludes includes = PersonIncludes.Aliases, CancellationToken ct = default); Task GetPersonByAniListId(int aniListId, PersonIncludes includes = PersonIncludes.Aliases, CancellationToken ct = default); Task> SearchPeople(string searchQuery, PersonIncludes includes = PersonIncludes.Aliases, CancellationToken ct = default); Task AnyAliasExist(string alias, CancellationToken ct = default); }