public async Task <(bool winStatus, PrizeDto prize)> UpdateInstantWinStatusAsync( ParticipationDto participationDto) { var instantStatus = _instantWinService.WinCheck(); var status = instantStatus.isWinner; var participantDto = _participantManager.FindById(participationDto.ParticipantId); if (status) { participationDto.JourneyStatus = JourneyStatus.WON_CHECKED.ToString(); participationDto.PrizeId = instantStatus.prize.Id; participationDto.InstanWinMomentId = instantStatus.instantWin.Id; participantDto.LastParticipatedDate = DateTime.UtcNow; participantDto.LastWonDate = DateTime.UtcNow; } else { participationDto.JourneyStatus = JourneyStatus.LOST_CHECKED.ToString(); participantDto.LastParticipatedDate = DateTime.UtcNow; } await Task.Run(() => { _participantManager.UpdateParticipant(participantDto); _participationManager.UpdateParticipation(participationDto); }); return(instantStatus.isWinner, instantStatus.prize); }
public bool UpdateParticipation(ParticipationDto participation) { var participationEntity = GetById(participation.Id); if (participation.EmailHash != default) { participationEntity.EmailHash = participation.EmailHash; } if (participation.PrizeId != default) { participationEntity.PrizeId = participation.PrizeId; } if (participation.EmailHash != default) { participationEntity.EmailHash = participation.EmailHash; } if (participation.InstanWinMomentId != default) { participationEntity.InstanWinMomentId = participation.InstanWinMomentId; } if (participation.CountryId != default) { participationEntity.CountryId = participation.CountryId; } if (participation.PrivacyVersion != default) { participationEntity.PrivacyVersion = participation.PrivacyVersion; } if (participation.JourneyStatus != default) { participationEntity.JourneyStatus = participation.JourneyStatus; } return(Update(participationEntity)); }
public void Convert_colletion_vote_dto_to_entity_should_work() { // Arrange List <ParticipationDto> dtos = new List <ParticipationDto>(); for (int i = 0; i < 5; i++) { var dto = new ParticipationDto { Status = "Tested" + i, ApiStatus = "Success" + i, ApiMessage = "Transaction success" + i, }; dtos.Add(dto); } // Act var entities = _mapper.toEntities <Participation>(dtos).ToList(); //Assert for (int i = 0; i < 5; i++) { Assert.AreEqual <string>(dtos[i].Status, entities[i].Status); Assert.AreEqual <string>(dtos[i].ApiStatus, entities[i].ApiStatus); Assert.AreEqual <string>(dtos[i].ApiMessage, entities[i].ApiMessage); } }
public async Task <bool> UpdateLogoValidatedParticipationAsync(ParticipationDto participation) { var participationDto = _participationManager.FindById(participation.Id); participationDto.JourneyStatus = JourneyStatus.LOGO_VALIDATED.ToString(); return(await Task.Run(() => _participationManager.UpdateParticipation(participationDto))); }
public bool Update(ParticipationDto participation) { var participationEntity = Find(participation.Id); participationEntity.Status = participation.Status; participationEntity.ApiStatus = participation.ApiStatus; participationEntity.ApiMessage = participation.ApiMessage; participationEntity.ModifiedDate = DateTimeOffset.UtcNow; return(Update(participationEntity, true) > 0); }
private async Task <(bool, string)> ProceedToParticipationSyncRetryProcess(ParticipationDto participation, CrmData crmData, Configurations configuration) { var success = false; var consumerId = string.Empty; // Store locally var failed = new FailedTransactionDto { Id = Guid.NewGuid(), ParticipationId = participation.Id, TermsConsent = true, NewsletterOptin = participation.NewsletterOptin, CreatedDate = DateTimeOffset.UtcNow }; _failedTransactionService.Create(failed); // Another attempt var reSyncResponse = await _scheduler.RetryParticipationSyncImmediately(crmData, configuration, true); var typedResponse = (CrmResponse)reSyncResponse; success = typedResponse.Data.Success; if (success) { var currentParticipation = _participationService.GetParticipation(participation.Id); currentParticipation.Status = ParticipationStatus.PARTICIPATION_RETRY_SUCCESS.ToString(); currentParticipation.ApiStatus = typedResponse.Data.ApiStatus.ToString(); currentParticipation.ConsumerId = typedResponse.Data.Data.ConsumerId; currentParticipation.ApiMessage = typedResponse.Data.ApiMessage; currentParticipation.ModifiedDate = DateTimeOffset.UtcNow; _participationService.UpdateParticipation(currentParticipation); _failedTransactionService.Delete(failed.Id); consumerId = typedResponse.Data.Data.ConsumerId; } else { var currentParticipation = _participationService.GetParticipation(participation.Id); currentParticipation.Status = ParticipationStatus.PARTICIPATION_RETRY_FAILED.ToString(); currentParticipation.ModifiedDate = DateTimeOffset.UtcNow; _participationService.UpdateParticipation(currentParticipation); } return(success, consumerId); }
public IHttpActionResult Participate(ParticipationDto dto) { var userId = User.Identity.GetUserId(); var exists = context.Participations.Any(p => p.GamerId == userId && p.TournamentId == dto.TournamentId); var participation = new Participation { GamerId = userId, TournamentId = dto.TournamentId }; context.Participations.Add(participation); context.SaveChanges(); return(Ok()); }
private CrmData GatherParticipationCrmDataToSend(ParticipationDto participation, CrmData legalDocument, string country) { var crmData = new CrmData(); crmData.Data.Email = participation.Email; crmData.Data.Country = country; crmData.Data.PrivacyConsent = true; crmData.Data.NewsletterOptin = participation.NewsletterOptin; crmData.Data.PrivacyPolicyTextName = legalDocument.Data.Data.Versions[0].LegalTextName; crmData.Data.PrivacyPolicyVersion = legalDocument.Data.Data.Versions[0].Version; crmData.Data.PrivacyPolicyCreation = legalDocument.Data.Data.Versions[0].Created.ToString(); return(crmData); }
public async Task <ActionResult> LogoAndWin([FromBody] LogoWinRequest model) { if (model.PhotoInput == null) { ViewBag.Error = "PICTURE_REQUIRED"; return(CurrentUmbracoPage()); } if (model.ParticipationId == null || model.ParticipationId == default) { ViewBag.Error = "PARTICIPATION_ID_REQUIRED"; return(CurrentUmbracoPage()); } if (model.ParticipantId == null || model.ParticipantId == default) { ViewBag.Error = "PARTICIPANT_ID_REQUIRED"; return(CurrentUmbracoPage()); } var filePath = FileHelper.StoreFileTemporarily(model.PhotoInput); bool isLogoValid = await _validationService.CheckValidLogoAsync(filePath); FileHelper.RemoveTemporarilyStoredFile(filePath); if (!isLogoValid) { ViewBag.Error = "LOGO_INVALID"; return(CurrentUmbracoPage()); } var participation = new ParticipationDto { Id = model.ParticipationId, ParticipantId = model.ParticipantId }; await _participationService.UpdateLogoValidatedParticipationAsync(participation); var instantWinResult = await _participationService.UpdateInstantWinStatusAsync(participation); var congratsOrLosePageId = instantWinResult.winStatus ? _configurationService.GetCongratulationPageId() : _configurationService.GetLosePageId(); return(RedirectToUmbracoPage(congratsOrLosePageId)); }
public void Convert_vote_dto_to_entity_should_work() { // Arrange var dto = new ParticipationDto { Status = "Tested", ApiStatus = "Success", ApiMessage = "Transaction success", }; // Act var entity = _mapper.toEntity <Participation>(dto); //Assert Assert.AreEqual <string>(dto.Status, entity.Status); Assert.AreEqual <string>(dto.ApiStatus, entity.ApiStatus); Assert.AreEqual <string>(dto.ApiMessage, entity.ApiMessage); }
public IHttpActionResult Participate(ParticipationDto dto) { var userId = User.Identity.GetUserId(); var exists = _unitOfWork.Participations.GetParticipation(dto.TournamentId, userId) != null; if (exists) { return(BadRequest("The participation already exists!")); } var participation = new Participation { GamerId = userId, TournamentId = dto.TournamentId }; _unitOfWork.Participations.Add(participation); _unitOfWork.Complete(); return(Ok()); }
public async Task <(bool, string)> ParticipateAsync(ParticipationDto participation, string culture, string country = "GB") { // Save Participation to DB participation.Status = ParticipationStatus.PARTICIPATION_NOT_SYNCED.ToString(); participation.CreatedDate = DateTimeOffset.UtcNow; _participationService.CreateParticipation(participation); // Requesting for legal document var legalDocument = await _crmProvider.ReadTextDocumentAsync(); var crmData = GatherParticipationCrmDataToSend(participation, legalDocument, country); var configuration = Configure(culture); // Sending Participation to Crm var consumer = await _crmProvider.CreateParticipationAsync(crmData, configuration, true); var success = consumer.GetSetting <bool>("Success"); var ApiStatus = consumer.GetSetting <int>("ApiStatus"); var ApiMessage = consumer.GetSetting <string>("ApiMessage"); var consumerId = success ? (string)consumer.Data.Data.ConsumerId : string.Empty; if (success) { var createdParticipation = _participationService.GetParticipation(participation.Id); createdParticipation.Status = ParticipationStatus.PARTICIPATION_SYNCED_SUCCESS.ToString(); createdParticipation.ApiStatus = ApiStatus.ToString(); createdParticipation.ApiMessage = ApiMessage; createdParticipation.ConsumerId = consumerId; _participationService.UpdateParticipation(createdParticipation); } else { var createdParticipation = _participationService.GetParticipation(participation.Id); createdParticipation.Status = ParticipationStatus.PARTICIPATION_SYNCED_FAILED.ToString(); createdParticipation.ApiStatus = ApiStatus.ToString(); createdParticipation.ApiMessage = ApiMessage; _participationService.UpdateParticipation(createdParticipation); (success, consumerId) = await ProceedToParticipationSyncRetryProcess(participation, crmData, configuration); } return(success, consumerId); }
public (Guid participationId, Guid participantId) CreateParticipation(string email) { var participant = new ParticipantDto { Email = email, ConsumerCrmId = null }; var participantId = _participantManager.GetOrCreateParticipant(participant); var participation = new ParticipationDto { Email = email, EmailHash = StringHelper.Md5HashEncode(email.ToLower()), ParticipantId = participantId, JourneyStatus = JourneyStatus.EMAIL_VALIDATED.ToString(), PrizeId = null, InstanWinMomentId = null, CountryId = null }; var participationId = Create(participation.toEntity()); return(participationId, participantId); }
public async Task <bool> DeleteAsync(ParticipationDto participation) => await Task.Run(() => Delete(_mapper.toEntity <Participation>(participation), true) > 0);
public bool Delete(ParticipationDto participation) => Delete(_mapper.toEntity <Participation>(participation), true) > 0;
public async Task <bool> UpdateAsync(ParticipationDto participation) { participation.ModifiedDate = DateTimeOffset.UtcNow; return(await Task.Run(() => Update(_mapper.toEntity <Participation>(participation), true) > 0)); }
public async Task <bool> AddAsync(ParticipationDto participation) { participation.Id = participation.Id != default ? participation.Id : Guid.NewGuid(); participation.CreatedDate = DateTimeOffset.UtcNow; return(await Task.Run(() => Add(_mapper.toEntity <Participation>(participation), true) > 0)); }
public bool CreateParticipation(ParticipationDto participation) { return(_participationRepository.Add(participation)); }
public static Participation toEntity(this ParticipationDto participationDto) => AutoMapper.Mapper.Map <ParticipationDto, Participation>(participationDto);
public ExtractModel toExtractModel(ParticipationDto participation) => _mapper.Map <ParticipationDto, ExtractModel>(participation);
public bool UpdateParticipation(ParticipationDto participation) { return(_participationRepository.Update(participation)); }
public void AddParticipation(int tournamentId, ParticipationDto p) { throw new NotImplementedException(); }
public bool Add(ParticipationDto participation) { participation.Id = participation.Id != default ? participation.Id : Guid.NewGuid(); participation.CreatedDate = DateTimeOffset.UtcNow; return(Add(_mapper.toEntity <Participation>(participation), true) > 0); }
public static ExtractModel toExtractModel(this ParticipationDto participation) => AutoMapper.Mapper.Map <ParticipationDto, ExtractModel>(participation);
public async Task <IHttpActionResult> LogoAndWinCheck() { dynamic expando = new ExpandoObject(); var apiResponse = new ApiResponse { Success = false }; var model = new LogoWinRequest { PhotoInput = HttpContext.Current.Request.Files[0], ParticipantId = Guid.Parse(HttpContext.Current.Request.Form["ParticipantId"]), ParticipationId = Guid.Parse(HttpContext.Current.Request.Form["ParticipationId"]), }; try { if (model.PhotoInput == null) { expando.Description = "PICTURE_REQUIRED"; apiResponse.Message = "Please provide a picture"; apiResponse.Data = expando; return(Content(HttpStatusCode.BadRequest, apiResponse)); } if (model.ParticipationId == null || model.ParticipationId == default) { expando.Description = "PARTICIPATION_ID_REQUIRED"; apiResponse.Message = "Please provide a participation Id"; apiResponse.Data = expando; return(Content(HttpStatusCode.BadRequest, apiResponse)); } if (model.ParticipantId == null || model.ParticipantId == default) { expando.Description = "PARTICIPANT_ID_REQUIRED"; apiResponse.Message = "Please provide a participant Id"; apiResponse.Data = expando; return(Content(HttpStatusCode.BadRequest, apiResponse)); } var filePath = FileHelper.StoreFileTemporarily(model.PhotoInput); bool isLogoValid = await _validationService.CheckValidLogoAsync(filePath); FileHelper.RemoveTemporarilyStoredFile(filePath); if (!isLogoValid) { expando.Description = "LOGO_INVALID"; apiResponse.Message = "Could not validate uploaded pictures"; apiResponse.Data = expando; return(Content(HttpStatusCode.BadRequest, apiResponse)); } var participation = new ParticipationDto { Id = model.ParticipationId, ParticipantId = model.ParticipantId }; await _participationService.UpdateLogoValidatedParticipationAsync(participation); var instantWinResult = await _participationService.UpdateInstantWinStatusAsync(participation); expando.Description = instantWinResult.winStatus ? "LOGO_VALID_AND_WON" : "LOGO_VALID_BUT_LOST"; expando.GameStatus = instantWinResult.winStatus ? "WIN" : "LOSE"; expando.PrizeName = instantWinResult.winStatus ? instantWinResult.prize.Name : string.Empty; apiResponse.Success = true; apiResponse.Message = "Logo valid and instant win checked"; apiResponse.Data = expando; return(Ok(apiResponse)); } catch (Exception e) { apiResponse.Success = false; apiResponse.Message = e.Message; expando.Description = $"Error occured in {e.Source}: {e.StackTrace}"; apiResponse.Data = expando; return(Content(HttpStatusCode.InternalServerError, apiResponse)); } }
public async Task <IHttpActionResult> Participate([FromBody] ParticipationViewModel participate) { dynamic expando = new ExpandoObject(); var apiResponse = new ApiResponse { Success = false, Message = "Bad Request", Data = expando }; try { if (participate == null) { expando.Error = new List <string>() { "Body request data should be as documented" }; apiResponse.Message = "Missing or unknown request body"; apiResponse.Data = expando; _logger.LogWarn("Participate validation Error", "Body request not found or unknown"); return(Content(HttpStatusCode.BadRequest, apiResponse)); } if (!ModelState.IsValid) { var allErrors = ModelState.Values.SelectMany(v => v.Errors); var errorList = allErrors.Select(error => error.ErrorMessage); expando.Error = errorList; apiResponse.Message = "Validation error occured"; apiResponse.Data = expando; _logger.LogWarn("Participate validation Error", string.Join(", ", errorList)); return(Content(HttpStatusCode.BadRequest, apiResponse)); } var dto = new ParticipationDto { Id = Guid.NewGuid(), EmailHash = StringUtility.Md5HashEncode(participate.Email.ToLower()), Email = participate.Email, SiteId = _siteService.GetSiteByCulture(participate.Culture)?.Id, RetailerConsent = participate.RetailerConsent, NewsletterOptin = participate.NewsletterOptin }; var crmResponse = await _journeyService.ParticipateAsync(dto, participate.Culture); var site = _siteService.GetSiteByCulture(participate.Culture); expando.Description = "Your participate has been taken into account."; expando.ConsumerId = crmResponse.Item1 ? crmResponse.Item2 : string.Empty; expando.ParticipationId = dto.Id; apiResponse.Success = true; apiResponse.Message = crmResponse.Item1 ? "Participate successfull" : "Your participate has been considered but CRM sync has failed"; apiResponse.Data = expando; _logger.LogTrace(apiResponse.Message, $"Ok: {dto.Id}"); return(Ok(apiResponse)); } catch (Exception e) { expando.Error = e.Message; apiResponse.Success = false; apiResponse.Message = $"Error occured in {e.Source}"; apiResponse.Data = expando; _logger.LogError(e.Message, e); return(Content(HttpStatusCode.InternalServerError, apiResponse)); } }