using MessagePack; using SVSim.Database.Models; namespace SVSim.EmulatedEntrypoint.Models.Dtos; /// /// A deck belonging to a user. /// [MessagePackObject] public class UserDeck { [Key("deck_no")] public int DeckNumber { get; set; } [Key("class_id")] public int ClassId { get; set; } [Key("sleeve_id")] public int SleeveId { get; set; } [Key("leader_skin_id")] public int LeaderSkinId { get; set; } [Key("deck_name")] public string Name { get; set; } = string.Empty; [Key("card_id_array")] public List Cards { get; set; } = new List(); [Key("is_complete_deck")] public int IsCompleteDeck { get; set; } [Key("restricted_card_exists")] public bool RestrictedCardExists { get; set; } [Key("is_available_deck")] public int IsAvailable { get; set; } [Key("maintenance_card_ids")] public List MaintenanceCards { get; set; } = new List(); [Key("is_include_un_possession_card")] public bool IncludesNonCollectibleCards { get; set; } [Key("is_random_leader_skin")] public int IsRandomLeaderSkin { get; set; } [Key("leader_skin_id_list")] public List LeaderSkinIds { get; set; } = new List { 0 }; [Key("order_num")] public int Order { get; set; } [Key("create_deck_time")] public DateTime DeckCreateTime { get; set; } public UserDeck(ShadowverseDeckEntry deck) { this.DeckNumber = deck.Number; this.ClassId = deck.Class.Id; this.LeaderSkinId = deck.LeaderSkin.Id; this.SleeveId = deck.Sleeve.Id; this.Name = deck.Name; this.Cards = deck.Cards.SelectMany(card => Enumerable.Range(0, card.Count).Select(count => card.Card.Id)) .ToList(); this.IsRandomLeaderSkin = deck.RandomLeaderSkin ? 1 : 0; this.Order = deck.Number; this.DeckCreateTime = deck.DateCreated; //TODO probably want to calc some of these on demand this.IsCompleteDeck = 1; this.RestrictedCardExists = false; this.IsAvailable = 1; this.MaintenanceCards = new(); this.IncludesNonCollectibleCards = false; } public UserDeck() { } }