Files
Operation-Blue-Laminate-v2/BlueLaminate/BlueLaminate.EFCore/Entities/Skin.cs
2026-05-29 22:08:32 -05:00

50 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace BlueLaminate.EFCore.Entities;
public class Skin
{
public int Id { get; set; }
public int WeaponId { get; set; }
public Weapon Weapon { get; set; } = null!;
/// <summary>Stable id from the CSGO-API catalogue, e.g. "skin-e757fd7191f9". The natural key.</summary>
public string Slug { get; set; } = null!;
// CSFloat/CS item indexes, sourced from the static catalogue (weapon.weapon_id
// and paint_index). Together they identify a skin on CSFloat and let market
// listings join back to this catalogue row. Nullable until a sync populates
// them, since older catalogue rows predate these columns.
public int? DefIndex { get; set; }
public int? PaintIndex { get; set; }
// When the catalogue-driven listing sweep last fully covered this skin. The
// sweep processes least-recently-swept skins first (nulls = never swept), so
// capped runs chain across the whole catalogue and the stalest data refreshes
// first. Null until the first sweep reaches this skin.
public DateTimeOffset? ListingsSweptAt { get; set; }
public string Name { get; set; } = null!;
public string Rarity { get; set; } = null!;
public string? Description { get; set; }
public string? ImageUrl { get; set; }
public bool StatTrakAvailable { get; set; }
public bool SouvenirAvailable { get; set; }
/// <summary>Every collection and container this skin originates from.</summary>
public ICollection<Collection> Collections { get; set; } = new List<Collection>();
// Null when the catalogue gives no wear range (e.g. vanilla knives). Callers
// must treat null as "unknown", not as a full 0.01.0 range.
public decimal? FloatMin { get; set; }
public decimal? FloatMax { get; set; }
// Computed in the database: float_min = 0.0 AND float_max = 1.0; null while the
// bounds are unknown. A skin with a capped float range behaves differently in
// tradeup calculations.
public bool? TrueFloat { get; private set; }
public ICollection<SkinCondition> Conditions { get; set; } = new List<SkinCondition>();
public ICollection<SkinInstance> Instances { get; set; } = new List<SkinInstance>();
public ICollection<PriceHistory> PriceHistories { get; set; } = new List<PriceHistory>();
}