Skip to content

Instantly share code, notes, and snippets.

@AndyButland
Created May 21, 2023 12:10
Show Gist options
  • Save AndyButland/d62ba0cca1cda091252528d55e3f2961 to your computer and use it in GitHub Desktop.
Save AndyButland/d62ba0cca1cda091252528d55e3f2961 to your computer and use it in GitHub Desktop.
public class PackageModel
{
private const string DateFormat = "yyyy-MM-dd";
public PackageModel()
{
}
public PackageModel(Guid id) => Id = id.ToString();
public PackageModel(PackageDto dto)
{
Category = dto.Category != null ? new CategoryModel(dto.Category) : null;
Description = dto.Description ?? string.Empty;
Id = dto.Id.ToString();
CreatedOn = (dto.CreatedOn ?? new DateTime()).ToString(DateFormat);
LicenseTypes = dto.LicenseTypes?.ToArray() ?? Array.Empty<string>();
PackageId = dto.PackageId;
PackageType = dto.PackageType ?? Domain.Entities.PackageType.Package.ToString();
Tags = dto.Tags?.OrderBy(x => x).ToArray() ?? Array.Empty<string>();
Title = dto.Title ?? string.Empty;
}
[SearchableField(IsFacetable = true, IsFilterable = true)]
public CategoryModel? Category { get; set; }
[SearchableField]
public string Description { get; set; } = string.Empty;
[SimpleField(IsKey = true)]
public string Id { get; set; } = string.Empty;
[SimpleField(IsSortable = true)]
public string CreatedOn { get; set; } = string.Empty;
[SimpleField(IsFilterable = true, IsFacetable = true)]
public string[] LicenseTypes { get; set; } = Array.Empty<string>();
[SearchableField]
public string PackageId { get; set; } = string.Empty;
[SimpleField(IsFilterable = true, IsFacetable = true)]
public string PackageType { get; set; } = Domain.Entities.PackageType.Package.ToString();
[SearchableField(IsFilterable = true, IsFacetable = true)]
public string[] Tags { get; set; } = Array.Empty<string>();
[SearchableField(IsSortable = true)]
public string Title { get; set; } = string.Empty;
public PackageDto ToPackageDto(PackageSearchQuery query) => new PackageDto(Guid.Parse(Id), PackageId)
{
Category = Category?.ToCategoryDto(),
Description = PackageDto.IsFieldRequested(nameof(PackageDto.Description), query.Fields) ? Description : null,
CreatedOn = PackageDto.IsFieldRequested(nameof(PackageDto.CreatedOn), query.Fields) ? ParseRequiredDate(CreatedOn) : null,
LicenseTypes = PackageDto.IsFieldRequested(nameof(PackageDto.LicenseTypes), query.Fields) ? LicenseTypes.ToList().AsReadOnly() : null,
PackageType = PackageDto.IsFieldRequested(nameof(PackageDto.PackageType), query.Fields) ? PackageType : null,
Tags = PackageDto.IsFieldRequested(nameof(PackageDto.Tags), query.Fields) ? Tags.ToList().AsReadOnly() : null,
Title = PackageDto.IsFieldRequested(nameof(PackageDto.Tags), query.Fields) ? Title : null,
};
private DateTime ParseRequiredDate(string dateValue) =>
string.IsNullOrWhiteSpace(dateValue) ? DateTime.MinValue : DateTime.ParseExact(dateValue, DateFormat, CultureInfo.InvariantCulture);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment