Beispiel #1
0
        //public Result<PhraseDto> New(object criteria)
        //{
        //  //throw new NotImplementedException("Ef.PhraseDal.New(object)");
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {

        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.CreateFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Fetch(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == id
        //                    select phraseData;

        //      if (results.Count() == 1)
        //        retResult = Result<PhraseDto>.Success(EfHelper.ToDto(results.First()));
        //      else
        //      {
        //        if (results.Count() == 0)
        //          retResult = Result<PhraseDto>.FailureWithInfo(null,
        //            new Exceptions.FetchFailedException(DalResources.ErrorMsgIdNotFound));
        //        else
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Update(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == dto.Id
        //                    select phraseData;

        //      if (results.Count() == 1)
        //      {
        //        var phraseDataToUpdate = results.First();
        //        ctx.ObjectContext.PhraseDatas.DeleteObject(phraseDataToUpdate);
        //        var newPhraseData = EfHelper.ToData(dto);
        //        ctx.ObjectContext.PhraseDatas.AddObject(newPhraseData);
        //        ctx.ObjectContext.SaveChanges();
        //        dto.Id = newPhraseData.Id;
        //        retResult = Result<PhraseDto>.Success(dto);
        //      }
        //      else
        //      {
        //        if (results.Count() == 0)
        //          retResult = Result<PhraseDto>.FailureWithInfo(null,
        //            new Exceptions.UpdateFailedException(DalResources.ErrorMsgIdNotFound));
        //        else
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.UpdateFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.UpdateFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Insert(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == dto.Id
        //                    select phraseData;

        //      //SHOULD FIND ZERO LANGUAGEDTOS (NO DUPLICATE IDS, NO DUPLICATE DTOS)
        //      if (results.Count() == 0)
        //      {
        //        var data = EfHelper.ToData(dto);
        //        ctx.ObjectContext.PhraseDatas.AddObject(data);
        //        ctx.ObjectContext.SaveChanges();
        //        dto.Id = data.Id;
        //        retResult = Result<PhraseDto>.Success(dto);
        //      }
        //      else
        //      {
        //        if (results.Count() == 1) //ID ALREADY EXISTS
        //          retResult = Result<PhraseDto>.FailureWithInfo(dto,
        //            new Exceptions.InsertFailedException(DalResources.ErrorMsgIdNotFound));
        //        else                      //MULTIPLE IDS ALREADY EXIST?? SHOULD NOT BE POSSIBLE
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.InsertFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.InsertFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Delete(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == id
        //                    select phraseData;

        //      if (results.Count() == 1)
        //      {
        //        var phraseDataToRemove = results.First();
        //        ctx.ObjectContext.PhraseDatas.DeleteObject((phraseDataToRemove));
        //        ctx.ObjectContext.SaveChanges();
        //        retResult = Result<PhraseDto>.Success(EfHelper.ToDto(phraseDataToRemove));
        //      }
        //      else
        //      {
        //        if (results.Count() == 0)
        //          retResult = Result<PhraseDto>.FailureWithInfo(null,
        //            new Exceptions.DeleteFailedException(DalResources.ErrorMsgIdNotFound));
        //        else
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.DeleteFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.DeleteFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<ICollection<PhraseDto>> GetAll()
        //{
        //  var retAllPhraseDtos = new List<PhraseDto>();
        //  using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //  {
        //    var allPhraseDatas = from phraseData in ctx.ObjectContext.PhraseDatas
        //                         select phraseData;
        //    foreach (var phraseData in allPhraseDatas)
        //    {
        //      var phraseDto = EfHelper.ToDto(phraseData);
        //      retAllPhraseDtos.Add(phraseDto);
        //    }
        //    //var allDtos = new List<PhraseDto>(ctx.ObjectContext.PhraseDatas);
        //    return retAllPhraseDtos;
        //  }
        //}
        protected override PhraseDto NewImpl(object criteria)
        {
            var    identity        = (UserIdentity)Csla.ApplicationContext.User.Identity;
            string currentUsername = identity.Name;
            Guid   currentUserId   = Guid.Empty;

            using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
            {
                currentUserId = (from user in ctx.ObjectContext.UserDatas
                                 where user.Username == currentUsername
                                 select user.Id).First();
            }
            //if ((criteria != null) && !(criteria is UserDto))
            //  throw new Exceptions.BadCriteriaException(DalResources.ErrorMsgBadCriteriaExceptionDetail_ExpectedTypeIsUserDto);

            PhraseDto newPhraseDto = new PhraseDto()
            {
                Id         = Guid.NewGuid(),
                Text       = DalResources.DefaultNewPhraseText,
                LanguageId = GetDefaultLanguageId(),
                UserId     = currentUserId,
                Username   = currentUsername
            };

            return(newPhraseDto);
        }
Beispiel #2
0
        protected override PhraseDto InsertImpl(PhraseDto dto)
        {
            var        currentUserId = Business.BusinessHelper.GetCurrentUserId();
            PhraseData phraseData    = null;

            using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
            {
                //BEFORE INSERTING, WE NEED TO MAKE SURE THAT THE PHRASE.TEXT
                //AND PHRASE.LANGUAGE.TEXT ARE NOT ALREADY IN THE DB.  IF SO, WE NEED
                //TO CALL AN UPDATE INSTEAD OF INSERT

                var results = (from data in ctx.ObjectContext.PhraseDatas
                               where data.Text == dto.Text &&
                               data.LanguageData.Id == dto.LanguageId &&
                               data.UserDataId == currentUserId
                               select data).FirstOrDefault();
                if (results != null)
                {
                    //ALREADY EXISTS IN DB.  NEED TO PERFORM AN UPDATE
                    dto.Id = results.Id;

                    //hack: would be faster to effectively duplicate UpdateImpl code here instead of calling UpdateImpl(). (refactor and reshape code).  Would be cleaner as well, I think.
                    return(UpdateImpl(dto));
                }
                else
                {
                    //NO PHRASE EXISTS IN THE DB, SO PERFORM THE INSERT, SAVE CHANGES AND RETURN
                    phraseData = EfHelper.AddToContext(dto, ctx.ObjectContext);
                    ctx.ObjectContext.SaveChanges();
                    dto.Id = phraseData.Id;
                    return(dto);
                }
            }
        }
Beispiel #3
0
        protected override PhraseDto UpdateImpl(PhraseDto dto)
        {
            var currentUserId = MockHelper.GetCurrentUserId();

            var results = from item in SeedData.Ton.Phrases
                          where item.Id == dto.Id &&
                          item.UserId == currentUserId
                          select item;

            if (results.Count() == 1)
            {
                CheckContraints(dto);

                var phraseToUpdate = results.First();
                SeedData.Ton.Phrases.Remove(phraseToUpdate);
                dto.Id = Guid.NewGuid();
                SeedData.Ton.Phrases.Add(dto);
                UpdateReferences(phraseToUpdate, dto);
                return(dto);
            }
            else
            {
                if (results.Count() == 0)
                {
                    throw new Exceptions.IdNotFoundException(dto.Id);
                }
                else
                {
                    throw new Exceptions.VeryBadException();
                }
            }
        }
        public void InsertPhrase(PhraseDto phrase)
        {
            var mappedPhrase = Mapper.Map <PhraseDto, Phrase>(phrase);

            unitOfWork.GetGenericPhraseRepository().Insert(mappedPhrase);
            unitOfWork.Save();
        }
Beispiel #5
0
        //public Result<PhraseDto> New(object criteria)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var dto = new PhraseDto()
        //    {
        //      Id = Guid.NewGuid(),
        //      LanguageId = SeedData.Ton.DefaultLanguageId
        //    };
        //    retResult = Result<PhraseDto>.Success(dto);
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Fetch(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == id
        //                  select item;

        //    if (results.Count() == 1)
        //      retResult = Result<PhraseDto>.Success(results.First());
        //    else
        //    {
        //      if (results.Count() == 0)
        //        retResult = Result<PhraseDto>.FailureWithInfo(null,
        //          new Exceptions.FetchFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Update(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == dto.Id
        //                  select item;

        //    if (results.Count() == 1)
        //    {
        //      var PhraseToUpdate = results.First();
        //      SeedData.Ton.Phrases.Remove(PhraseToUpdate);
        //      dto.Id = Guid.NewGuid();
        //      SeedData.Ton.Phrases.Add(dto);
        //      retResult = Result<PhraseDto>.Success(dto);
        //    }
        //    else
        //    {
        //      if (results.Count() == 0)
        //        retResult = Result<PhraseDto>.FailureWithInfo(null,
        //          new Exceptions.UpdateFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Insert(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == dto.Id
        //                  select item;

        //    if (results.Count() == 0)
        //    {
        //      dto.Id = Guid.NewGuid();
        //      //MIMIC LANGUAGEID REQUIRED CONSTRAINT IN DB
        //      if (dto.LanguageId == Guid.Empty || !SeedData.Ton.ContainsLanguageId(dto.LanguageId))
        //      {
        //        //I'VE RESTRUCTURED HOW TO DO EXCEPTIONHANDLING, SO THIS IS NOT QUITE HOW IT SHOULD BE DONE.
        //        //THIS SHOULD BE AN INSERTIMPL METHOD, AND IT SHOULD THROW ITS OWN EXCEPTION THAT IS WRAPPED IN THE
        //        //PHRASEDALBASE CLASS IN AN INSERTFAILEDEXCEPTION.
        //        throw new Exceptions.InsertFailedException(string.Format(DalResources.ErrorMsgIdNotFoundException, dto.LanguageId));
        //      }
        //      SeedData.Ton.Phrases.Add(dto);
        //      retResult = Result<PhraseDto>.Success(dto);
        //    }
        //    else
        //    {
        //      if (results.Count() == 1) //ID ALREADY EXISTS
        //        retResult = Result<PhraseDto>.FailureWithInfo(dto,
        //          new Exceptions.UpdateFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else                      //MULTIPLE IDS ALREADY EXIST??
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Delete(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == id
        //                  select item;

        //    if (results.Count() == 1)
        //    {
        //      var PhraseToRemove = results.First();
        //      SeedData.Ton.Phrases.Remove(PhraseToRemove);
        //      retResult = Result<PhraseDto>.Success(PhraseToRemove);
        //    }
        //    else
        //    {
        //      if (results.Count() == 0)
        //        retResult = Result<PhraseDto>.FailureWithInfo(null,
        //          new Exceptions.DeleteFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.DeleteFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public LearnLanguages.Result<ICollection<PhraseDto>> GetAll()
        //{
        //  Result<ICollection<PhraseDto>> retResult = Result<ICollection<PhraseDto>>.Undefined(null);
        //  try
        //  {
        //    var allDtos = new List<PhraseDto>(SeedData.Ton.Phrases);
        //    retResult = Result<ICollection<PhraseDto>>.Success(allDtos);
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<ICollection<PhraseDto>>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}

        protected override PhraseDto NewImpl(object criteria)
        {
            //to get to this point, we must have already been authenticated
            Debug.Assert(Csla.ApplicationContext.User.Identity.IsAuthenticated);
            //if (!Csla.ApplicationContext.User.Identity.IsAuthenticated)
            //  throw new Common.Exceptions.UserNotAuthenticatedException();

            var languageId = SeedData.Ton.DefaultLanguageId;

            if (criteria is string)
            {
                //IF WE HAVE A STRING PARAM, THEN IT IS LANGUAGETEXT, SO GET THE LANGUAGE ID FROM THAT
                var languageText    = (string)criteria;
                var languageResults = (from language in SeedData.Ton.Languages
                                       where language.Text == languageText
                                       select language);
                if (languageResults.Count() == 1)
                {
                    var languageDto = languageResults.First();
                    languageId = languageDto.Id;
                }
                else if (languageResults.Count() == 0)
                {
                    throw new Exceptions.LanguageTextNotFoundException(languageText);
                }
                else
                {
                    throw new Exceptions.VeryBadException();
                }
            }

            var username = Csla.ApplicationContext.User.Identity.Name;
            var userId   = (from u in SeedData.Ton.Users
                            where u.Username == username
                            select u.Id).FirstOrDefault();

            if (userId == Guid.Empty)
            {
                throw new Exceptions.UserNotAuthorizedException();
            }


            var dto = new PhraseDto()
            {
                Id         = Guid.NewGuid(),
                LanguageId = languageId,
                UserId     = userId,
                Username   = username
            };

            return(dto);
        }
Beispiel #6
0
        public async Task <ServiceResult <PhraseDto> > CreatePhraseAsync(PhraseDto phrase)
        {
            if (string.IsNullOrWhiteSpace(phrase.FromText) || phrase.LanguageFromId < 1 || phrase.LanguageToId < 1)
            {
                return(ResultFromValidationError <PhraseDto>("Please verify phrase data"));
            }

            var addedPhrase = await UnitOfWork
                              .PhraseRepository
                              .AddAsync(_mapper.Map <Phrase>(phrase));

            return(ResultFromSuccess(_mapper.Map <PhraseDto>(addedPhrase)));
        }
        /// <summary>
        /// Adds the phraseDto to the context, loading UserData and LanguageData into the newly
        /// created PhraseData.  Does NOT save changes to the context.
        /// </summary>
        public static PhraseData AddToContext(PhraseDto dto, LearnLanguagesContext context)
        {
            //only creates, does not add to phrasedatas
              //var beforeCount = context.PhraseDatas.Count();
              var newPhraseData = context.PhraseDatas.CreateObject();
              //var afterCount = context.PhraseDatas.Count();

              //assign properties
              newPhraseData.Text = dto.Text;
              newPhraseData.LanguageDataId = dto.LanguageId;
              newPhraseData.UserDataId = dto.UserId;

              context.PhraseDatas.AddObject(newPhraseData);

              return newPhraseData;
        }
Beispiel #8
0
        private PhraseDto PreparePhraseToAdd(int dictionaryId, List <WordDto> verifiedWordList, string delimiter)
        {
            var sentence      = verifiedWordList.Select(i => i.WordName).Aggregate((i, j) => i + delimiter + j);
            var listOfWordsId = this.aWordService.GetIdOfWords(verifiedWordList);

            var aPhrase = new PhraseDto
            {
                PhraseText           = sentence,
                CreationTime         = DateTime.Now,
                WordsIds             = string.Join(",", listOfWordsId),
                AssignedDictionaryId = dictionaryId,
                UserName             = "******"
            };

            return(aPhrase);
        }
Beispiel #9
0
        //public static UserData ToData(UserDto dto, bool includeForeignEntities = true)
        //{
        //  var retUserData = new UserData()
        //  {
        //    Id = dto.Id,
        //    Username = dto.Username,
        //    Salt = dto.Salt,
        //    SaltedHashedPasswordValue = dto.SaltedHashedPasswordValue
        //  };

        //  if (includeForeignEntities)
        //  {
        //    using (var dalManager = DalFactory.GetDalManager())
        //    {
        //      //USER PHRASES
        //      var phraseDal = dalManager.GetProvider<IPhraseDal>();
        //      foreach (var phraseId in dto.PhraseIds)
        //      {
        //        var result = phraseDal.Fetch(phraseId);
        //        if (!result.IsSuccess || result.IsError)
        //          throw new Exceptions.FetchFailedException(result.Msg);

        //        //var phraseData = ToData(result.Obj);
        //        //retUserData.PhraseDatas.Add(phraseData);
        //        var phraseData = EfHelper.AddToContext(result.Obj, retUserData.
        //      }

        //      //USER ROLES
        //      var customIdentityDal = dalManager.GetProvider<IUserIdentityDal>();
        //      foreach (var roleId in dto.RoleIds)
        //      {
        //        var result = customIdentityDal.GetRoles(dto.Username);
        //        if (!result.IsSuccess || result.IsError)
        //          throw new Exceptions.FetchFailedException(result.Msg);

        //        var roleDtos = result.Obj;
        //        foreach (var roleDto in roleDtos)
        //        {
        //          RoleData roleData = new RoleData()
        //          {
        //            Id = roleDto.Id,
        //            Text = roleDto.Text
        //          };
        //          retUserData.RoleDatas.Add(roleData);
        //        }
        //      }
        //    }
        //  }

        //  return retUserData;
        //}

        #region AddToContext

        /// <summary>
        /// Adds the phraseDto to the context, loading UserData and LanguageData into the newly
        /// created PhraseData.  Does NOT save changes to the context.
        /// </summary>
        public static PhraseData AddToContext(PhraseDto dto, LearnLanguagesContext context)
        {
            //only creates, does not add to phrasedatas
            //var beforeCount = context.PhraseDatas.Count();
            var newPhraseData = context.PhraseDatas.CreateObject();

            //var afterCount = context.PhraseDatas.Count();

            //assign properties
            newPhraseData.Text           = dto.Text;
            newPhraseData.LanguageDataId = dto.LanguageId;
            newPhraseData.UserDataId     = dto.UserId;

            context.PhraseDatas.AddObject(newPhraseData);

            return(newPhraseData);
        }
Beispiel #10
0
 private void CheckContraints(PhraseDto dto)
 {
     //REFERENTIAL INTEGRITY
     if (dto.LanguageId == Guid.Empty || !SeedData.Ton.ContainsLanguageId(dto.LanguageId))
     {
         throw new Exceptions.IdNotFoundException(dto.LanguageId);
     }
     if (dto.UserId == Guid.Empty || !SeedData.Ton.ContainsUserId(dto.UserId))
     {
         throw new Exceptions.IdNotFoundException(dto.UserId);
     }
     if (string.IsNullOrEmpty(dto.Username) ||
         !(SeedData.Ton.GetUsername(dto.UserId) == dto.Username))
     {
         throw new ArgumentException("dto.Username");
     }
 }
Beispiel #11
0
        /// <summary>
        /// Loads the information from the dto into the data object. Except...
        /// Does NOT load dto.Id.
        /// </summary>
        /// <param name="data"></param>
        /// <param name="dto"></param>
        public static void LoadDataFromDto(ref PhraseData data,
                                           PhraseDto dto,
                                           LearnLanguagesContext context)
        {
            //USER INFO
            data.UserDataId = dto.UserId;
            data.UserData   = EfHelper.GetUserData(dto.UserId, context);

            //LANGUAGE INFO
            data.LanguageDataId = dto.LanguageId;
            data.LanguageData   = EfHelper.GetLanguageData(dto.LanguageId, context);

            //TEXT
            data.Text = dto.Text;

            //TRANSLATIONDATAS
            data.TranslationDatas.Load();
        }
Beispiel #12
0
        //{
        //  var phraseDtos = new List<PhraseDto>();
        //  foreach (var id in ids)
        //  {
        //    phraseDtos.Add(FetchImpl(id));
        //  }
        //  return phraseDtos;
        //}
        protected override PhraseDto UpdateImpl(PhraseDto dto)
        {
            var currentUserId = Business.BusinessHelper.GetCurrentUserId();

            using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
            {
                var results = from phraseData in ctx.ObjectContext.PhraseDatas
                              where phraseData.Id == dto.Id &&
                              phraseData.UserDataId == currentUserId
                              select phraseData;

                if (results.Count() == 1)
                {
                    var phraseData = results.First();
                    EfHelper.LoadDataFromDto(ref phraseData, dto, ctx.ObjectContext);

                    ctx.ObjectContext.SaveChanges();

                    var updatedDto = EfHelper.ToDto(phraseData);
                    return(updatedDto);
                }
                else
                {
                    if (results.Count() == 0)
                    {
                        throw new Exceptions.IdNotFoundException(dto.Id);
                    }
                    else
                    {
                        //results.count is not one or zero.  either it's negative, which would be framework absurd, or its more than one,
                        //which means that we have multiple phrases with the same id.  this is very bad.
                        var errorMsg = string.Format(DalResources.ErrorMsgVeryBadException,
                                                     DalResources.ErrorMsgVeryBadExceptionDetail_ResultCountNotOneOrZero);
                        throw new Exceptions.VeryBadException(errorMsg);
                    }
                }
            }
        }
Beispiel #13
0
        protected override PhraseDto InsertImpl(PhraseDto dto)
        {
            var currentUserId = MockHelper.GetCurrentUserId();

            var results = from item in SeedData.Ton.Phrases
                          where item.Id == dto.Id
                          select item;

            if (results.Count() == 0)
            {
                CheckContraints(dto);

                dto.Id = Guid.NewGuid();
                SeedData.Ton.Phrases.Add(dto);

                //ADD PHRASE.ID TO USER
                var resultsUser = from u in SeedData.Ton.Users
                                  where u.Id == dto.UserId
                                  select u;

                var user = resultsUser.First();
                user.PhraseIds.Add(dto.Id);

                return(dto);
            }
            else
            {
                if (results.Count() == 1) //ID ALREADY EXISTS
                {
                    throw new Exceptions.IdAlreadyExistsException(dto.Id);
                }
                else              //MULTIPLE IDS ALREADY EXIST??
                {
                    throw new Exceptions.VeryBadException();
                }
            }
        }
Beispiel #14
0
        private void UpdateReferences(PhraseDto oldPhrase, PhraseDto newPhrase)
        {
            //UPDATE USERS WHO REFERENCE THIS PHRASE
            var referencedUsers = from u in SeedData.Ton.Users
                                  where u.PhraseIds.Contains(oldPhrase.Id)
                                  select u;

            foreach (var user in referencedUsers)
            {
                user.PhraseIds.Remove(oldPhrase.Id);
                user.PhraseIds.Add(newPhrase.Id);
            }

            //UPDATE TRANSLATIONS WHO REFERENCE THIS PHRASE
            var referencedTranslations = from t in SeedData.Ton.Translations
                                         where t.PhraseIds.Contains(oldPhrase.Id)
                                         select t;

            foreach (var translation in referencedTranslations)
            {
                translation.PhraseIds.Remove(oldPhrase.Id);
                translation.PhraseIds.Add(newPhrase.Id);
            }
        }
        protected override PhraseDto UpdateImpl(PhraseDto dto)
        {
            var currentUserId = ((CustomIdentity)(Csla.ApplicationContext.User.Identity)).UserId;

              using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
              {
            var results = from phraseData in ctx.ObjectContext.PhraseDatas
                      where phraseData.Id == dto.Id &&
                            phraseData.UserDataId == currentUserId
                      select phraseData;

            if (results.Count() == 1)
            {
              var phraseData = results.First();
              EfHelper.LoadDataFromDto(ref phraseData, dto, ctx.ObjectContext);

              ctx.ObjectContext.SaveChanges();

              var updatedDto = EfHelper.ToDto(phraseData);
              return updatedDto;
            }
            else
            {
              if (results.Count() == 0)
            throw new Exceptions.IdNotFoundException(dto.Id);
              else
              {
            //results.count is not one or zero.  either it's negative, which would be framework absurd, or its more than one,
            //which means that we have multiple phrases with the same id.  this is very bad.
            var errorMsg = string.Format(DalResources.ErrorMsgVeryBadException,
                                         DalResources.ErrorMsgVeryBadExceptionDetail_ResultCountNotOneOrZero);
            throw new Exceptions.VeryBadException(errorMsg);
              }
            }
              }
        }
        //public Result<PhraseDto> New(object criteria)
        //{
        //  //throw new NotImplementedException("Ef.PhraseDal.New(object)");
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.CreateFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Fetch(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == id
        //                    select phraseData;
        //      if (results.Count() == 1)
        //        retResult = Result<PhraseDto>.Success(EfHelper.ToDto(results.First()));
        //      else
        //      {
        //        if (results.Count() == 0)
        //          retResult = Result<PhraseDto>.FailureWithInfo(null,
        //            new Exceptions.FetchFailedException(DalResources.ErrorMsgIdNotFound));
        //        else
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Update(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == dto.Id
        //                    select phraseData;
        //      if (results.Count() == 1)
        //      {
        //        var phraseDataToUpdate = results.First();
        //        ctx.ObjectContext.PhraseDatas.DeleteObject(phraseDataToUpdate);
        //        var newPhraseData = EfHelper.ToData(dto);
        //        ctx.ObjectContext.PhraseDatas.AddObject(newPhraseData);
        //        ctx.ObjectContext.SaveChanges();
        //        dto.Id = newPhraseData.Id;
        //        retResult = Result<PhraseDto>.Success(dto);
        //      }
        //      else
        //      {
        //        if (results.Count() == 0)
        //          retResult = Result<PhraseDto>.FailureWithInfo(null,
        //            new Exceptions.UpdateFailedException(DalResources.ErrorMsgIdNotFound));
        //        else
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.UpdateFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.UpdateFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Insert(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == dto.Id
        //                    select phraseData;
        //      //SHOULD FIND ZERO LANGUAGEDTOS (NO DUPLICATE IDS, NO DUPLICATE DTOS)
        //      if (results.Count() == 0)
        //      {
        //        var data = EfHelper.ToData(dto);
        //        ctx.ObjectContext.PhraseDatas.AddObject(data);
        //        ctx.ObjectContext.SaveChanges();
        //        dto.Id = data.Id;
        //        retResult = Result<PhraseDto>.Success(dto);
        //      }
        //      else
        //      {
        //        if (results.Count() == 1) //ID ALREADY EXISTS
        //          retResult = Result<PhraseDto>.FailureWithInfo(dto,
        //            new Exceptions.InsertFailedException(DalResources.ErrorMsgIdNotFound));
        //        else                      //MULTIPLE IDS ALREADY EXIST?? SHOULD NOT BE POSSIBLE
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.InsertFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.InsertFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Delete(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //    {
        //      var results = from phraseData in ctx.ObjectContext.PhraseDatas
        //                    where phraseData.Id == id
        //                    select phraseData;
        //      if (results.Count() == 1)
        //      {
        //        var phraseDataToRemove = results.First();
        //        ctx.ObjectContext.PhraseDatas.DeleteObject((phraseDataToRemove));
        //        ctx.ObjectContext.SaveChanges();
        //        retResult = Result<PhraseDto>.Success(EfHelper.ToDto(phraseDataToRemove));
        //      }
        //      else
        //      {
        //        if (results.Count() == 0)
        //          retResult = Result<PhraseDto>.FailureWithInfo(null,
        //            new Exceptions.DeleteFailedException(DalResources.ErrorMsgIdNotFound));
        //        else
        //          retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.DeleteFailedException());
        //      }
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.DeleteFailedException(ex));
        //  }
        //  return retResult;
        //}
        //public Result<ICollection<PhraseDto>> GetAll()
        //{
        //  var retAllPhraseDtos = new List<PhraseDto>();
        //  using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
        //  {
        //    var allPhraseDatas = from phraseData in ctx.ObjectContext.PhraseDatas
        //                         select phraseData;
        //    foreach (var phraseData in allPhraseDatas)
        //    {
        //      var phraseDto = EfHelper.ToDto(phraseData);
        //      retAllPhraseDtos.Add(phraseDto);
        //    }
        //    //var allDtos = new List<PhraseDto>(ctx.ObjectContext.PhraseDatas);
        //    return retAllPhraseDtos;
        //  }
        //}
        protected override PhraseDto NewImpl(object criteria)
        {
            var identity = (CustomIdentity)Csla.ApplicationContext.User.Identity;
              string currentUsername = identity.Name;
              Guid currentUserId = Guid.Empty;
              using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
              {
            currentUserId = (from user in ctx.ObjectContext.UserDatas
                         where user.Username == currentUsername
                         select user.Id).First();
              }
              //if ((criteria != null) && !(criteria is UserDto))
              //  throw new Exceptions.BadCriteriaException(DalResources.ErrorMsgBadCriteriaExceptionDetail_ExpectedTypeIsUserDto);

              PhraseDto newPhraseDto = new PhraseDto()
              {
            Id = Guid.NewGuid(),
            Text = DalResources.DefaultNewPhraseText,
            LanguageId = GetDefaultLanguageId(),
            UserId = currentUserId,
            Username = currentUsername
              };

              return newPhraseDto;
        }
        protected override PhraseDto InsertImpl(PhraseDto dto)
        {
            var currentUserId = ((CustomIdentity)(Csla.ApplicationContext.User.Identity)).UserId;
              PhraseData phraseData = null;
              using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
              {
            //before inserting, we need to make sure that the phrase.text
            //and phrase.language.text are not already in the DB.  If so, we need
            //to call an update instead of insert

            var results = (from data in ctx.ObjectContext.PhraseDatas
                       where data.Text == dto.Text &&
                             data.LanguageData.Id == dto.LanguageId &&
                             data.UserDataId == currentUserId
                       select data).FirstOrDefault();
            if (results != null)
            {
              //ALREADY EXISTS IN DB.  NEED TO PERFORM AN UPDATE
              dto.Id = results.Id;

              //hack: would be faster to effectively duplicate UpdateImpl code here instead of calling UpdateImpl(). (refactor and reshape code).  Would be cleaner as well, I think.
              return UpdateImpl(dto);
            }
            else
            {
              //NO PHRASE EXISTS IN THE DB, SO PERFORM THE INSERT, SAVE CHANGES AND RETURN
              phraseData = EfHelper.AddToContext(dto, ctx.ObjectContext);
              ctx.ObjectContext.SaveChanges();
              dto.Id = phraseData.Id;
              return dto;
            }
              }
        }
Beispiel #18
0
 private static Phrase CreateModel(PhraseDto dto)
 {
     return(new Phrase(CreateModel(dto.SourceSegmentRange), dto.TargetSegmentCut, dto.Confidence));
 }
        protected override PhraseDto InsertImpl(PhraseDto dto)
        {
            var currentUserId = MockHelper.GetCurrentUserId();

              var results = from item in SeedData.Ton.Phrases
                    where item.Id == dto.Id
                    select item;

              if (results.Count() == 0)
              {
            CheckContraints(dto);

            dto.Id = Guid.NewGuid();
            SeedData.Ton.Phrases.Add(dto);

            //ADD PHRASE.ID TO USER
            var resultsUser = from u in SeedData.Ton.Users
                          where u.Id == dto.UserId
                          select u;

            var user = resultsUser.First();
            user.PhraseIds.Add(dto.Id);

            return dto;
              }
              else
              {
            if (results.Count() == 1) //ID ALREADY EXISTS
              throw new Exceptions.IdAlreadyExistsException(dto.Id);
            else                      //MULTIPLE IDS ALREADY EXIST??
              throw new Exceptions.VeryBadException();
              }
        }
Beispiel #20
0
    /// <summary>
    /// Loads the information from the dto into the data object. Except...
    /// Does NOT load dto.Id.
    /// </summary>
    /// <param name="data"></param>
    /// <param name="dto"></param>
    public static void LoadDataFromDto(ref PhraseData data,
                                       PhraseDto dto,
                                       LearnLanguagesContext context)
    {
      //USER INFO
      data.UserDataId = dto.UserId;
      data.UserData = EfHelper.GetUserData(dto.UserId, context);

      //LANGUAGE INFO
      data.LanguageDataId = dto.LanguageId;
      data.LanguageData = EfHelper.GetLanguageData(dto.LanguageId, context);

      //TEXT
      data.Text = dto.Text;

      //TRANSLATIONDATAS
      data.TranslationDatas.Load();
    }
 private void CheckContraints(PhraseDto dto)
 {
     //REFERENTIAL INTEGRITY
       if (dto.LanguageId == Guid.Empty || !SeedData.Ton.ContainsLanguageId(dto.LanguageId))
     throw new Exceptions.IdNotFoundException(dto.LanguageId);
       if (dto.UserId == Guid.Empty || !SeedData.Ton.ContainsUserId(dto.UserId))
     throw new Exceptions.IdNotFoundException(dto.UserId);
       if (string.IsNullOrEmpty(dto.Username) ||
      !(SeedData.Ton.GetUsername(dto.UserId) == dto.Username))
     throw new ArgumentException("dto.Username");
 }
        public async Task <HttpResponseMessage> AddPhrase(string listOfWords, int dictionaryId)
        {
            var          errorMessage           = new StringBuilder(string.Empty);
            var          listOfNotAcceptedWords = new List <string>();
            const string Delimiter = " ";

            if (listOfWords.Length == 0)
            {
                return(this.ControllerContext.Request.CreateResponse(
                           HttpStatusCode.BadRequest,
                           "Invalid parameters, Please check there is elements in array"));
            }

            var language         = this.aDictionaryService.GetADictionary(dictionaryId).DictionaryName;
            var wordList         = Json.Deserialize <List <WordDto> >(listOfWords);
            var verifiedWordList = WordFilterTool.GetListWithValidWordName(wordList);

            verifiedWordList.Select(c =>
            {
                c.CreationTime    = DateTime.Now;
                c.WordDescription = string.IsNullOrEmpty(c.WordDescription) ? "No description" : c.WordDescription;
                return(c);
            }).ToList();

            try
            {
                var listNoRepeatedElements = WordFilterTool.ListNoRepeatedElements(verifiedWordList);
                var pathToDictionary       = HttpContext.Current.Server.MapPath(string.Format("{0}{1}.txt", ConfigurationManager.AppSettings["Dictionary"], language));
                WordFilterTool.GetWordsNotAccepted(
                    listNoRepeatedElements,
                    language,
                    pathToDictionary,
                    out listOfNotAcceptedWords);

                foreach (var aWord in listNoRepeatedElements)
                {
                    aWord.Image = CheckUrlIsAValidImage(aWord);
                }

                await this.aWordService.BulkInsertOfWords(listNoRepeatedElements);

                if (verifiedWordList.Count == 1)
                {
                    return(this.ControllerContext.Request.CreateResponse(HttpStatusCode.OK));
                }

                var sentence      = verifiedWordList.Select(i => i.WordName).Aggregate((i, j) => i + Delimiter + j);
                var listOfWordsId = await this.aWordService.GetIdOfWords(verifiedWordList);

                var aPhrase = new PhraseDto
                {
                    PhraseText           = sentence,
                    CreationTime         = DateTime.Now,
                    WordsIds             = string.Join(",", listOfWordsId),
                    AssignedDictionaryId = dictionaryId,
                    UserName             = DotNetNuke.Entities.Users.UserController.GetCurrentUserInfo().Username
                };

                this.aGenericPhraseService.InsertPhrase(aPhrase);
                return(this.ControllerContext.Request.CreateResponse(HttpStatusCode.OK, wordList));
            }
            catch (DuplicateKeyException)
            {
                var listRepeatedWords = this.aWordService.GetRepeatedWords(verifiedWordList);
                errorMessage.Append(string.Format(
                                        "Cannot insert duplicate words: {0}",
                                        string.Join(",", listRepeatedWords)));
            }
            catch (FormatException)
            {
                foreach (var aWord in wordList)
                {
                    foreach (var notAcceptedWord in listOfNotAcceptedWords)
                    {
                        if (aWord.WordName == notAcceptedWord)
                        {
                            aWord.Repeated = true;
                        }
                    }
                }

                return(this.ControllerContext.Request.CreateResponse(HttpStatusCode.OK, wordList));
            }

            return(this.ControllerContext.Request.CreateResponse(HttpStatusCode.BadRequest, errorMessage.ToString()));
        }
        //public Result<PhraseDto> New(object criteria)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var dto = new PhraseDto()
        //    {
        //      Id = Guid.NewGuid(),
        //      LanguageId = SeedData.Ton.DefaultLanguageId
        //    };
        //    retResult = Result<PhraseDto>.Success(dto);
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Fetch(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == id
        //                  select item;
        //    if (results.Count() == 1)
        //      retResult = Result<PhraseDto>.Success(results.First());
        //    else
        //    {
        //      if (results.Count() == 0)
        //        retResult = Result<PhraseDto>.FailureWithInfo(null,
        //          new Exceptions.FetchFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Update(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == dto.Id
        //                  select item;
        //    if (results.Count() == 1)
        //    {
        //      var PhraseToUpdate = results.First();
        //      SeedData.Ton.Phrases.Remove(PhraseToUpdate);
        //      dto.Id = Guid.NewGuid();
        //      SeedData.Ton.Phrases.Add(dto);
        //      retResult = Result<PhraseDto>.Success(dto);
        //    }
        //    else
        //    {
        //      if (results.Count() == 0)
        //        retResult = Result<PhraseDto>.FailureWithInfo(null,
        //          new Exceptions.UpdateFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Insert(PhraseDto dto)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == dto.Id
        //                  select item;
        //    if (results.Count() == 0)
        //    {
        //      dto.Id = Guid.NewGuid();
        //      //MIMIC LANGUAGEID REQUIRED CONSTRAINT IN DB
        //      if (dto.LanguageId == Guid.Empty || !SeedData.Ton.ContainsLanguageId(dto.LanguageId))
        //      {
        //        //I'VE RESTRUCTURED HOW TO DO EXCEPTIONHANDLING, SO THIS IS NOT QUITE HOW IT SHOULD BE DONE.
        //        //THIS SHOULD BE AN INSERTIMPL METHOD, AND IT SHOULD THROW ITS OWN EXCEPTION THAT IS WRAPPED IN THE
        //        //PHRASEDALBASE CLASS IN AN INSERTFAILEDEXCEPTION.
        //        throw new Exceptions.InsertFailedException(string.Format(DalResources.ErrorMsgIdNotFoundException, dto.LanguageId));
        //      }
        //      SeedData.Ton.Phrases.Add(dto);
        //      retResult = Result<PhraseDto>.Success(dto);
        //    }
        //    else
        //    {
        //      if (results.Count() == 1) //ID ALREADY EXISTS
        //        retResult = Result<PhraseDto>.FailureWithInfo(dto,
        //          new Exceptions.UpdateFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else                      //MULTIPLE IDS ALREADY EXIST??
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.FetchFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public Result<PhraseDto> Delete(Guid id)
        //{
        //  Result<PhraseDto> retResult = Result<PhraseDto>.Undefined(null);
        //  try
        //  {
        //    var results = from item in SeedData.Ton.Phrases
        //                  where item.Id == id
        //                  select item;
        //    if (results.Count() == 1)
        //    {
        //      var PhraseToRemove = results.First();
        //      SeedData.Ton.Phrases.Remove(PhraseToRemove);
        //      retResult = Result<PhraseDto>.Success(PhraseToRemove);
        //    }
        //    else
        //    {
        //      if (results.Count() == 0)
        //        retResult = Result<PhraseDto>.FailureWithInfo(null,
        //          new Exceptions.DeleteFailedException(DalResources.ErrorMsgIdNotFoundException));
        //      else
        //        retResult = Result<PhraseDto>.FailureWithInfo(null, new Exceptions.DeleteFailedException());
        //    }
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<PhraseDto>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        //public LearnLanguages.Result<ICollection<PhraseDto>> GetAll()
        //{
        //  Result<ICollection<PhraseDto>> retResult = Result<ICollection<PhraseDto>>.Undefined(null);
        //  try
        //  {
        //    var allDtos = new List<PhraseDto>(SeedData.Ton.Phrases);
        //    retResult = Result<ICollection<PhraseDto>>.Success(allDtos);
        //  }
        //  catch (Exception ex)
        //  {
        //    retResult = Result<ICollection<PhraseDto>>.FailureWithInfo(null, ex);
        //  }
        //  return retResult;
        //}
        protected override PhraseDto NewImpl(object criteria)
        {
            //to get to this point, we must have already been authenticated
              Debug.Assert(Csla.ApplicationContext.User.Identity.IsAuthenticated);
              //if (!Csla.ApplicationContext.User.Identity.IsAuthenticated)
              //  throw new Common.Exceptions.UserNotAuthenticatedException();

              var languageId = SeedData.Ton.DefaultLanguageId;

              if (criteria is string)
              {
            //IF WE HAVE A STRING PARAM, THEN IT IS LANGUAGETEXT, SO GET THE LANGUAGE ID FROM THAT
            var languageText = (string)criteria;
            var languageResults = (from language in SeedData.Ton.Languages
                               where language.Text == languageText
                               select language);
            if (languageResults.Count() == 1)
            {
              var languageDto = languageResults.First();
              languageId = languageDto.Id;
            }
            else if (languageResults.Count() == 0)
              throw new Exceptions.LanguageTextNotFoundException(languageText);
            else
              throw new Exceptions.VeryBadException();
              }

              var username = Csla.ApplicationContext.User.Identity.Name;
              var userId = (from u in SeedData.Ton.Users
                    where u.Username == username
                    select u.Id).FirstOrDefault();
              if (userId == Guid.Empty)
            throw new Exceptions.UserNotAuthorizedException();

              var dto = new PhraseDto()
              {
            Id = Guid.NewGuid(),
            LanguageId = languageId,
            UserId = userId,
            Username = username
              };

              return dto;
        }
        private void UpdateReferences(PhraseDto oldPhrase, PhraseDto newPhrase)
        {
            //UPDATE USERS WHO REFERENCE THIS PHRASE
              var referencedUsers = from u in SeedData.Ton.Users
                            where u.PhraseIds.Contains(oldPhrase.Id)
                            select u;

              foreach (var user in referencedUsers)
              {
            user.PhraseIds.Remove(oldPhrase.Id);
            user.PhraseIds.Add(newPhrase.Id);
              }

              //UPDATE TRANSLATIONS WHO REFERENCE THIS PHRASE
              var referencedTranslations = from t in SeedData.Ton.Translations
                                   where t.PhraseIds.Contains(oldPhrase.Id)
                                   select t;

              foreach (var translation in referencedTranslations)
              {
            translation.PhraseIds.Remove(oldPhrase.Id);
            translation.PhraseIds.Add(newPhrase.Id);
              }
        }
        protected override PhraseDto UpdateImpl(PhraseDto dto)
        {
            var currentUserId = MockHelper.GetCurrentUserId();

              var results = from item in SeedData.Ton.Phrases
                    where item.Id == dto.Id &&
                          item.UserId == currentUserId
                    select item;

              if (results.Count() == 1)
              {
            CheckContraints(dto);

            var phraseToUpdate = results.First();
            SeedData.Ton.Phrases.Remove(phraseToUpdate);
            dto.Id = Guid.NewGuid();
            SeedData.Ton.Phrases.Add(dto);
            UpdateReferences(phraseToUpdate, dto);
            return dto;
              }
              else
              {
            if (results.Count() == 0)
              throw new Exceptions.IdNotFoundException(dto.Id);
            else
              throw new Exceptions.VeryBadException();
              }
        }
Beispiel #26
0
    protected override PhraseDto InsertImpl(PhraseDto dto)
    {
      var currentUserId = Business.BusinessHelper.GetCurrentUserId();
      PhraseData phraseData = null;
      using (var ctx = LearnLanguagesContextManager.Instance.GetManager())
      {
        //BEFORE INSERTING, WE NEED TO MAKE SURE THAT THE PHRASE.TEXT 
        //AND PHRASE.LANGUAGE.TEXT ARE NOT ALREADY IN THE DB.  IF SO, WE NEED 
        //TO CALL AN UPDATE INSTEAD OF INSERT

        var results = (from data in ctx.ObjectContext.PhraseDatas
                       where data.Text == dto.Text &&
                             data.LanguageData.Id == dto.LanguageId &&
                             data.UserDataId == currentUserId
                       select data).FirstOrDefault();
        if (results != null)
        {
          //ALREADY EXISTS IN DB.  NEED TO PERFORM AN UPDATE
          dto.Id = results.Id;

          //hack: would be faster to effectively duplicate UpdateImpl code here instead of calling UpdateImpl(). (refactor and reshape code).  Would be cleaner as well, I think.
          return UpdateImpl(dto);
        }
        else
        {
          //NO PHRASE EXISTS IN THE DB, SO PERFORM THE INSERT, SAVE CHANGES AND RETURN
          phraseData = EfHelper.AddToContext(dto, ctx.ObjectContext);
          ctx.ObjectContext.SaveChanges();
          dto.Id = phraseData.Id;
          return dto;
        }
      }
    }