Exemplo n.º 1
0
 public static OathInfoViewModel ToViewModel(this OathInfo oathInfo)
 {
     return(new OathInfoViewModel
     {
         OathInfoId = oathInfo.Id,
         Broken = oathInfo.Broken,
         Oath = oathInfo.Oath.ToViewModel(),
         Notes = oathInfo.Notes
     });
 }
Exemplo n.º 2
0
        public async Task <int> SaveCreature([FromBody] CreatureEditInput input)
        {
            if (input.IsPlayerCharacter && input.CreatureId == 0)
            {
                if (await dbContext.Creatures.CountAsync(c => !c.Delisted && c.IsPlayerCharacter && c.Author.Id == userSession.Player.Id) >= 6)
                {
                    return(0); //they were warned client-side that the beta only allows six player characters
                }
            }

            Creature creature = null;

            if (input.CreatureId > 0)
            {
                creature = await this.CreatureQuery.Where(c => c.Author.Id == this.userSession.Player.Id)
                           .SingleOrDefaultAsync(c => c.Id == input.CreatureId);
            }
            else
            {
                creature                        = new Creature();
                creature.CreatedAtMS            = System.DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                dbContext.Entry(creature).State = EntityState.Added;
                dbContext.Attach(this.userSession.Player);
                creature.Author = this.userSession.Player;
            }

            if (!string.IsNullOrWhiteSpace(input.DescriptionChangedTo))
            {
                creature.Description = input.DescriptionChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.HairChangedTo))
            {
                creature.Hair = input.HairChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.AgeChangedTo))
            {
                creature.Age = input.AgeChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.WeightChangedTo))
            {
                creature.Weight = input.WeightChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.HeightChangedTo))
            {
                creature.Height = input.HeightChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.SkinChangedTo))
            {
                creature.Skin = input.SkinChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.EyesChangedTo))
            {
                creature.Eyes = input.EyesChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.NameChangedTo))
            {
                creature.Name = input.NameChangedTo;
            }
            if (!string.IsNullOrWhiteSpace(input.GenderChangedTo))
            {
                creature.Gender = input.GenderChangedTo;
            }

            if (input.RaceIdChangedTo > 0)
            {
                creature.Race = await dbContext.Races.SingleOrDefaultAsync(r => r.Id == input.RaceIdChangedTo);
            }
            else if (input.RaceIdChangedTo < 0) //-1 means remove Race
            {
                creature.Race = null;
            }

            creature.CurrentEnergyLedger = input.CurrentEnergyLedgerIs;
            creature.Level             = input.LevelIs;
            creature.IsPlayerCharacter = input.IsPlayerCharacter;

            foreach (var oathInfoVM in input.NewOathInformation)
            {
                OathInfo oathInfo = new OathInfo
                {
                    Broken = oathInfoVM.Broken,
                    OathId = oathInfoVM.Oath.OathId,
                    Notes  = oathInfoVM.Notes
                };
                creature.OathInformation.Add(oathInfo);
            }

            foreach (var featureInfoVM in input.NewFeatureInformation)
            {
                FeatureInfo featureInfo = new FeatureInfo
                {
                    FeatureId                 = featureInfoVM.Feature.FeatureId,
                    CostWhenTaken             = featureInfoVM.CostWhenTaken,
                    EnergySacrificedWhenTaken = featureInfoVM.EnergySacrificedWhenTaken,
                    TakenAtLevel              = featureInfoVM.TakenAtLevel,
                    Notes = featureInfoVM.Notes
                };
                if (featureInfoVM.FeatureInfoId > 0)
                {
                    var existingFeatureInfo = creature.FeatureInformation.FirstOrDefault(fi => fi.Id == featureInfoVM.FeatureInfoId);
                    if (existingFeatureInfo != null)
                    {
                        dbContext.Entry(existingFeatureInfo).State = EntityState.Detached;
                        featureInfo.Id = featureInfoVM.FeatureInfoId;
                        dbContext.Attach(featureInfo);
                        dbContext.Entry(featureInfo).State = EntityState.Modified;
                    }
                }
                else
                {
                    creature.FeatureInformation.Add(featureInfo);
                }
            }

            foreach (var itemInfoVM in input.NewItemInformation)
            {
                ItemInfo itemInfo = new ItemInfo
                {
                    ItemId = itemInfoVM.Item.EquipmentId,
                    Notes  = itemInfoVM.Notes
                };
                if (itemInfoVM.ItemInfoId > 0)
                {
                    // make sure this actually belongs to this here creature
                    var existingItemInfo = creature.ItemInformation.FirstOrDefault(ii => ii.Id == itemInfoVM.ItemInfoId);
                    if (existingItemInfo != null)
                    {
                        dbContext.Entry(existingItemInfo).State = EntityState.Detached;
                        itemInfo.Id = itemInfoVM.ItemInfoId;
                        dbContext.Attach(itemInfo);
                        dbContext.Entry(itemInfo).State = EntityState.Modified;
                    }
                }
                else
                {
                    creature.ItemInformation.Add(itemInfo);
                }
            }

            foreach (var weaponInfoFeatureChange in input.WeaponFeatureChanges)
            {
                var weaponInfo = creature.WeaponInformation.FirstOrDefault(si => si.Id == weaponInfoFeatureChange.WeaponInfoId);
                if (weaponInfo == null)
                {
                    continue;
                }

                foreach (var featureInfoVM in weaponInfoFeatureChange.NewFeatures)
                {
                    var featureInfo = featureInfoVM.ToDomainModel();
                    featureInfo.Feature = null;
                    weaponInfo.FeaturesApplied.Add(featureInfo);
                }
                weaponInfo.FeaturesApplied.RemoveAll(fi => weaponInfoFeatureChange.DeletedFeatureInfoIds.Contains(fi.Id));
            }

            foreach (var weaponInfoVM in input.NewWeaponInformation)
            {
                WeaponInfo weaponInfo = new WeaponInfo
                {
                    WeaponId = weaponInfoVM.Weapon.EquipmentId,
                    Notes    = weaponInfoVM.Notes
                };
                if (weaponInfoVM.WeaponInfoId > 0)
                {
                    // make sure this actually belongs to this here creature
                    var existingWeaponInfo = creature.ItemInformation.FirstOrDefault(ii => ii.Id == weaponInfoVM.WeaponInfoId);
                    if (existingWeaponInfo != null)
                    {
                        dbContext.Entry(existingWeaponInfo).State = EntityState.Detached;
                        weaponInfo.Id = weaponInfoVM.WeaponInfoId;
                        dbContext.Attach(weaponInfo);
                        dbContext.Entry(weaponInfo).State = EntityState.Modified;
                    }
                }
                else
                {
                    foreach (var featureInfoVM in weaponInfoVM.FeaturesApplied)
                    {
                        var featureInfo = featureInfoVM.ToDomainModel();
                        featureInfo.Feature = null;
                        weaponInfo.FeaturesApplied.Add(featureInfo);
                    }
                    creature.WeaponInformation.Add(weaponInfo);
                }
            }

            foreach (var armorInfoVM in input.NewArmorInformation)
            {
                ArmorInfo armorInfo = new ArmorInfo
                {
                    ArmorId = armorInfoVM.Armor.EquipmentId,
                    Notes   = armorInfoVM.Notes
                };
                if (armorInfoVM.ArmorInfoId > 0)
                {
                    // make sure this actually belongs to this here creature
                    var existingWeaponInfo = creature.ArmorInformation.FirstOrDefault(ii => ii.Id == armorInfoVM.ArmorInfoId);
                    if (existingWeaponInfo != null)
                    {
                        dbContext.Entry(existingWeaponInfo).State = EntityState.Detached;
                        armorInfo.Id = armorInfoVM.ArmorInfoId;
                        dbContext.Attach(armorInfo);
                        dbContext.Entry(armorInfo).State = EntityState.Modified;
                    }
                }
                else
                {
                    creature.ArmorInformation.Add(armorInfo);
                }
            }


            foreach (var flawInfoVM in input.NewFlawInformation)
            {
                FlawInfo flawInfo = new FlawInfo
                {
                    FlawId = flawInfoVM.Flaw.FlawId,
                    Notes  = flawInfoVM.Notes
                };
                if (flawInfoVM.FlawInfoId > 0)
                {
                    // make sure this actually belongs to this here creature
                    var existingFlawInfo = creature.FlawInformation.FirstOrDefault(fi => fi.Id == flawInfoVM.FlawInfoId);
                    if (existingFlawInfo != null)
                    {
                        dbContext.Entry(existingFlawInfo).State = EntityState.Detached;
                        flawInfo.Id = flawInfoVM.FlawInfoId;
                        dbContext.Attach(flawInfo);
                        dbContext.Entry(flawInfo).State = EntityState.Modified;
                    }
                }
                else
                {
                    creature.FlawInformation.Add(flawInfo);
                }
            }

            foreach (var spellInfoFeatureChange in input.SpellFeatureChanges)
            {
                var spellInfo = creature.SpellInformation.FirstOrDefault(si => si.Id == spellInfoFeatureChange.SpellInfoId);
                if (spellInfo == null)
                {
                    continue;
                }

                foreach (var featureInfoVM in spellInfoFeatureChange.NewFeatures)
                {
                    var featureInfo = featureInfoVM.ToDomainModel();
                    featureInfo.Feature = null;
                    spellInfo.FeaturesApplied.Add(featureInfo);
                }
                spellInfo.FeaturesApplied.RemoveAll(fi => spellInfoFeatureChange.DeletedFeatureInfoIds.Contains(fi.Id));
            }

            foreach (var spellInfoVM in input.NewSpellInformation)
            {
                SpellInfo spellInfo = new SpellInfo
                {
                    SpellId         = spellInfoVM.Spell.SpellId,
                    Notes           = spellInfoVM.Notes,
                    FeaturesApplied = new List <FeatureInfo>()
                };


                if (spellInfoVM.SpellInfoId > 0)
                {
                    var existingSpellInfo = creature.SpellInformation.FirstOrDefault(si => si.Id == spellInfoVM.SpellInfoId);
                    dbContext.Entry(existingSpellInfo).State = EntityState.Detached;
                    spellInfo.Id = existingSpellInfo.Id;
                    dbContext.Attach(spellInfo);

                    dbContext.Entry(spellInfo).State = EntityState.Modified;
                }
                else
                {
                    foreach (var featureInfoVM in spellInfoVM.FeaturesApplied)
                    {
                        var featureInfo = featureInfoVM.ToDomainModel();
                        featureInfo.Feature = null;
                        spellInfo.FeaturesApplied.Add(featureInfo);
                    }
                    creature.SpellInformation.Add(spellInfo);
                }
            }

            foreach (var statModVM in input.NewStatMods)
            {
                var statMod = statModVM.ToDomainModel();
                if (statModVM.StatModId > 0)
                {
                    var existingStatMod = creature.BaseStats.SingleOrDefault(sm => sm.Id == statModVM.StatModId);
                    if (existingStatMod != null) // make sure this stat belongs to this creature
                    {
                        dbContext.Entry(existingStatMod).State = EntityState.Detached;

                        statMod.Id = statModVM.StatModId;
                        dbContext.Attach(statMod);
                        dbContext.Entry(statMod).State = EntityState.Modified;
                    }
                }
                else
                {
                    statMod.Id = 0;
                    creature.BaseStats.Add(statMod);
                }
            }

            foreach (var skillVM in input.NewSkills)
            {
                var skill = new Skill
                {
                    Name       = skillVM.Name,
                    Ranks      = skillVM.Ranks,
                    BelongsTo  = skillVM.BelongsTo,
                    HasDefense = skillVM.HasDefense
                };

                if (skillVM.SkillId > 0)
                {
                    var existingSkill = creature.Skills.SingleOrDefault(s => s.Id == skillVM.SkillId);
                    if (existingSkill != null) //make sure this skill belongs to this creature
                    {
                        dbContext.Entry(existingSkill).State = EntityState.Detached;
                        skill.Id = skillVM.SkillId;
                        dbContext.Attach(skill);
                        dbContext.Entry(skill).State = EntityState.Modified;
                    }
                }
                else
                {
                    creature.Skills.Add(skill);
                }
            }

            creature.FlawInformation.RemoveAll(fi => input.DeletedFlawInformationIds.Contains(fi.Id));
            creature.OathInformation.RemoveAll(oi => input.DeletedOathInformationIds.Contains(oi.Id));
            creature.FeatureInformation.RemoveAll(fi => input.DeletedFeatureInformationIds.Contains(fi.Id));

            creature.WeaponInformation.RemoveAll(wi => input.DeletedWeaponInformationIds.Contains(wi.Id));
            creature.ArmorInformation.RemoveAll(ai => input.DeletedArmorInformationIds.Contains(ai.Id));
            creature.ItemInformation.RemoveAll(ii => input.DeletedArmorInformationIds.Contains(ii.Id));

            creature.SpellInformation.RemoveAll(si => input.DeletedSpellInfoIds.Contains(si.Id));
            creature.Skills.RemoveAll(s => input.DeletedSkillIds.Contains(s.Id));
            creature.BaseStats.RemoveAll(sm => input.DeletedStatModIds.Contains(sm.Id));

            await dbContext.SaveChangesAsync();

            return(creature.Id);
        }