Basic Metadata Polish (#3548)

This commit is contained in:
Joe Milazzo 2025-02-14 15:23:52 -06:00 committed by GitHub
parent c0b59d87a4
commit 4c44dbf3e2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 3596 additions and 467 deletions

View file

@ -230,9 +230,10 @@ public class PersonRepository : IPersonRepository
public async Task<IEnumerable<SeriesDto>> GetSeriesKnownFor(int personId)
{
List<PersonRole> notValidRoles = [PersonRole.Location, PersonRole.Team, PersonRole.Other, PersonRole.Publisher, PersonRole.Translator];
return await _context.Person
.Where(p => p.Id == personId)
.SelectMany(p => p.SeriesMetadataPeople)
.SelectMany(p => p.SeriesMetadataPeople.Where(smp => !notValidRoles.Contains(smp.Role)))
.Select(smp => smp.SeriesMetadata)
.Select(sm => sm.Series)
.Distinct()

View file

@ -75,6 +75,7 @@ public interface ISeriesRepository
{
void Add(Series series);
void Attach(Series series);
void Attach(SeriesRelation relation);
void Update(Series series);
void Remove(Series series);
void Remove(IEnumerable<Series> series);
@ -146,6 +147,9 @@ public interface ISeriesRepository
Task<IEnumerable<Series>> GetAllSeriesByNameAsync(IList<string> normalizedNames,
int userId, SeriesIncludes includes = SeriesIncludes.None);
Task<Series?> GetFullSeriesByAnyName(string seriesName, string localizedName, int libraryId, MangaFormat format, bool withFullIncludes = true);
Task<Series?> GetSeriesByAnyName(IList<string> names, IList<MangaFormat> formats,
int userId, int? aniListId = null, SeriesIncludes includes = SeriesIncludes.None);
Task<Series?> GetSeriesByAnyName(string seriesName, string localizedName, IList<MangaFormat> formats, int userId, int? aniListId = null, SeriesIncludes includes = SeriesIncludes.None);
public Task<IList<Series>> GetAllSeriesByAnyName(string seriesName, string localizedName, int libraryId,
MangaFormat format);
@ -195,6 +199,11 @@ public class SeriesRepository : ISeriesRepository
_context.Series.Attach(series);
}
public void Attach(SeriesRelation relation)
{
_context.SeriesRelation.Attach(relation);
}
public void Attach(ExternalSeriesMetadata metadata)
{
_context.ExternalSeriesMetadata.Attach(metadata);
@ -1757,6 +1766,41 @@ public class SeriesRepository : ISeriesRepository
.FirstOrDefaultAsync();
}
public async Task<Series?> GetSeriesByAnyName(IList<string> names, IList<MangaFormat> formats,
int userId, int? aniListId = null, SeriesIncludes includes = SeriesIncludes.None)
{
var libraryIds = GetLibraryIdsForUser(userId);
names = names.Where(s => !string.IsNullOrEmpty(s)).Distinct().ToList();
var normalizedNames = names.Select(s => s.ToNormalized()).ToList();
var query = _context.Series
.Where(s => libraryIds.Contains(s.LibraryId))
.Where(s => formats.Contains(s.Format));
if (aniListId.HasValue && aniListId.Value > 0)
{
// If AniList ID is provided, override name checks
query = query.Where(s => s.ExternalSeriesMetadata.AniListId == aniListId.Value ||
normalizedNames.Contains(s.NormalizedName)
|| normalizedNames.Contains(s.NormalizedLocalizedName)
|| names.Contains(s.OriginalName));
}
else
{
// Otherwise, use name checks
query = query.Where(s =>
normalizedNames.Contains(s.NormalizedName)
|| normalizedNames.Contains(s.NormalizedLocalizedName)
|| names.Contains(s.OriginalName));
}
return await query
.Includes(includes)
.FirstOrDefaultAsync();
}
public async Task<IList<Series>> GetAllSeriesByAnyName(string seriesName, string localizedName, int libraryId,
MangaFormat format)
{