using Dinah.Core;
using System.Collections.Generic;
using System.Linq;
namespace DataLayer;
public class AudibleSeriesId
{
public string Id { get; }
public AudibleSeriesId(string id)
{
ArgumentValidator.EnsureNotNullOrWhiteSpace(id, nameof(id));
Id = id;
}
}
public class Series
{
internal int SeriesId { get; private set; }
public string AudibleSeriesId { get; private set; }
/// optional
public string? Name { get; private set; }
private readonly HashSet _booksLink;
public IEnumerable BooksLink
=> _booksLink?
.OrderBy(sb => sb.Index)
.ToList() ?? [];
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable.
private Series() { }
#pragma warning restore CS8618
/// special id class b/c it's too easy to get string order mixed up
public Series(AudibleSeriesId audibleSeriesId, string? name = null)
{
ArgumentValidator.EnsureNotNull(audibleSeriesId, nameof(audibleSeriesId));
var id = audibleSeriesId.Id;
ArgumentValidator.EnsureNotNullOrWhiteSpace(id, nameof(id));
AudibleSeriesId = id;
_booksLink = new HashSet();
UpdateName(name);
}
public void UpdateName(string? name)
{
// don't overwrite with null or whitespace but not an error
if (!string.IsNullOrWhiteSpace(name))
Name = name;
}
public override string? ToString() => Name;
}