Basic Metadata Polish (#3548)
This commit is contained in:
parent
c0b59d87a4
commit
4c44dbf3e2
20 changed files with 3596 additions and 467 deletions
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue