/// <summary>
        /// Creates the specified answer set.
        /// </summary>
        /// <param name="answerSet">The answer set.</param>
        /// <returns></returns>
        public async Task <ScaleAnswerSet> Create(ScaleAnswerSet answerSet)
        {
            answerSet.Type = AnswerSetType.Scale;

            scaleAnswerSetRepository.Insert(answerSet);

            await unitOfWork.SaveAsync();

            return(answerSet);
        }
        /// <summary>
        /// Updates the specified answer set.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="scaleAnswerSetId">The scale answer set identifier.</param>
        /// <param name="answerSet">The answer set.</param>
        /// <returns></returns>
        public async Task <UpdateScaleAnswerSetStatus> Update(int customerId, Guid scaleAnswerSetId, ScaleAnswerSet answerSet)
        {
            var dbEntity = await Get(customerId, scaleAnswerSetId);

            if (dbEntity == null)
            {
                return(UpdateScaleAnswerSetStatus.NotFound);
            }

            dbEntity.CustomerId = answerSet.CustomerId;
            dbEntity.Tags.RemoveRange(dbEntity.Tags.ToList());
            dbEntity.Tags.AddRange(answerSet.Tags.ToList());

            dbEntity.Name      = answerSet.Name;
            dbEntity.HighValue = answerSet.HighValue;
            dbEntity.LowValue  = answerSet.LowValue;

            var lowLabel  = answerSet.LowLabelScaleAnswerSetStrings.First();
            var midLabel  = answerSet.MidLabelScaleAnswerSetStrings.FirstOrDefault();
            var highLabel = answerSet.HighLabelScaleAnswerSetStrings.First();

            var dbLowLabel = dbEntity.LowLabelScaleAnswerSetStrings.FirstOrDefault(
                l => l.Language == lowLabel.Language);
            var dbHighLabel = dbEntity.HighLabelScaleAnswerSetStrings.FirstOrDefault(
                l => l.Language == highLabel.Language);

            UpdateScaleAnswerSetStatus status = 0;

            if (dbLowLabel == null)
            {
                status = status | UpdateScaleAnswerSetStatus.LowLabelLanguageNotMatch;
            }
            if (dbHighLabel == null)
            {
                status = status | UpdateScaleAnswerSetStatus.HighLabelLanguageNotMatch;
            }

            if (status > 0)
            {
                return(status);
            }

            if (midLabel != null)
            {
                var dbMidLabel = dbEntity.MidLabelScaleAnswerSetStrings
                                 .FirstOrDefault(l => l.Language == midLabel.Language);

                if (dbMidLabel == null)
                {
                    dbMidLabel = new MidLabelScaleAnswerSetString();
                    UpdateLabelFields(midLabel, dbMidLabel);
                    dbEntity.MidLabelScaleAnswerSetStrings.Add(dbMidLabel);
                }
                else
                {
                    UpdateLabelFields(midLabel, dbMidLabel);
                }
            }

            UpdateLabelFields(lowLabel, dbLowLabel);
            UpdateLabelFields(highLabel, dbHighLabel);

            scaleAnswerSetRepository.Update(dbEntity);
            await unitOfWork.SaveAsync();

            return(UpdateScaleAnswerSetStatus.Success);
        }