Beispiel #1
0
        public BoardColumnController()
        {
            Get("/api/v1/board_column/get", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameter("board_column_guid"),
                    new ExistsInTable("board_column_guid", "board_columns", "guid")
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                return(HttpResponse.Item("board_column", new BoardColumnTransformer().Transform(
                                             BoardColumnRepository.FindByGuid((string)Request.Query["board_column_guid"])
                                             )));
            });

            Get("/api/v1/board/columns/get", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameter("board_guid"),
                    new ExistsInTable("board_guid", "boards", "guid")
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var board = BoardRepository.FindByGuid(GetRequestStr("board_guid"));

                return(HttpResponse.Item("board_columns", new BoardColumnTransformer().Many(board.Columns())));
            });
        }
        public void Create_DataCorrect_BoardColumnCreated()
        {
            var user    = UserFaker.Create();
            var board   = BoardFaker.Create(user);
            var browser = new Browser(new DefaultNancyBootstrapper());

            var boardColumnTitle = "testBoard" + Rand.SmallInt();
            var boardOrder       = Convert.ToString(Rand.IntRange(0, 25));

            var result = browser.Post("/api/v1/board_column/create", with => {
                with.HttpRequest();
                with.Query("api_token", Jwt.FromUserId(user.id));
                with.Query("name", boardColumnTitle);
                with.Query("board_guid", board.guid);
                with.Query("board_order", boardOrder);
            }).Result;

            Assert.AreEqual(HttpStatusCode.Created, result.StatusCode);

            var json = JObject.Parse(result.Body.AsString());

            var guid = json["data"]["board_column"].Value <string>("guid") ?? "";

            var createdBoardColumn = BoardColumnRepository.FindByGuid(guid);

            Assert.NotNull(createdBoardColumn);
            Assert.AreEqual(boardColumnTitle, createdBoardColumn.name);
            Assert.AreEqual(boardOrder, Convert.ToString(createdBoardColumn.board_order));
            Assert.AreEqual(
                createdBoardColumn.guid, json["data"]["board_column"].Value <string>("guid") ?? ""
                );
        }
        public static BoardColumnModel Create(UserModel user = null)
        {
            user = user ?? UserFaker.Create();
            var board = BoardFaker.Create(user);

            return(BoardColumnRepository.CreateAndGet(
                       "boardColumnName_" + Rand.SmallInt(),
                       board,
                       Convert.ToInt16(Rand.IntRange(0, 20))
                       ));
        }
Beispiel #4
0
        public static CardModel UpdateAndRefresh(CardModel model, JObject data)
        {
            var column = BoardColumnRepository.FindByGuid(data.Value <string>("column_guid"));

            if (column != null)
            {
                model.column_id = column.id;
            }

            model.name         = data.Value <string>("name") ?? model.name;
            model.column_order = data.Value <int?>("column_order") ?? model.column_order;
            model.description  = data.Value <string>("description") ?? model.description;
            return(model.Save());
        }
Beispiel #5
0
        public static bool HasEntityPermission(User user, int entityId, EntityType entityType)
        {
            if (!EntityUtils.IsEntityExists(entityId, entityType))
            {
                return(false);
            }
            switch (entityType)
            {
            case EntityType.Project:
                var project = ProjectRepository.Find(entityId);
                if (project != null && ProjectTeamMemberRepository.IsExists(project, user))
                {
                    return(true);
                }
                break;

            case EntityType.Board:
                var board = BoardRepository.Find(entityId);
                if (board != null && ProjectTeamMemberRepository.IsExists(board.Project(), user))
                {
                    return(true);
                }
                break;

            case EntityType.BoardColumn:
                var column = BoardColumnRepository.Find(entityId);
                if (column != null && ProjectTeamMemberRepository.IsExists(column.Board().Project(), user))
                {
                    return(true);
                }
                break;

            case EntityType.Card:
                var card = CardRepository.Find(entityId);
                // TODO: optimize?
                if (card != null && ProjectTeamMemberRepository.IsExists(card.Column().Board().Project(), user))
                {
                    return(true);
                }
                break;
            }
            return(false);
        }
        public void Delete_DataCorrect_BoardColumnDeleted()
        {
            var browser = new Browser(new DefaultNancyBootstrapper());

            var me          = UserFaker.Create();
            var boardColumn = BoardColumnFaker.Create(me);

            Assert.NotNull(BoardColumnRepository.Find(boardColumn.id));

            var result = browser.Delete("/api/v1/board_column/delete", with => {
                with.HttpRequest();
                with.Query("api_token", Jwt.FromUserId(me.id));
                with.Query("board_column_guid", boardColumn.guid);
            }).Result;

            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);

            Assert.IsNull(BoardColumnRepository.Find(boardColumn.id));
        }
Beispiel #7
0
        public static void Run(DL.Model.Project.Project project, User creator)
        {
            if (creator != null)
            {
                ProjectTeamMemberRepository.CreateAndGet(project, creator);
                UserLibraryItemRepository.FindOrCreate(project.Creator(), project);
            }

            ProjectAliasRepository.Create(project);
            ProjectWorkUtils.SetUp(project);

            // Basic boards set up
            var board      = BoardRepository.CreateAndGet("Development", "Basic board", project, creator);
            var todoColumn = BoardColumnRepository.CreateAndGet("TODO", board, 1);

            BoardColumnRepository.CreateAndGet("In progress", board, 2);
            BoardColumnRepository.CreateAndGet("Done", board, 3);
            CardRepository.CreateAndGet(
                "Example card", DefaultCardDescription, 1, todoColumn, creator
                );
        }
        public CardController()
        {
            Get("/api/v1/card/get", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameter("card_guid"),
                    new ExistsInTable("card_guid", "cards", "guid")
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                return(HttpResponse.Item("card", new CardTransformer().Transform(
                                             CardRepository.FindByGuid((string)Request.Query["card_guid"])
                                             )));
            });

            Get("/api/v1/cards/get", _ => {
                var page = GetRequestInt("page");
                page     = page > 0 ? page : 1;

                var pageSize = 25;
                return(HttpResponse.Data(new JObject()
                {
                    ["cards"] = new CardTransformer().Many(
                        DL.Model.Card.Card.Paginate(page, pageSize)
                        ),
                    ["meta"] = new JObject()
                    {
                        ["pages_count"] = (DL.Model.Card.Card.Count() / pageSize) + 1,
                        ["current_page"] = page
                    }
                }));
            });

            Get("/api/v1/project/cards/get", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameter("project_guid"),
                    new ExistsInTable("project_guid", "projects", "guid")
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var page = GetRequestInt("page");
                page     = page > 0 ? page : 1;

                var pageSize = 25;

                var project = ProjectRepository.FindByGuid(GetRequestStr("project_guid"));

                return(HttpResponse.Data(new JObject()
                {
                    ["cards"] = new CardTransformer().Many(project.Cards(page, pageSize)),
                    ["meta"] = new JObject()
                    {
                        ["pages_count"] = (project.CardsCount() / pageSize) + 1,
                        ["current_page"] = page
                    }
                }));
            });

            Get("/api/v1/board_column/cards/get", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameter("column_guid"),
                    new ExistsInTable("column_guid", "board_columns", "guid")
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var column = BoardColumnRepository.FindByGuid(GetRequestStr("column_guid"));

                var page = GetRequestInt("page");
                page     = page > 0 ? page : 1;

                var pageSize = 25;

                return(HttpResponse.Data(new JObject()
                {
                    ["cards"] = new CardTransformer().Many(column.Cards(page, pageSize)),
                    ["meta"] = new JObject()
                    {
                        ["pages_count"] = (column.CardsCount() / pageSize) + 1,
                        ["current_page"] = page
                    }
                }));
            });
        }
        public BoardColumnCrudController()
        {
            Post("/api/v1/board_column/create", _ => {
                var me    = UserRepository.Find(CurrentRequest.UserId);
                var board = BoardRepository.FindByGuid(GetRequestStr("board_guid"));

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "name", "board_guid", "board_order" }),
                    new ExistsInTable("board_guid", "boards", "guid"),
                    new HasPermission(me, board.Project().id, EntityType.Project)
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var boardOrder = (short)Request.Query["board_order"];

                if (BoardColumnRepository.Find(board, boardOrder) != null)
                {
                    return(HttpResponse.Error(HttpStatusCode.Conflict,
                                              "Board's column with this board's order already exists "));
                }

                var boardColumn = BoardColumnRepository.CreateAndGet(
                    (string)Request.Query["name"],
                    board,
                    boardOrder
                    );

                return(HttpResponse.Item(
                           "board_column", new BoardColumnTransformer().Transform(boardColumn), HttpStatusCode.Created
                           ));
            });

            Patch("/api/v1/board_column/edit", _ => {
                var me          = UserRepository.Find(CurrentRequest.UserId);
                var boardColumn = BoardColumnRepository.FindByGuid(GetRequestStr("board_column_guid"));
                var board       = BoardRepository.Find(boardColumn.board_id);

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "board_column_guid" }),
                    new ExistsInTable("board_column_guid", "board_columns", "guid"),
                    new HasPermission(me, boardColumn.Board().id, EntityType.Board)
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                if (BoardColumnRepository.Find(board, Convert.ToInt16(GetRequestStr("board_order"))) != null)
                {
                    return(HttpResponse.Error(HttpStatusCode.Conflict,
                                              "Board's column with this board's order already exists "));
                }

                boardColumn = BoardColumnRepository.UpdateAndRefresh(boardColumn, new JObject()
                {
                    ["name"]        = GetRequestStr("name"),
                    ["board_order"] = GetRequestStr("board_order")
                });

                return(HttpResponse.Item("board_column", new BoardColumnTransformer().Transform(boardColumn)));
            });

            Delete("/api/v1/board_column/delete", _ => {
                var me          = UserRepository.Find(CurrentRequest.UserId);
                var boardColumn = BoardColumnRepository.FindByGuid(GetRequestStr("board_column_guid"));

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "board_column_guid" }),
                    new ExistsInTable("board_column_guid", "board_columns", "guid"),
                    new HasPermission(me, boardColumn.Board().id, EntityType.Board)
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                boardColumn.Delete();

                return(HttpResponse.Item("board", new BoardColumnTransformer().Transform(boardColumn)));
            });
        }
Beispiel #10
0
        public CardCrudController()
        {
            Post("/api/v1/card/create", _ => {
                var me     = UserRepository.Find(CurrentRequest.UserId);
                var column = BoardColumnRepository.FindByGuid(GetRequestStr("column_guid"));
                var board  = column.Board();

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "name", "column_guid" }),
                    new ExistsInTable("column_guid", "board_columns", "guid"),
                    new HasPermission(me, board.id, EntityType.Board)
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }
                var description = (string)Request.Query["description"] ?? "";
                int columnOrder = Request.Query["column_order"] ?? 0;

                var card = CardRepository.CreateAndGet(
                    (string)Request.Query["name"],
                    description,
                    columnOrder,
                    column,
                    me
                    );

                return(HttpResponse.Item(
                           "card", new CardTransformer().Transform(card), HttpStatusCode.Created
                           ));
            });

            Patch("/api/v1/card/edit", _ => {
                var me   = UserRepository.Find(CurrentRequest.UserId);
                var card = CardRepository.FindByGuid(GetRequestStr("card_guid"));

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "card_guid" }),
                    new ExistsInTable("card_guid", "cards", "guid"),
                    new HasPermission(me, card.id, EntityType.Card)
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                card = CardRepository.UpdateAndRefresh(card, new JObject()
                {
                    ["name"]         = GetRequestStr("name"),
                    ["description"]  = GetRequestStr("description"),
                    ["column_order"] = GetRequestStr("column_order"),
                    ["column_guid"]  = GetRequestStr("column_guid"),
                });

                return(HttpResponse.Item("card", new CardTransformer().Transform(card)));
            });

            Delete("/api/v1/card/delete", _ => {
                var me   = UserRepository.Find(CurrentRequest.UserId);
                var card = CardRepository.FindByGuid(GetRequestStr("card_guid"));

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "card_guid" }),
                    new ExistsInTable("card_guid", "cards", "guid"),
                    new HasPermission(me, card.id, EntityType.Card)
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                card.Delete();

                return(HttpResponse.Item("card", new CardTransformer().Transform(card)));
            });
        }