private void ConfirmChallenge_Click(object sender, RoutedEventArgs e)
        {
            bool flag = true, flagIsOwner = true, flagIsReady = true;

            using (AppDbContext db = new AppDbContext())
            {
                UserChallenge userChallenge = db.UserChallenges.Find(uch.Id);
                if (userChallenge.IsCompleted)
                {
                    flag = false;
                }

                User user = db.Users.Find(App.CurrentUser.Id);
                if (user.Id == userChallenge.UserId)
                {
                    flagIsOwner = false;
                }

                flagIsReady = userChallenge.IsUserReady;
            }

            if (!flag)
            {
                MaterialMessageBox.Show("Этот вызов уже подтвержден. Обновите список вызовов", "Упс..");
            }
            else

            if (!flagIsOwner)
            {
                MaterialMessageBox.Show("Вы не можете подтвердить свой же вызов", "Упс..");
            }
            else

            if (!flagIsReady)
            {
                MaterialMessageBox.Show("Пользователь еще выполняет этот вызов");
            }
            else
            {
                using (AppDbContext db = new AppDbContext())
                {
                    UserChallenge userChallenge = db.UserChallenges.Find(uch.Id);
                    userChallenge.IsCompleted     = true;
                    db.Entry(userChallenge).State = EntityState.Modified;
                    Challenge currentChallenge = db.Challenges.Find(userChallenge.Challenge.Id);
                    currentChallenge.CountOfComplete++;
                    db.Entry(currentChallenge).State = EntityState.Modified;

                    User thiUser = db.Users.Find(App.CurrentUser.Id);
                    Log  log     = new Log()
                    {
                        Time = DateTime.Now, Action = "Пользователь " + thiUser.Username + " подтвердил выполнение вызова игроком " + userChallenge.User.Username
                    };
                    db.Logs.Add(log);
                    db.SaveChanges();
                }
                MaterialMessageBox.Show("Вы подтвердили вызов, спасибо!", "Отлично");
                activeChallenges.ShowActiveChallenges();
            }
        }
예제 #2
0
        public async Task RejectChallenge(User user, UserChallenge userChallenge)
        {
            if (userChallenge == null)
            {
                throw new NotFoundException("Desafio não existente.");
            }

            if (userChallenge.Accept)
            {
                throw new BadRequestException("Esse desafio foi aceito anteriormente.");
            }

            var challengesOfDay = await _context.UserChallenges
               .Include(x => x.User)
               .Include(x => x.Challenge)
               .Where(x => x.DayChallenge.Date == DateTime.Now.Date && user.Id == x.User.Id)
               .ToListAsync();

            if (userChallenge.Id != challengesOfDay.LastOrDefault().Id)
            {
                throw new BadRequestException("Esse desafio não é o atual.");
            }

            var countChallenges = await _context.UserChallenges
                .Include(x => x.User)
                .Include(x => x.Challenge)
                .CountAsync(x => x.DayChallenge.Date == DateTime.Now.Date);

            if (countChallenges < CHALLENGES_FOR_DAY)
            {
                var challenge = await GetNextChallenge();
                await _context.UserChallenges.AddAsync(new UserChallenge { User = user, Challenge = challenge, DayChallenge = DateTime.Now });
                await _context.SaveChangesAsync();
            }
        }
예제 #3
0
        public IHttpActionResult PutUserChallenge(int id, UserChallenge userChallenge)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != userChallenge.id)
            {
                return(BadRequest());
            }

            db.Entry(userChallenge).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UserChallengeExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        private void UserReadyWithChallenge_Click(object sender, RoutedEventArgs e)
        {
            bool flag = true;

            using (AppDbContext db = new AppDbContext())
            {
                User          user = db.Users.Find(App.CurrentUser.Id);
                UserChallenge uch  = user.UserChallenge.Where(p => p.IsCompleted == false).First();
                if (uch.IsUserReady == true)
                {
                    flag = false;
                }
            }
            if (flag)
            {
                if (proofLinkTextBox.Text == String.Empty)
                {
                    MaterialMessageBox.Show("Заполните поле!", "Ошибка");
                    proofLinkTextBox.BorderBrush = new SolidColorBrush(Colors.Red);
                }
                else
                {
                    proofLinkTextBox.BorderBrush = (Brush) new BrushConverter().ConvertFrom("#89000000");
                    using (AppDbContext db = new AppDbContext())
                    {
                        User          user = db.Users.Find(App.CurrentUser.Id);
                        UserChallenge uch  = user.UserChallenge.Where(p => p.IsCompleted == false).First();
                        try
                        {
                            Hyperlink hyperlink = new Hyperlink();
                            hyperlink.NavigateUri = new Uri(proofLinkTextBox.Text);
                            uch.ConfirmTime       = DateTime.Now;
                            uch.ProofLink         = proofLinkTextBox.Text;
                            uch.IsUserReady       = true;
                            db.Entry(uch).State   = EntityState.Modified;
                            User thiUser = db.Users.Find(App.CurrentUser.Id);
                            Log  log     = new Log()
                            {
                                Time = DateTime.Now, Action = "Пользователь " + thiUser.Username + " отправил подтверждение вызова: " + uch.Challenge.Text
                            };
                            db.Logs.Add(log);
                            db.SaveChanges();
                            MaterialMessageBox.Show("Вы отправили подтверждение на рассмотрение!", "Отлично");
                        }
                        catch (UriFormatException)
                        {
                            MaterialMessageBox.Show("Ссылка некоректна", "Ошибка");
                        }
                    }
                }
            }
            else
            {
                MaterialMessageBox.Show("Вы уже подтверждали", "Ошибка");
            }
        }
예제 #5
0
        public ActionResult JoinChallengeConfirmed(int id)
        {
            UserChallenge challenge = new UserChallenge();
            HttpCookie    cookie    = Request.Cookies["UserID"];

            challenge.challengeID = id;
            challenge.userID      = int.Parse(cookie["ID"]);

            User newUser = db.Users.Find(challenge.userID);

            bool isEntered = false;

            db.UserChallenges.OrderBy(item => item.position);
            List <UserChallenge> userChallenges = db.UserChallenges.ToList();

            challenge.position = 1;

            /*if (userChallenges.Count == 0)
             *  challenge.position = 1;
             * else
             * {*/
            foreach (UserChallenge current in userChallenges)
            {
                if (current.challengeID == id)
                {
                    User curUser = db.Users.Find(current.userID);
                    if (isEntered)
                    {
                        current.position += 1;
                        continue;
                    }
                    if (curUser.totDistanceTravelled <= newUser.totDistanceTravelled)
                    {
                        challenge.position = current.position;
                        current.position  += 1;
                        isEntered          = true;
                        continue;
                    }
                    if (curUser.totDistanceTravelled > newUser.totDistanceTravelled)
                    {
                        challenge.position++;
                        continue;
                    }
                }
            }
            //}

            if (ModelState.IsValid)
            {
                db.UserChallenges.Add(challenge);
                db.SaveChanges();
            }

            return(RedirectToAction("JoinChallenge"));
        }
예제 #6
0
        public IHttpActionResult GetUserChallenge(int id)
        {
            UserChallenge userChallenge = db.UserChallenges.Include(uc => uc.days.Select(d => d.tasksCompleted)).Include(uc => uc.challenge).FirstOrDefault(d => d.id == id);

            if (userChallenge == null)
            {
                return(NotFound());
            }

            return(Ok(userChallenge));
        }
        public ConfirmChallengeWindow(ActiveChallenges ac, UserChallenge userChallenge)
        {
            activeChallenges = ac;
            uch = userChallenge;
            InitializeComponent();
            string Title = "", Text = "";
            string DateOfAccept  = "";
            string DateOfConfirm = "";
            string ProofLink     = "";
            bool   flag          = true;

            using (AppDbContext db = new AppDbContext())
            {
                UserChallenge uch2 = db.UserChallenges.Find(uch.Id);
                Challenge     ch   = db.Challenges.Find(uch2.Challenge.Id);
                Game          game = db.Games.Find(ch.Game.Id);
                ProofLink = uch2.ProofLink;
                Title     = ch.Title;
                Text      = ch.Text;
                if (uch2.AcceptTime != null)
                {
                    DateOfAccept = uch.AcceptTime.ToString();
                }
                else
                {
                    DateOfAccept = "--";
                }

                if (uch2.ConfirmTime != null)
                {
                    DateOfConfirm = uch2.ConfirmTime.ToString();
                }
                else
                {
                    DateOfConfirm = "--";
                }

                if (uch2.ProofLink == null)
                {
                    var x = activeChallengeProofLink.Inlines.FirstInline.TextDecorations = TextDecorations.Strikethrough;
                    activeChallengeProofLink.Inlines.FirstInline.ToolTip = "Скриншот еще не загружен";
                    flag = false;
                }
            }
            activeChallengeTitle.Content    = Title;
            activeChallengeText.Text        = Text;
            activeChallengeDate.Text        = DateOfAccept;
            activeChallengeConfirmDate.Text = DateOfConfirm;
            if (flag)
            {
                activeChallengeProofLink.NavigateUri = new Uri(ProofLink);
            }
        }
예제 #8
0
        public IHttpActionResult PostUserChallenge(UserChallenge userChallenge)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.UserChallenges.Add(userChallenge);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = userChallenge.id }, userChallenge));
        }
 public static SimpleUserChallengeModel ConvertToSimpleUserChallengeModel(UserChallenge userChallenge)
 {
     return(new SimpleUserChallengeModel
     {
         Id = userChallenge.Id,
         Accept = userChallenge.Accept,
         DayChallenge = userChallenge.DayChallenge,
         Completed = userChallenge.Completed,
         Finished = userChallenge.Finished,
         Feedback = userChallenge.Feedback,
         Challenge = userChallenge.Challenge
     });
 }
 private void DeclineChallenge(object sender, RoutedEventArgs e)
 {
     using (AppDbContext db = new AppDbContext())
     {
         User          user = db.Users.Find(App.CurrentUser.Id);
         UserChallenge uch  = user.UserChallenge.Where(p => p.IsCompleted == false).First();
         db.UserChallenges.Remove(uch);
         db.SaveChanges();
         MaterialMessageBox.Show("Вы успешно отменили вызов! Просмотрите активные вызовы и выберите новый :)", "Успех");
         homeWindow.hideAllRectangle.Opacity  = 0;
         homeWindow.DataGridUserGames.Opacity = 1;
         Close();
     }
 }
예제 #11
0
        public IHttpActionResult DeleteUserChallenge(int id)
        {
            UserChallenge userChallenge = db.UserChallenges.Find(id);

            if (userChallenge == null)
            {
                return(NotFound());
            }

            db.UserChallenges.Remove(userChallenge);
            db.SaveChanges();

            return(Ok(userChallenge));
        }
예제 #12
0
        public async Task <int> TakeChallenge(int challengeId)
        {
            var userId        = _userManager.GetUserId(User);
            var userChallenge = new UserChallenge()
            {
                ChallengeId   = challengeId,
                Status        = ChallengeStatus.InProgress,
                TakenDateTime = DateTime.Now,
                UserId        = userId
            };

            await _userChallengeRepository.Create(userChallenge);

            return(userChallenge.Id);
        }
        public AcceptedChallengeWindow(Home home)
        {
            homeWindow = home;
            InitializeComponent();
            string Title = "", Text = "", Game = "";
            string Path          = "pack://application:,,,";
            string DateOfAccept  = "";
            string DateOfConfirm = "";

            using (AppDbContext db = new AppDbContext())
            {
                User          user = db.Users.Find(App.CurrentUser.Id);
                UserChallenge uch  = user.UserChallenge.Where(p => p.IsCompleted == false).First();
                if (uch.IsUserReady == true)
                {
                    UserReadyButton.IsEnabled = false;
                }
                Challenge ch   = db.Challenges.Find(uch.Challenge.Id);
                Game      game = db.Games.Find(ch.Game.Id);
                Title = ch.Title;
                Text  = ch.Text;
                Path  = Path + game.Image;
                Game  = game.Name;
                if (uch.AcceptTime != null)
                {
                    DateOfAccept = uch.AcceptTime.ToString();
                }
                else
                {
                    DateOfAccept = "None";
                }

                if (uch.ConfirmTime != null)
                {
                    DateOfConfirm = uch.ConfirmTime.ToString();
                }
            }
            var uri    = new Uri(Path);
            var bitmap = new BitmapImage(uri);

            activeChallengeTitle.Content    = Title;
            activeChallengeText.Text        = Text;
            activeChallengeGameImage.Source = bitmap;
            activeChallengeGame.Text        = Game;
            activeChallengeDate.Text        = DateOfAccept;
        }
예제 #14
0
        public void Seed(TeexyContext context)
        {
            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();
            //context.Database.Migrate();

            var user = new User()
            {
                Id           = Guid.NewGuid().ToString(),
                Name         = "Vasya",
                PasswordHash = "afweioj"
            };

            var userChallenge = new UserChallenge()
            {
                Id        = 1,
                User      = user,
                Status    = ChallengeStatus.InProgress,
                Challenge = new Challenge()
                {
                    Id          = 0,
                    Title       = "Посадити дерево",
                    Description = "Підвищуємо екологію!!!",
                    Score       = 15
                }
            };

            var fixture = new Fixture();

            var userChList = fixture.Build <UserChallenge>()
                             .With(uch => uch.User, () => { return(user); })
                             .With(uch => uch.Challenge, () => { return(fixture.Create <Challenge>()); })
                             .CreateMany(20).ToList();



            context.UserChallenges.Add(userChallenge);
            context.UserChallenges.AddRange(userChList);
            context.SaveChanges();
        }
예제 #15
0
        public async Task AcceptChallenge(User user, UserChallenge userChallenge)
        {
            if (userChallenge == null)
            {
                throw new NotFoundException("Desafio não existente.");
            }

            var challengesOfDay = await _context.UserChallenges
                .Include(x => x.User)
                .Include(x => x.Challenge)
                .Where(x => x.DayChallenge.Date == DateTime.Now.Date && user.Id == x.User.Id)
                .ToListAsync();

            if (userChallenge.Id != challengesOfDay.LastOrDefault().Id)
            {
                throw new BadRequestException("Esse desafio não é o atual.");
            }

            userChallenge.Accept = true;
       
            await _context.SaveChangesAsync();   
        }
예제 #16
0
        public async Task <UserChallenge> SetUserChallengeStatus(string email, long challengeId, ChallengeStatus status)
        {
            if (!_context.UserChallenges.Any(uc => uc.UserEmail == email && uc.ChallengeId == challengeId))
            {
                var newUserChallenge = new UserChallenge()
                {
                    UserEmail      = email,
                    ChallengeId    = challengeId,
                    Status         = ChallengeStatus.None,
                    CompletedTimes = 0
                };
                await _context.UserChallenges.AddAsync(newUserChallenge);

                _context.SaveChanges();
            }

            var userChallenge = await _context.UserChallenges
                                .Where(uc => uc.UserEmail == email && uc.ChallengeId == challengeId)
                                .Include(uc => uc.Challenge)
                                .FirstOrDefaultAsync();

            if (status == ChallengeStatus.Completed && userChallenge.CompletedTimes < userChallenge.Challenge.MaxCompletionCount)
            {
                userChallenge.CompletedTimes++;
                userChallenge.Status = userChallenge.CompletedTimes == userChallenge.Challenge.MaxCompletionCount
                    ? ChallengeStatus.Completed
                    : ChallengeStatus.Assigned;
            }
            else
            {
                userChallenge.Status = status;
            }

            var result = _context.UserChallenges.Update(userChallenge);

            _context.SaveChanges();

            return(result.Entity);
        }
        private void TakeChallengeClick(object sender, RoutedEventArgs e)
        {
            if (DataGridChallenges.SelectedItem != null)
            {
                Challenge selectedChallenge = (Challenge)DataGridChallenges.SelectedItem;
                using (AppDbContext db = new AppDbContext())
                {
                    db.Challenges.Load();
                    Challenge challenge = db.Challenges.Find(selectedChallenge.Id);
                    User      user      = db.Users.Find(App.CurrentUser.Id);
                    int       countOfActiveChallengesOnUser = user.UserChallenge.Where(p => p.IsCompleted == false).Count();
                    bool      isCreatedByUser     = false;
                    bool      isUserHaveAnyActive = countOfActiveChallengesOnUser > 0;
                    bool      isEverComplete      = false;

                    if (db.Challenges.Find(selectedChallenge.Id).Creator == user)
                    {
                        isCreatedByUser = true;
                    }
                    foreach (var ch in user.UserChallenge)
                    {
                        if (challenge.Id == ch.ChallengeId)
                        {
                            isEverComplete = true;
                        }
                    }
                    if (isUserHaveAnyActive)
                    {
                        MaterialMessageBox.Show("У Вас уже есть активный вызов", "Ошибка");
                        DataGridChallenges.SelectedItem = null;
                    }
                    else
                    if (isEverComplete)
                    {
                        MaterialMessageBox.Show("Вы уже выполняли данный вызов!", "Упс..");
                        DataGridChallenges.SelectedItem = null;
                    }
                    else
                    if (isCreatedByUser)
                    {
                        MaterialMessageBox.Show("Вы не можете принять созданый Вами вызов", "Ошибка");
                        DataGridChallenges.SelectedItem = null;
                    }
                    else
                    {
                        UserChallenge userChallenge = new UserChallenge()
                        {
                            User = user, Challenge = challenge, AcceptTime = DateTime.Now
                        };
                        db.UserChallenges.Add(userChallenge);
                        db.SaveChanges();
                        MaterialMessageBox.Show("Отлично! Вызов добавлен", "Успех");
                        DataGridChallenges.SelectedItem = null;
                    }
                }
            }
            else
            {
                MaterialMessageBox.Show("Сначала нужно выбрать вызов", "Ошибка");
            }
        }
예제 #18
0
        public async Task CompleteChallenge(CompleteChallengeModel completeChallengeModel, User user, UserChallenge userChallenge)
        {
            completeChallengeModel.Validate();

            if (userChallenge == null)
            {
                throw new NotFoundException("Desafio não existente.");
            }

            if (userChallenge.Finished)
            {
                throw new BadRequestException("Esse desafio já foi finalizado.");
            }

            var challengesOfDay = await _context.UserChallenges
               .Include(x => x.User)
               .Include(x => x.Challenge)
               .Where(x => x.DayChallenge.Date == DateTime.Now.Date && user.Id == x.User.Id)
               .ToListAsync();

            if (userChallenge.Id != challengesOfDay.LastOrDefault().Id)
            {
                throw new BadRequestException("Esse desafio não é o atual.");
            }

            userChallenge.Completed = completeChallengeModel.Completed;
            userChallenge.Feedback = completeChallengeModel.Feedback;
            userChallenge.Finished = true;

            var countChallenges = await _context.UserChallenges
                .Include(x => x.User)
                .Include(x => x.Challenge)
                .CountAsync(x => x.DayChallenge.Date == DateTime.Now.Date && user.Id == x.User.Id);

            if (countChallenges < CHALLENGES_FOR_DAY)
            {
                var challenge = await GetNextChallenge();
                await _context.UserChallenges.AddAsync(new UserChallenge { User = user, Challenge = challenge, DayChallenge = DateTime.Now });
            }

            await _context.SaveChangesAsync();
        }