/// <summary>
        /// Cancel a user fb
        /// </summary>
        /// <param name="order">The info to cancel the user fb</param>
        /// See <see cref="Areas.Bet.Models.CancelUserFootballBet"/> to know the param structure
        /// <returns>The IActionResult of the cancel a user fb action</returns>
        /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure
        public IActionResult cancelUserFootballBet([FromBody] CancelUserFootballBet order)
        {
            User caller = TokenUserManager.getUserFromToken(HttpContext, _context);

            if (!caller.open)
            {
                return(BadRequest(new { error = "YoureBanned" }));
            }
            if (AdminPolicy.isAdmin(caller, _context))
            {
                return(BadRequest("notAllowed"));
            }
            UserGroup       ugCaller        = new UserGroup();
            Group           group           = new Group();
            FootballBet     footballBet     = new FootballBet();
            UserFootballBet userFootballBet = new UserFootballBet();

            if (!UserInFootballBet.check(caller, ref group, order.groupName, ref ugCaller, ref footballBet, order.footballBet, _context, false))
            {
                return(BadRequest());
            }
            if (footballBet.cancelled)
            {
                return(BadRequest(new { error = "CancelBetCancelled" }));
            }
            if (footballBet.ended)
            {
                return(BadRequest(new { error = "CancelBetEnded" }));
            }
            if (footballBet.dateLastBet < DateTime.Now)
            {
                return(BadRequest(new { error = "CancelBetLastBetPassed" }));
            }
            if (!checkBet(ref userFootballBet, order.userBet, footballBet, caller))
            {
                return(BadRequest());
            }
            try
            {
                ugCaller.coins             += CheckBetType.calculateCancelRate(footballBet, userFootballBet.bet, _context);
                userFootballBet.valid       = false;
                userFootballBet.dateInvalid = DateTime.Now;

                _context.Update(ugCaller);
                _context.Update(userFootballBet);
                _context.SaveChanges();

                return(Ok(GroupPageManager.GetPage(caller, group, _context)));
            }
            catch (Exception)
            {
                return(StatusCode(500));
            }
        }
示例#2
0
        /// <summary>
        /// Do a user fb on a fb
        /// </summary>
        /// <param name="order">The info to do the user fb</param>
        /// See <see cref="Areas.Bet.Models.DoFootballBet"/> to know the param structure
        /// <returns>IActionResult of the do user fb action</returns>
        /// See <see cref="Areas.GroupManage.Models.GroupPage"/> to know the response structure
        public IActionResult doFootballBet([FromBody] DoFootballBet order)
        {
            User caller = TokenUserManager.getUserFromToken(HttpContext, _context);

            if (!caller.open)
            {
                return(BadRequest(new { error = "YoureBanned" }));
            }
            if (AdminPolicy.isAdmin(caller, _context))
            {
                return(BadRequest("notAllowed"));
            }
            UserGroup   ugCaller = new UserGroup();
            Group       group    = new Group();
            FootballBet fb       = new FootballBet();

            if (!UserInFootballBet.check(caller, ref group, order.groupName, ref ugCaller, ref fb, order.footballbet, _context))
            {
                return(BadRequest());
            }
            if (fb.cancelled)
            {
                return(BadRequest(new { error = "BetCancelled" }));
            }
            if (fb.ended)
            {
                return(BadRequest(new { error = "BetEnded" }));
            }
            if (fb.dateLastBet < DateTime.Now)
            {
                return(BadRequest(new { error = "BetLastBetPassed" }));
            }
            if (!checkBet(order.bet, ugCaller.coins, fb))
            {
                return(BadRequest());
            }
            if (!checkTypePriceWithBet(fb, order.homeGoals, order.awayGoals, order.winner))
            {
                return(BadRequest());
            }
            try
            {
                _context.Add(new UserFootballBet
                {
                    FootballBet = fb,
                    User        = caller,
                    bet         = order.bet,
                    winner      = order.winner,
                    homeGoals   = order.homeGoals,
                    awayGoals   = order.awayGoals
                });

                fb.usersJoined++;
                ugCaller.coins -= order.bet;
                _context.Update(ugCaller);
                _context.Update(fb);

                _context.SaveChanges();

                return(Ok(GroupPageManager.GetPage(caller, group, _context)));
            }
            catch (Exception)
            {
                return(StatusCode(500));
            }
        }