예제 #1
0
        /// <summary>
        /// Displays the information for a specific game
        /// </summary>
        /// <param name="id">ID of the game needing to be displayed</param>
        /// <returns>Returns a result based on status</returns>
        public ActionResult GameDetails(int id)
        {
            ActionResult response;
            ReviewVM     viewModel = new ReviewVM();

            //check id
            if (id > 0)
            {
                //if id is valid, access the database
                try
                {
                    //set game
                    GameDO gameDO = _GameDataAccess.ViewGameByID(id);
                    viewModel.Game = _GameMapper.MapDOtoPO(gameDO);

                    //instantiate lists
                    List <ReviewDO> gameReviews   = _ReviewDataAccess.ViewReviews();
                    List <ReviewPO> mappedReviews = new List <ReviewPO>();
                    viewModel.ReviewsList = new List <ReviewPO>();

                    //map reviews to a list of POs
                    foreach (ReviewDO reviewDO in gameReviews)
                    {
                        //get review information
                        ReviewPO reviewPO = _ReviewMapper.MapDOtoPO(reviewDO);

                        //get game information for title
                        GameDO reviewGame = _GameDataAccess.ViewGameByID(reviewPO.GameID);
                        reviewPO.GameTitle = gameDO.Title;

                        //get user information for username
                        UserDO userDO = _UserDataAccess.ViewUserByID(reviewPO.UserID);
                        reviewPO.Username = userDO.Username;

                        mappedReviews.Add(reviewPO);
                    }

                    //filter list and map to view model
                    viewModel.ReviewsList = mappedReviews.Where(n => n.GameID == viewModel.Game.GameID).ToList();

                    response = View(viewModel);
                }
                catch (Exception ex)
                {
                    //log error
                    _Logger.ErrorLog(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex);
                    response = RedirectToAction("Error", "Home");
                }
                finally { }
            }
            else
            {
                //if id is not valid, return to game list
                response = RedirectToAction("Index", "Game");
            }

            return(response);
        }
        /// <summary>
        /// Deletes a record from the database.
        /// </summary>
        /// <param name="id">ID of review needing to be deleted</param>
        /// <returns>Returns a result based on status</returns>
        public ActionResult DeleteReview(int id)
        {
            ActionResult response;

            //check if logged in
            if (Session["RoleID"] != null)
            {
                //if logged in, check id
                if (id > 0)
                {
                    //if id is valid, access database
                    try
                    {
                        //pull review data
                        ReviewDO reviewDO = _ReviewDataAccess.ViewReviewByID(id);

                        //check permissions
                        if (Session["UserID"] != null && (int)Session["UserID"] == reviewDO.UserID || (int)Session["RoleID"] == 6)
                        {
                            //if allowed, map, then run data access method
                            ReviewPO reviewPO = _ReviewMapper.MapDOtoPO(reviewDO);
                            _ReviewDataAccess.DeleteReview(reviewPO.ReviewID);

                            response = RedirectToAction("Index", "Review");
                        }
                        else
                        {
                            //if not allowed, redirect to login page
                            response = RedirectToAction("Login", "Account");
                        }
                    }
                    catch (Exception ex)
                    {
                        //log error
                        _Logger.ErrorLog(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex);
                        response = RedirectToAction("Error", "Home");
                    }
                    finally { }
                }
                else
                {
                    //if id is invalid, redirect to details
                    response = RedirectToAction("ReviewDetails", "Review");
                }
            }
            else
            {
                //if not logged in, redirect to login page
                response = RedirectToAction("Login", "Account");
            }

            return(response);
        }
        public ReviewPO MapDOtoPO(ReviewDO ReviewDO)
        {
            ReviewPO reviewPO = new ReviewPO();

            reviewPO.ReviewID   = ReviewDO.ReviewID;
            reviewPO.ReviewText = ReviewDO.ReviewText;
            reviewPO.DatePosted = ReviewDO.DatePosted;
            reviewPO.Category   = ReviewDO.Category;
            reviewPO.UserID     = ReviewDO.UserID;
            reviewPO.GameID     = ReviewDO.GameID;
            return(reviewPO);
        }
        public ReviewPO MapBOtoPO(ReviewBO reviewBO)
        {
            ReviewPO reviewPO = new ReviewPO();

            reviewPO.ReviewID   = reviewBO.ReviewID;
            reviewPO.ReviewText = reviewBO.ReviewText;
            reviewPO.DatePosted = reviewBO.DatePosted;
            reviewPO.Category   = reviewBO.Category;
            reviewPO.UserID     = reviewBO.UserID;
            reviewPO.GameID     = reviewBO.GameID;
            return(reviewPO);
        }
        public ReviewDO MapPOtoDO(ReviewPO reviewPO)
        {
            ReviewDO reviewDO = new ReviewDO();

            reviewDO.ReviewID   = reviewPO.ReviewID;
            reviewDO.ReviewText = reviewPO.ReviewText;
            reviewDO.DatePosted = reviewPO.DatePosted;
            reviewDO.Category   = reviewPO.Category;
            reviewDO.UserID     = reviewPO.UserID;
            reviewDO.GameID     = reviewPO.GameID;
            return(reviewDO);
        }
        public ActionResult CreateReview(ReviewPO reviewPO)
        {
            ActionResult response;

            //check if logged in
            if (Session["RoleID"] != null)
            {
                //if logged in, check model, then write to database
                try
                {
                    //check model
                    if (ModelState.IsValid)
                    {
                        //if model is valid, map from model to a DO
                        ReviewDO review = new ReviewDO()
                        {
                            ReviewText = reviewPO.ReviewText,
                            DatePosted = DateTime.Now.ToString(),
                            Category   = reviewPO.Category,
                            UserID     = (int)Session["UserID"],
                            GameID     = reviewPO.GameID,
                        };

                        //access database, write to the Reviews table
                        _ReviewDataAccess.CreateReview(review);

                        response = RedirectToAction("GameDetails", "Game", new { id = review.GameID });
                    }
                    else
                    {
                        //if model is not valid, return to the form

                        response = View(reviewPO);
                    }
                }
                catch (Exception ex)
                {
                    //log errors
                    _Logger.ErrorLog(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex);
                    response = View(reviewPO);
                }
                finally { }
            }
            else
            {
                //if not logged in, redirect to login page
                response = RedirectToAction("Login", "Account");
            }

            return(response);
        }
        /// <summary>
        /// Displays a list of reviews for a specific category.
        /// </summary>
        /// <param name="category">Category of a review to filter list</param>
        /// <returns>Returns a result based on status</returns>
        public ActionResult ReviewsByCategory(string category)
        {
            ActionResult response;
            ReviewVM     viewModel = new ReviewVM();

            try
            {
                //access database
                List <ReviewDO> allReviews = _ReviewDataAccess.ViewReviews();

                //instantiate new lists
                List <ReviewPO> mappedReviews = new List <ReviewPO>();
                viewModel.ReviewsList = new List <ReviewPO>();

                //add to view model
                foreach (ReviewDO reviewDO in allReviews)
                {
                    //get review information
                    ReviewPO reviewPO = _ReviewMapper.MapDOtoPO(reviewDO);

                    //get game title
                    GameDO gameDO = _GameDataAccess.ViewGameByID(reviewPO.GameID);
                    reviewPO.GameTitle = gameDO.Title;

                    //get username
                    UserDO userDO = _UserDataAccess.ViewUserByID(reviewPO.UserID);
                    reviewPO.Username = userDO.Username;

                    mappedReviews.Add(reviewPO);
                }

                //sort through list of reviews, add to view model
                viewModel.ReviewsList = mappedReviews.Where(n => n.Category == category).ToList();

                response = View(viewModel);
            }
            catch (Exception ex)
            {
                //log error
                _Logger.ErrorLog(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex);
                response = RedirectToAction("Error", "Home");
            }
            finally { }

            return(response);
        }
        /// <summary>
        /// Shows a list of all reviews in the database.
        /// </summary>
        /// <returns>Returns a result based on status</returns>
        public ActionResult Index()
        {
            ActionResult response;
            ReviewVM     viewModel = new ReviewVM();

            try
            {
                //access database
                List <ReviewDO> allReviews = _ReviewDataAccess.ViewReviews();

                viewModel.ReviewsList = new List <ReviewPO>();

                //add to view model
                foreach (ReviewDO reviewDO in allReviews)
                {
                    //set review information
                    ReviewPO reviewPO = _ReviewMapper.MapDOtoPO(reviewDO);

                    //get game title
                    GameDO gameDO = _GameDataAccess.ViewGameByID(reviewPO.GameID);
                    reviewPO.GameTitle = gameDO.Title;

                    //get username
                    UserDO userDO = _UserDataAccess.ViewUserByID(reviewPO.UserID);
                    reviewPO.Username = userDO.Username;

                    viewModel.ReviewsList.Add(reviewPO);
                }

                response = View(viewModel);
            }
            catch (Exception ex)
            {
                //log errors
                _Logger.ErrorLog(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex);
                response = RedirectToAction("Error", "Home");
            }
            finally { }

            return(response);
        }
        public ActionResult CreateReview(int gameID)
        {
            ActionResult response;

            //check if logged in
            if (Session["RoleID"] != null)
            {
                //if logged in, view the form

                ReviewPO reviewPO = new ReviewPO();

                try
                {
                    //access database, map to PO
                    GameDO gameDO = _GameDataAccess.ViewGameByID(gameID);
                    reviewPO.GameID    = gameDO.GameID;
                    reviewPO.GameTitle = gameDO.Title;

                    response = View(reviewPO);
                }
                //catch general exceptions
                catch (Exception ex)
                {
                    //log errors
                    _Logger.ErrorLog(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex);
                    response = RedirectToAction("Error", "Home");
                }
                finally { }
            }
            else
            {
                //not logged in, redirect to login
                response = RedirectToAction("Login", "Account");
            }

            return(response);
        }
        /// <summary>
        /// Displays the information for one user.
        /// </summary>
        /// <param name="id">ID of user needing to be displayed</param>
        /// <returns>Returns a result based on status</returns>
        public ActionResult UserDetails(int id)
        {
            ActionResult response;

            ReviewVM viewModel = new ReviewVM();

            //check for permissions
            if (Session["UserID"] != null && (int)Session["UserID"] == id || Session["RoleID"] != null && (int)Session["RoleID"] == 6)
            {
                //if allowed, access the database
                try
                {
                    //access database, map to presentation, add to view model
                    //get user information
                    UserDO user = _UserDataAccess.ViewUserByID(id);
                    viewModel.User = _Mapper.MapDOtoPO(user);

                    //get role information for role name
                    RoleDO role = _RoleDataAccess.ViewRoleByID(user.RoleID);
                    viewModel.User.RoleName = role.RoleName;

                    //get user's most frequent category
                    viewModel.UserFavCategory = _reviewMapper.MapDOtoPO(_ReviewDataAccess.UserFavoriteCategory(viewModel.User.UserID));

                    //check id
                    if (viewModel.User.UserID > 0)
                    {
                        //if id is valid, access database
                        List <ReviewDO> gameReviews = _ReviewDataAccess.ViewReviews();

                        //instantiate new lists
                        List <ReviewPO> mappedReviews = new List <ReviewPO>();
                        viewModel.ReviewsList = new List <ReviewPO>();

                        //map to presenation, add to view model
                        foreach (ReviewDO reviewDO in gameReviews)
                        {
                            //map review information
                            ReviewPO reviewPO = _reviewMapper.MapDOtoPO(reviewDO);

                            //get game information for title
                            GameDO gameDO = _GameDataAccess.ViewGameByID(reviewPO.GameID);
                            reviewPO.GameTitle = gameDO.Title;

                            //get user information for username
                            UserDO userDO = _UserDataAccess.ViewUserByID(reviewPO.UserID);
                            reviewPO.Username = userDO.Username;

                            mappedReviews.Add(reviewPO);
                        }

                        //filter list by user, add to view model
                        viewModel.ReviewsList = mappedReviews.Where(n => n.UserID == viewModel.User.UserID).ToList();

                        response = View(viewModel);
                    }
                    else
                    {
                        //if model state is not valid, display error screen
                        response = RedirectToAction("Error", "Home");
                    }
                }
                catch (Exception ex)
                {
                    //log error
                    _Logger.ErrorLog(MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex);

                    //display error page
                    response = RedirectToAction("Error", "Home");
                }
                finally { }
            }
            else
            {
                //if not logged in, redirect to login page
                response = RedirectToAction("Login", "Account");
            }

            return(response);
        }