public async Task <ActiveStatsModifier> AddModifierAsync(NaheulbookExecutionContext executionContext, int monsterId, ActiveStatsModifier statsModifier)
        {
            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var monster = await uow.Monsters.GetAsync(monsterId);

                if (monster == null)
                {
                    throw new MonsterNotFoundException(monsterId);
                }

                var group = await uow.Groups.GetAsync(monster.GroupId);

                if (group == null)
                {
                    throw new GroupNotFoundException(monster.GroupId);
                }

                _authorizationUtil.EnsureIsGroupOwner(executionContext, group);

                var modifiers = _jsonUtil.Deserialize <List <ActiveStatsModifier> >(monster.Modifiers) ?? new List <ActiveStatsModifier>();
                _activeStatsModifierUtil.AddModifier(modifiers, statsModifier);
                monster.Modifiers = _jsonUtil.Serialize(modifiers);

                await uow.SaveChangesAsync();

                var notificationSession = _notificationSessionFactory.CreateSession();
                notificationSession.NotifyMonsterAddModifier(monster.Id, statsModifier);
                await notificationSession.CommitAsync();

                return(statsModifier);
            }
        }