示例#1
0
    // Use this for initialization
    void Start()
    {
        menu        = GameObject.FindGameObjectWithTag("MainMenu").GetComponent <MenuMove>();
        moveSpeed   = 8f;
        moveSpeedX  = 0.2f;
        moveSpeedY  = 0.04f;
        rotateSpeed = 2.5f;
        moving      = false;

        holdMoved       = false;
        rotateMoved     = false;
        touchTimer      = 0;
        touchDelayTimer = 0;
    }
        public MenuResult UpdateMenu(
            AuthIdentity identity,
            Guid? menuId,
            Guid[] recipesAdd,
            Guid[] recipesRemove,
            MenuMove[] recipesMove,
            bool clear,
            string newName = null)
        {
            var menuResult = new MenuResult();
            menuResult.MenuUpdated = true; // TODO: Verify actual changes were made before setting MenuUpdated to true

            using (var session = this.GetSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    Menus dbMenu = null;
                    IList<Favorites> dbRecipes;
                    if (menuId.HasValue)
                    {
                        dbMenu = session
                            .QueryOver<Menus>()
                            .Fetch(prop => prop.Recipes).Eager
                            .Where(p => p.MenuId == menuId)
                            .SingleOrDefault();

                        if (dbMenu == null)
                        {
                            throw new MenuNotFoundException();
                        }

                        if (dbMenu.UserId != identity.UserId)
                        {
                            throw new UserDoesNotOwnMenuException();
                        }

                        if (!string.IsNullOrWhiteSpace(newName))
                        {
                            dbMenu.Title = newName.Trim();
                        }

                        dbRecipes = dbMenu.Recipes;
                    }
                    else
                    {
                        dbRecipes = session
                            .QueryOver<Favorites>()
                            .Where(p => p.UserId == identity.UserId)
                            .Where(p => p.Menu == null)
                            .List();
                    }

                    if (recipesAdd.Any())
                    {
                        var existing = from r in dbRecipes
                                       select r.Recipe.RecipeId;
                        recipesAdd = recipesAdd.Except(existing).ToArray();

                        foreach (var rid in recipesAdd)
                        {
                            var fav = new Favorites
                            {
                                UserId = identity.UserId,
                                Recipe = new Recipes { RecipeId = rid },
                                Menu = dbMenu
                            };

                            session.Save(fav);
                        }
                    }

                    if (recipesRemove.Any())
                    {
                        var toDelete = from r in dbRecipes
                                       where recipesRemove.Contains(r.Recipe.RecipeId)
                                       select r;
                        toDelete.ForEach(session.Delete);
                    }

                    if (clear)
                    {
                        dbRecipes.ForEach(session.Delete);
                    }

                    if (recipesMove.Any())
                    {
                        foreach (var moveAction in recipesMove)
                        {
                            Menus dbTarget = null;
                            if (moveAction.TargetMenu.HasValue)
                            {
                                dbTarget = session
                                    .QueryOver<Menus>()
                                    .Where(p => p.MenuId == moveAction.TargetMenu.Value)
                                    .Where(p => p.UserId == identity.UserId)
                                    .SingleOrDefault();

                                if (dbTarget == null)
                                {
                                    throw new MenuNotFoundException(moveAction.TargetMenu.Value);
                                }
                            }

                            var rToMove = moveAction.MoveAll
                               ? dbRecipes
                               : dbRecipes.Where(r => moveAction.RecipesToMove.Contains(r.Recipe.RecipeId));

                            rToMove.ForEach(a => a.Menu = dbTarget);
                        }
                    }

                    transaction.Commit();
                }
            }

            return menuResult;
        }