public IEnumerable <ValidationResult> Validate(ValidationContext validationContext) { if (EventId == Guid.Empty) { yield return(new ValidationResult( "The field is required.", new[] { nameof(EventId) })); } if (TicketTypeId == Guid.Empty) { yield return(new ValidationResult( "The field is required.", new[] { nameof(TicketTypeId) })); } if (Gender != null && GenderExtensions.FromStringValue(Gender) == null) { yield return(new ValidationResult( $"Gender '{Gender}' is not an allowed value. Allowed values: 'm' or 'f'.", new[] { nameof(Gender) })); } if (BookingDate != null && BookingDate > DateTime.UtcNow) { yield return(new ValidationResult( "The BookingDate must be in the past.", new[] { nameof(BookingDate) })); } }
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (t == typeof(PetType)) { return(PetTypeExtensions.ReadJson(reader, serializer)); } if (t == typeof(PetType?)) { if (reader.TokenType == JsonToken.Null) { return(null); } return(PetTypeExtensions.ReadJson(reader, serializer)); } if (t == typeof(Gender)) { return(GenderExtensions.ReadJson(reader, serializer)); } if (t == typeof(Gender?)) { if (reader.TokenType == JsonToken.Null) { return(null); } return(GenderExtensions.ReadJson(reader, serializer)); } throw new Exception("Unknown type"); }
public TicketMapperProfile() { CreateMap <Ticket, Models.Ticket>() .ForMember(e => e.Creator, opt => opt.MapFrom(e => e.Creator.Name)) .ForMember(e => e.Editor, opt => opt.MapFrom(e => e.Editor.Name)) .ForMember(e => e.Gender, opt => opt.MapFrom( e => e.Gender.HasValue ? e.Gender.Value.GetStringValue() : null)) .ReverseMap() .ForMember(e => e.Id, opt => opt.Ignore()) .ForMember(e => e.TicketSecret, opt => opt.Ignore()) .ForMember(e => e.Creator, opt => opt.Ignore()) .ForMember(e => e.Editor, opt => opt.Ignore()) .ForMember(e => e.Gender, opt => opt.MapFrom( e => GenderExtensions.FromStringValue(e.Gender))) .ForMember(e => e.BirthDate, opt => opt.MapFrom( e => e.BirthDate.HasValue ? (DateTime?)e.BirthDate.Value.ToLocalTime().Date : null)) .ForMember(e => e.PaymentStatus, opt => opt.SetMappingOrder(0)) .ForMember(e => e.PaymentStatus, opt => opt.MapFrom <PaymentStatusResolver>()) .ForMember(e => e.TicketTypeId, opt => opt.SetMappingOrder(1)) .ForMember(e => e.AmountPaid, opt => opt.SetMappingOrder(2)) .ForMember(e => e.TicketType, opt => opt.Ignore()); CreateMap <Ticket, Models.ConferenceDialogModel>() .ForMember(e => e.TicketId, opt => opt.MapFrom(e => e.Id)); }
public static Item Load(Models.GameObject obj, GomObject gom) { var itm = (Models.Item)obj; itm.NodeId = gom.Id; itm.Fqn = gom.Name; itm.AppearanceColor = Models.AppearanceColorExtensions.ToAppearanceColor((string)gom.Data.ValueOrDefault <string>("itmEnhancementColor", null)); itm.ArmorSpec = Models.ArmorSpecExtensions.ToArmorSpec((long)gom.Data.ValueOrDefault <long>("itmArmorSpec", 0)); itm.Binding = Models.ItemBindingRuleExtensions.ToBindingRule((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("itmBindingRule", null)); itm.CombinedStatModifiers = new ItemStatList(); itm.ConsumedOnUse = (bool)gom.Data.ValueOrDefault <bool>("itmConsumedOnUse", false); //itm.Conversation itm.ConversationFqn = gom.Data.ValueOrDefault <string>("itmConversation", null); var descLookup = (GomObjectData)(gom.Data.Get <Dictionary <object, object> >("locTextRetrieverMap")[DescLookupKey]); itm.DescriptionId = descLookup.Get <long>("strLocalizedTextRetrieverStringID"); itm.Description = StringTable.TryGetString(itm.Fqn, descLookup); itm.DisassembleCategory = Models.ProfessionSubtypeExtensions.ToProfessionSubtype((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("prfDisassembleCategory", null)); itm.Durability = (int)gom.Data.ValueOrDefault <long>("itmMaxDurability", 0); itm.EnhancementCategory = Models.EnhancementCategoryExtensions.ToEnhancementCategory((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("itmEnhancementCategory", null)); itm.EnhancementSubCategory = Models.EnhancementSubCategoryExtensions.ToEnhancementSubCategory((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("itmEnhancementSubCategory", null)); itm.EnhancementType = Models.EnhancementTypeExtensions.ToEnhancementType((long)gom.Data.ValueOrDefault <long>("itmEnhancementType", 0)); // Enhancement Slots itm.EnhancementSlots = new ItemEnhancementList(); var enhancementSlots = (List <object>)gom.Data.ValueOrDefault <List <object> >("itmEnhancementSlots", null); var enhancementDefaults = (List <object>)gom.Data.ValueOrDefault <List <object> >("itmEnhancementDefaults", null); if (enhancementSlots != null) { for (var i = 0; i < 5; i++) { long slot = (long)enhancementSlots[i]; if (slot == 0) { continue; } ItemEnhancement enh = new ItemEnhancement(); enh.Slot = EnhancementTypeExtensions.ToEnhancementType(slot); enh.ModificationId = (ulong)enhancementDefaults[i]; if (enh.ModificationId != 0) { enh.Modification = ItemLoader.Load(enh.ModificationId); } // Don't add empty modulator/augment slots to gear since for some reason it seems to be on every damn modifiable item if ((enh.Slot == EnhancementType.Modulator) && (enh.Modification == null)) { continue; } itm.EnhancementSlots.Add(enh); } } itm.EquipAbilityId = gom.Data.ValueOrDefault <ulong>("itmEquipAbility", 0); itm.EquipAbility = AbilityLoader.Load(itm.EquipAbilityId); itm.GiftRank = Models.GiftRankExtensions.ToGiftRank((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("itmGiftAffectionRank", null)); itm.GiftType = Models.GiftTypeExtensions.ToGiftType((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("itmGiftType", null)); itm.Icon = gom.Data.ValueOrDefault <string>("itmIcon", String.Empty); TorLib.Icons.Add(itm.Icon); itm.ItemLevel = (int)gom.Data.ValueOrDefault <long>("itmBaseLevel", 0); itm.MaxStack = (int)gom.Data.ValueOrDefault <long>("itmStackMax", 0); itm.ModifierSpec = gom.Data.ValueOrDefault <long>("itmModifierSetID", 0); itm.MountSpec = gom.Data.ValueOrDefault <long>("itmMountSpec", 0); var nameLookup = (GomObjectData)(gom.Data.Get <Dictionary <object, object> >("locTextRetrieverMap")[NameLookupKey]); itm.NameId = nameLookup.Get <long>("strLocalizedTextRetrieverStringID"); itm.Name = StringTable.TryGetString(itm.Fqn, nameLookup); if (itm.Name == null) { itm.Name = String.Empty; } itm.Id = (ulong)(itm.NameId >> 32); itm.Quality = Models.ItemQualityExtensions.ToItemQuality((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("itmBaseQuality", null)); //if (itm.EnhancementType != EnhancementType.None) //{ itm.Rating = Tables.ItemRating.GetRating(itm.ItemLevel, itm.Quality); //} //else //{ //itm.Rating = Tables.ItemRating.GetRating(itm.ItemLevel, ItemQuality.Premium); //} itm.RequiresAlignment = (bool)gom.Data.ValueOrDefault <bool>("itmAlignmentRequired", false); itm.RequiredAlignmentTier = (int)gom.Data.ValueOrDefault <long>("itmRequiredAlignmentTier", int.MaxValue); itm.RequiredAlignmentInverted = (bool)gom.Data.ValueOrDefault <bool>("itmRequiredAlignmentInverted", false); itm.Field_4000000FAFE42471 = gom.Data.ValueOrDefault <long>("field_4000000FAFE42471", 0); // Required Classes itm.RequiredClasses = new ClassSpecList(); var classMap = (Dictionary <object, object>)gom.Data.ValueOrDefault <Dictionary <object, object> >("itmRequiredClasses", null); if (classMap != null) { foreach (var kvp in classMap) { if ((bool)kvp.Value) { var classSpec = ClassSpecLoader.Load((ulong)kvp.Key); if (classSpec == null) { continue; } itm.RequiredClasses.Add(classSpec); } } } itm.RequiredGender = GenderExtensions.ToGender((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("itmGenderRequired", null)); itm.RequiredLevel = (int)gom.Data.ValueOrDefault <long>("itmMinimumLevel", 0); itm.RequiredProfession = Models.ProfessionExtensions.ToProfession((ScriptEnum)gom.Data.ValueOrDefault <ScriptEnum>("prfProfessionRequired", null)); itm.RequiredProfessionLevel = (int)gom.Data.ValueOrDefault <long>("prfProfessionLevelRequired", 0); itm.RequiresSocial = (bool)gom.Data.ValueOrDefault <bool>("itmSocialScoreRequired", false); itm.RequiredSocialTier = (int)gom.Data.ValueOrDefault <long>("itmRequiredSocialScoreTier", 0); itm.RequiredValorRank = (int)gom.Data.ValueOrDefault <long>("itmRequiredValorRank", 0); // Item is a recipe/schematic GomObjectData schematic = (GomObjectData)gom.Data.ValueOrDefault <object>("prfLearnedSchematic", null); if (schematic != null) { itm.SchematicId = schematic.Get <ulong>("prfSchematicSpecId"); itm.Schematic = SchematicLoader.Load(itm.SchematicId); } itm.ShieldSpec = ArmorSpecExtensions.ToArmorSpec((long)gom.Data.ValueOrDefault <long>("itmShieldSpec", 0)); // Valid Inventory Slots itm.Slots = new SlotTypeList(); var slotList = (List <object>)gom.Data.ValueOrDefault <List <object> >("itmSlotTypes", null); if (slotList != null) { foreach (var slot in slotList) { SlotType slotType = SlotTypeExtensions.ToSlotType((ScriptEnum)slot); if (SlotTypeExtensions.IgnoreSlot(slotType)) { continue; } itm.Slots.Add(slotType); } } // Item Stats var stats = (Dictionary <object, object>)gom.Data.ValueOrDefault <Dictionary <object, object> >("itmEquipModStats", null); itm.StatModifiers = new ItemStatList(); if (stats != null) { foreach (var kvp in stats) { ItemStat itmStat = new ItemStat(); itmStat.Stat = StatExtensions.ToStat((ScriptEnum)kvp.Key); itmStat.Modifier = (int)(float)kvp.Value; itm.StatModifiers.Add(itmStat); } } // Combined Stats itm.CombinedStatModifiers = new ItemStatList(); itm.CombinedRequiredLevel = itm.RequiredLevel; itm.CombinedRating = itm.Rating; foreach (var stat in itm.StatModifiers) { var itmStat = new ItemStat(); itmStat.Stat = stat.Stat; itmStat.Modifier = stat.Modifier; itm.CombinedStatModifiers.Add(itmStat); } foreach (var mod in itm.EnhancementSlots) { if (mod.Modification != null) { if (mod.Slot.IsBaseMod()) { if (mod.Modification.RequiredLevel > itm.CombinedRequiredLevel) { itm.CombinedRequiredLevel = mod.Modification.RequiredLevel; } if (mod.Modification.Rating > itm.CombinedRating) { itm.CombinedRating = mod.Modification.Rating; } } foreach (var stat in mod.Modification.CombinedStatModifiers) { ItemStat itmStat = itm.CombinedStatModifiers.FirstOrDefault(s => s.Stat == stat.Stat); if (itmStat == null) { itmStat = new ItemStat(); itmStat.Stat = stat.Stat; itmStat.Modifier += stat.Modifier; itm.CombinedStatModifiers.Add(itmStat); } else { itmStat.Modifier += stat.Modifier; } } } } //itm.TreasurePackageSpec; itm.TreasurePackageId = (long)gom.Data.ValueOrDefault <long>("field_40000013407C89A3", 0); itm.TypeBitSet = (int)(long)gom.Data.ValueOrDefault <long>("itmTypeBitSet", 0); itm.UniqueLimit = (int)gom.Data.ValueOrDefault <long>("itmUniqueLimit", 0); itm.UseAbilityId = gom.Data.ValueOrDefault <ulong>("itmUsageAbility", 0); itm.UseAbility = AbilityLoader.Load(itm.UseAbilityId); itm.Value = (int)gom.Data.ValueOrDefault <long>("itmValue", 0); itm.VendorStackSize = (int)gom.Data.ValueOrDefault <long>("itmStackVendor", 0); itm.WeaponSpec = WeaponSpecExtensions.ToWeaponSpec((ulong)gom.Data.ValueOrDefault <ulong>("cbtWeaponSpec", 0)); //ulong dmgType = (ulong)gom.Data.ValueOrDefault<ulong>("cbtDamageType", 0); //itm.DamageType = ItemDamageTypeExtensions.ToItemDamageType(dmgType); switch (itm.WeaponSpec) { case WeaponSpec.Lightsaber: case WeaponSpec.Polesaber: case WeaponSpec.Pistol: case WeaponSpec.Rifle: case WeaponSpec.SniperRifle: case WeaponSpec.AssaultCannon: { itm.DamageType = ItemDamageType.Energy; break; } case WeaponSpec.Vibroblade: case WeaponSpec.VibrobladeTech: case WeaponSpec.Vibroknife: case WeaponSpec.Shotgun: case WeaponSpec.Electrostaff: case WeaponSpec.ElectrostaffTech: { itm.DamageType = ItemDamageType.Kinetic; break; } default: { itm.DamageType = ItemDamageType.None; break; } } itm.IsModdable = ((itm.Quality == ItemQuality.Prototype) && (itm.EnhancementSlots.Count > 1)) || itm.Quality == ItemQuality.Moddable; ItemSubCategoryExtensions.SetCategory(itm); return(itm); }
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity <User>(entity => { entity.Property(e => e.Username).IsRequired().HasMaxLength(300); entity.HasIndex(e => e.Username).IsUnique(); entity.Property(e => e.EmailAddress).IsRequired().HasMaxLength(300); entity.HasIndex(e => e.EmailAddress).IsUnique(); entity.Property(e => e.Name).IsRequired().HasMaxLength(300); entity.Property(e => e.Role) .IsRequired() .HasMaxLength(300) .HasConversion( value => value.GetStringValue(), value => (UserRole)Enum.Parse(typeof(UserRole), value, true)); }); modelBuilder.Entity <Event>(entity => { entity.HasQueryFilter(e => !e.IsDeleted); entity.Property(e => e.Name).IsRequired().HasMaxLength(300); entity.Property(e => e.Location).IsRequired().HasMaxLength(300); entity.Property(e => e.HomepageUrl).IsRequired().HasMaxLength(2083); entity.Property(e => e.Host).IsRequired().HasMaxLength(300); entity.Property(e => e.Address).IsRequired().HasMaxLength(300); entity.Property(e => e.ZipCode).IsRequired().HasMaxLength(300); entity.Property(e => e.City).IsRequired().HasMaxLength(300); }); modelBuilder.Entity <TicketType>(entity => { entity.ToTable("TicketTypes"); entity.Property(e => e.Name).IsRequired().HasMaxLength(300); entity.Property(e => e.Price).HasColumnType("decimal(5, 2)"); entity.HasOne(e => e.Event) .WithMany(e => e.TicketTypes) .HasForeignKey(e => e.EventId); }); modelBuilder.Entity <Ticket>(entity => { entity.HasQueryFilter(e => !e.IsDeleted); entity.HasAlternateKey(e => e.TicketNumber); entity.HasAlternateKey(e => e.TicketSecret); entity.Property(e => e.TicketNumber).IsRequired().HasMaxLength(100); entity.Property(e => e.Mail).HasMaxLength(254); entity.Property(e => e.Phone).HasMaxLength(100); entity.Property(e => e.LastName).HasMaxLength(300); entity.Property(e => e.FirstName).HasMaxLength(300); entity.Property(e => e.Address).HasMaxLength(1000); entity.Property(e => e.RoomNumber).HasMaxLength(300); entity.Property(e => e.AmountPaid).HasColumnType("decimal(5, 2)"); entity.Property(e => e.Gender) .HasColumnType("nchar(1)") .HasConversion( value => value.HasValue ? value.Value.GetStringValue() : null, value => GenderExtensions.FromStringValue(value)); entity.Property(e => e.PaymentStatus) .IsRequired() .HasMaxLength(100) .HasConversion( value => value.GetStringValue(), value => (PaymentStatus)Enum.Parse(typeof(PaymentStatus), value, true)); entity.Property(e => e.DeliveryType) .HasMaxLength(100) .HasConversion( value => value.Value.GetStringValue(), value => (TicketDeliveryType)Enum.Parse(typeof(TicketDeliveryType), value, true)); entity.HasOne(e => e.Event) .WithMany(e => e.Tickets) .HasForeignKey(e => e.EventId) .OnDelete(DeleteBehavior.Restrict); entity.HasOne(e => e.TicketType) .WithMany(e => e.Tickets) .HasForeignKey(e => e.TicketTypeId) .OnDelete(DeleteBehavior.Restrict); entity.HasOne(e => e.Creator) .WithMany() .HasForeignKey(e => e.CreatorId); entity.HasOne(e => e.Editor) .WithMany() .HasForeignKey(e => e.EditorId); }); modelBuilder.Entity <MasterQrCode>(entity => { entity.ToTable("MasterQrCodes"); entity.HasOne(e => e.Owner) .WithMany(e => e.MasterQrCodes) .HasForeignKey(e => e.OwnerId) .OnDelete(DeleteBehavior.Restrict); entity.HasOne(e => e.Event) .WithMany() .HasForeignKey(e => e.EventId) .OnDelete(DeleteBehavior.Restrict); }); modelBuilder.Entity <Client>(entity => { entity.Property(e => e.Name).IsRequired().HasMaxLength(1000); entity.Property(e => e.Secret).IsRequired().HasMaxLength(1000); }); modelBuilder.Entity <MailSettings>(entity => { entity.ToTable("MailSettings"); entity.Property(e => e.SmtpHost).IsRequired().HasMaxLength(300); entity.Property(e => e.SmtpUsername).HasMaxLength(300); entity.Property(e => e.SmtpPassword).HasMaxLength(300); entity.Property(e => e.SenderAddress).IsRequired().HasMaxLength(300); entity.Property(e => e.Subject).IsRequired().HasMaxLength(300); entity.HasOne(e => e.Event) .WithOne(e => e.MailSettings) .HasForeignKey <Event>(e => e.MailSettingsId); entity.HasMany(e => e.DemoEmailRecipients) .WithOne() .HasForeignKey(e => e.MailSettingsId); }); modelBuilder.Entity <DemoEmailRecipient>(entity => { entity.ToTable("DemoEmailRecipients"); entity.Property(e => e.EmailAddress).IsRequired().HasMaxLength(300); }); modelBuilder.Entity <AuditEvent>(entity => { entity.ToTable("AuditEventLog"); entity.Property(e => e.Action).IsRequired().HasMaxLength(100); entity.Property(e => e.Detail).HasMaxLength(1000); entity.Property(e => e.Level) .IsRequired() .HasMaxLength(100) .HasConversion( value => value.GetStringValue(), value => (AuditEventLevel)Enum.Parse(typeof(AuditEventLevel), value, true)); entity.HasOne(e => e.Ticket) .WithMany() .HasForeignKey(e => e.TicketId); }); }