//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); }
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); } } }
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(); }
//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); }
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; }
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); }
//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); }
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"); } }
/// <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(); }
//{ // 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); } } } }
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(); } } }
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; } } }
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(); } }
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; }
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(); } }
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; } } }