Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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)));
        }
Example #5
0
        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);
        }
Example #6
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());
        }
Example #8
0
        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);
        }
Example #9
0
        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));
        }
Example #10
0
        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());
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
 public async Task <bool> DeleteAsync(ParticipationDto participation)
 => await Task.Run(() => Delete(_mapper.toEntity <Participation>(participation), true) > 0);
Example #15
0
 public bool Delete(ParticipationDto participation)
 => Delete(_mapper.toEntity <Participation>(participation), true) > 0;
Example #16
0
 public async Task <bool> UpdateAsync(ParticipationDto participation)
 {
     participation.ModifiedDate = DateTimeOffset.UtcNow;
     return(await Task.Run(() => Update(_mapper.toEntity <Participation>(participation), true) > 0));
 }
Example #17
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);
Example #20
0
 public ExtractModel toExtractModel(ParticipationDto participation)
 => _mapper.Map <ParticipationDto, ExtractModel>(participation);
 public bool UpdateParticipation(ParticipationDto participation)
 {
     return(_participationRepository.Update(participation));
 }
Example #22
0
 public void AddParticipation(int tournamentId, ParticipationDto p)
 {
     throw new NotImplementedException();
 }
Example #23
0
 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);
 }
Example #24
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));
            }
        }