public IActionResult CreateTournament()
        {
            if (TempData.ContainsKey("ViewModel"))
            {
                return(View("TournamentManagement", TempData.Get <TournamentManagementViewModel>("ViewModel")));
            }

            var viewModel = new TournamentManagementViewModel {
                StartDate = DateTime.Now,
                EndDate   = DateTime.Now
            };

            return(View("TournamentManagement", viewModel));
        }
        public async Task <IActionResult> CreateTournament([FromForm] TournamentManagementViewModel tournament)
        {
            if (!ModelState.IsValid)
            {
                tournament.Result = new BaseResponseWrapper
                {
                    StatusCode = Models.Responses.StatusCode.BadRequest,
                    Message    = "The tournament team data sent is not valid"
                };
                TempData.Set("ViewModel", tournament);

                return(RedirectToAction(nameof(CreateTournament)));
            }

            try
            {
                await fantasySoccerService.AddTournamentAsync(new Tournament
                {
                    Name      = tournament.Name,
                    StartDate = tournament.StartDate,
                    EndDate   = tournament.EndDate
                });

                tournament.Result = new BaseResponseWrapper
                {
                    StatusCode = Models.Responses.StatusCode.OK,
                    Message    = "The tournament team has been created successfully"
                };
                TempData.Set("Result", tournament.Result);

                return(RedirectToAction(nameof(TournamentManagement)));
            }
            catch (Exception exception)
            {
                var statusCode = exception is TournamentStartDateMustBeOlderThanEndDateException ? Models.Responses.StatusCode.BadRequest : Models.Responses.StatusCode.InternalServerError;
                tournament.Result = new BaseResponseWrapper
                {
                    StatusCode = statusCode,
                    Message    = exception.Message
                };
                TempData.Set("ViewModel", tournament);

                return(RedirectToAction(nameof(CreateTournament)));
            }
        }
        public async Task <IActionResult> TournamentManagement()
        {
            if (TempData.ContainsKey("ViewModel"))
            {
                return(View("TournamentManagement", TempData.Get <TournamentManagementViewModel>("ViewModel")));
            }

            var tournament = await fantasySoccerService.GetCurrentTournament();

            var tournamentEdit = new TournamentManagementViewModel
            {
                Id        = tournament.ID,
                Name      = tournament.Name,
                EndDate   = tournament.EndDate,
                StartDate = tournament.StartDate,
                Result    = TempData.Get <BaseResponseWrapper>("Result")
            };

            return(View("TournamentManagement", tournamentEdit));
        }
        public async Task <IActionResult> TournamentManagement([FromForm] TournamentManagementViewModel editedTournament)
        {
            if (!ModelState.IsValid)
            {
                editedTournament.Result = new BaseResponseWrapper
                {
                    StatusCode = Models.Responses.StatusCode.BadRequest,
                    Message    = "The tournament team data sent is not valid"
                };
            }

            try
            {
                var tournament = await fantasySoccerService.GetCurrentTournament();

                tournament.ID        = editedTournament.Id;
                tournament.Name      = editedTournament.Name;
                tournament.StartDate = editedTournament.StartDate;
                tournament.EndDate   = editedTournament.EndDate;

                await fantasySoccerService.UpdateTournament(tournament);

                editedTournament.Result = new BaseResponseWrapper
                {
                    StatusCode = Models.Responses.StatusCode.OK,
                    Message    = "The tournament team has been updated successfully"
                };
            }
            catch (Exception exception)
            {
                var statusCode = exception is TournamentStartDateMustBeOlderThanEndDateException ? Models.Responses.StatusCode.BadRequest : Models.Responses.StatusCode.InternalServerError;
                editedTournament.Result = new BaseResponseWrapper
                {
                    StatusCode = statusCode,
                    Message    = exception.Message
                };
            }

            TempData.Set("ViewModel", editedTournament);
            return(RedirectToAction(nameof(TournamentManagement)));
        }