diff --git a/App/DL/Model/Card/Card.cs b/App/DL/Model/Card/Card.cs index 742f0d8..cb70930 100644 --- a/App/DL/Model/Card/Card.cs +++ b/App/DL/Model/Card/Card.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using App.DL.Model.Work; +using App.DL.Repository.Project; using Dapper; using UserModel = App.DL.Model.User.User; using BoardColumnModel = App.DL.Model.BoardColumn.BoardColumn; @@ -79,7 +80,16 @@ public Card Save() { public Board.Board Board() => Column().Board(); - public Project.Project Project() => Board().Project(); + public Project.Project Project() { + var projectId = ExecuteScalarInt(@"SELECT projects.id + FROM cards + LEFT JOIN board_columns ON cards.column_id = board_columns.id + LEFT JOIN boards ON board_columns.board_id = boards.id + LEFT JOIN projects ON boards.project_id = projects.id + WHERE cards.id = @id LIMIT 1; + ", new {id}); + return ProjectRepository.Find(projectId); + } public UserModel Creator() => UserModel.Find(creator_id); diff --git a/App/DL/Model/Project/Project.cs b/App/DL/Model/Project/Project.cs index d24e111..7092a10 100644 --- a/App/DL/Model/Project/Project.cs +++ b/App/DL/Model/Project/Project.cs @@ -120,6 +120,17 @@ public Board.Board[] Boards(int limit = 10) new {project_id = id, limit} ).ToArray(); + public Card.Card[] Cards() + => Connection().Query( + @"SELECT cards.* + FROM projects + LEFT JOIN boards ON projects.id = boards.project_id + LEFT JOIN board_columns ON boards.id = board_columns.board_id + LEFT JOIN cards on board_columns.id = cards.column_id + WHERE projects.id = @project_id AND cards.id IS NOT NULL + GROUP BY cards.id;", new {project_id = id} + ).ToArray(); + public ProjectWorkType[] WorkTypes(int limit = 10) => Connection().Query( @"SELECT * FROM project_work_types WHERE project_id = @project_id LIMIT @limit", @@ -135,6 +146,12 @@ public bool InLibrary(UserModel user) , new {project_id = id, user_id = user.id} ) > 0; + public static Project[] Paginate(int page, int size = 20) + => Connection().Query( + "SELECT * FROM projects OFFSET @offset LIMIT @size", + new {offset = ((page - 1) * size), size} + ).ToArray(); + public int StarsCount() => ExecuteScalarInt( "SELECT COUNT(*) FROM user_projects_library WHERE project_id = @id", new {id} ); diff --git a/Tests/App/DL/Model/Card/CardTests.cs b/Tests/App/DL/Model/Card/CardTests.cs index de4d5ed..33ff6a5 100644 --- a/Tests/App/DL/Model/Card/CardTests.cs +++ b/Tests/App/DL/Model/Card/CardTests.cs @@ -23,5 +23,12 @@ public void Create_Card() Assert.AreEqual(card.name, name); Assert.AreEqual(card.column_id, column.id); } + + [Test] + public void Project_Ok() { + var card = CardFaker.Create(); + + Assert.NotNull(card.Project()); + } } } \ No newline at end of file diff --git a/Tests/App/DL/Model/Project/ProjectTests.cs b/Tests/App/DL/Model/Project/ProjectTests.cs new file mode 100644 index 0000000..610e60a --- /dev/null +++ b/Tests/App/DL/Model/Project/ProjectTests.cs @@ -0,0 +1,17 @@ +using System.Linq; +using NUnit.Framework; +using Tests.Testing; +using Tests.Utils.Fake.Card; + +namespace Tests.App.DL.Model.Project { + public class ProjectTests : BaseTestFixture { + [Test] + public void Cards_Ok() { + var card = CardFaker.Create(); + var project = card.Project(); + + var foundCard = project.Cards().Where(c => c.id == card.id).ToArray()[0]; + Assert.AreEqual(card.id, foundCard.id); + } + } +} \ No newline at end of file