namespace BlueLaminate.Scraper.CsFloat; /// /// A single active CSFloat listing, flattened from the API's listing+item shape /// to the fields this project cares about. Prices arrive from CSFloat as integer /// cents and are converted to whole-dollar here so callers /// never deal in cents. This is a read model for the official, documented /// GET /api/v1/listings endpoint — active listings only, not sales. /// /// CSFloat listing id (stable while the listing is live). /// When the listing was created. /// "buy_now" or "auction". /// Asking price in USD (converted from cents). /// Canonical item name, e.g. "M4A4 | Cyber Security (Field-Tested)". /// Weapon definition index (maps to catalog weapon_id). /// Paint index (maps to catalog paint_index). /// Pattern seed. /// /// Exact float/wear value, or null for items that have no float at all /// (e.g. Vanilla knives). A null is distinct from a genuine 0.0 float. /// /// Wear bucket name, e.g. "Field-Tested". /// StatTrak™ variant. /// Souvenir variant. /// Number of stickers applied. /// Seller's SteamID64. /// In-game inspect link. /// /// Steam asset id of this specific copy. Changes when the item trades, so it is /// NOT a stable item identity — but two live listings sharing a fingerprint /// (skin+float+seed+ST/souvenir) yet showing different asset ids are the /// signature of a duplicated ("duped") item. /// public sealed record CsFloatListing( string ListingId, DateTimeOffset CreatedAt, string Type, decimal Price, string MarketHashName, int DefIndex, int PaintIndex, int PaintSeed, decimal? FloatValue, string? WearName, bool IsStatTrak, bool IsSouvenir, int StickerCount, string? SellerSteamId, string? InspectLink, string? AssetId);