2023-08-05 14:50:04 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
load board columns
diff --git a/data.lua b/data.lua index 66fb8cf..77088e8 100644 --- a/data.lua +++ b/data.lua @@ -243,30 +243,40 @@ function Model:get_comments(ticket_id) end -- return a list of columns ordered by state ID --- each column is a list of cards ordered by time --- column[0] contains extra info: `name` --- each card is a ticket DB object with keys `proj_name` and `user_name` added +-- each column is a list of cards ordered by priority +-- each card is a ticket DB object with some keys added: +-- author_nick, author_name, proj_name function Model:get_board(user_id, proj_id) - -- TODO: filter by proj_id if it's not nil + local filter = "" + if proj_id ~= nil then + filter = " AND Ticket.proj_id = ?" + end local query = [[ - SELECT - Ticket.*, - User.name AS author_name, + SELECT + Ticket.*, + User.nick AS author_nick, + User.name AS author_name, Project.name AS proj_name - FROM - Membership - JOIN - Project ON Membership.proj_id = Project.id - JOIN - Ticket ON Project.id = Ticket.proj_id - JOIN - User ON Ticket.user_id = User.id - WHERE - Membership.user_id = ?; + FROM Membership + JOIN Project ON Membership.proj_id = Project.id + JOIN Ticket ON Project.id = Ticket.proj_id + JOIN User ON Ticket.user_id = User.id + WHERE Membership.user_id = ?]]..filter..[[ + ORDER BY Ticket.priority DESC; ]] - local tickets = self.db:execute(query, user_id) + local tickets + if proj_id ~= nil then + tickets = self.db:execute(query, user_id, proj_id) + else + tickets = self.db:execute(query, user_id) + end local columns = {} - -- TODO: fill columns from DB data + for i = 1, #self.states do + table.insert(columns, {}) + end + for i, ticket in ipairs(tickets) do + table.insert(columns[ticket.state_id], ticket) + end return columns end diff --git a/skopos.lua b/skopos.lua index 9764bfc..98735a5 100644 --- a/skopos.lua +++ b/skopos.lua @@ -48,8 +48,9 @@ function App:routes() local user = self:get_user(req) if user == nil then return "/login", 303 end -- TODO: set proj_id + local states = self.model.states local columns = self.model:get_board(user.id) - local env = {title=self.title, user=user, columns=columns} + local env = {title=self.title, user=user, states=states, columns=columns} return lud.template.render_file("view/home.html", env) end}, {"GET", "/join", @@ -154,8 +155,12 @@ function App:routes() if user == nil then return "/login", 303 end local proj = self.model:get_user_project(user.id, name) if proj == nil then return "not found", 404 end + local states = self.model.states local columns = self.model:get_board(user.id, proj.id) - local env = {title=self.title, user=user, proj=proj, columns=columns} + local env = { + title=self.title, user=user, proj=proj, + states=states, columns=columns + } return lud.template.render_file("view/proj.html", env) end}, {"POST", "/p", diff --git a/view/home.html b/view/home.html index a3cfb8a..ca64feb 100644 --- a/view/home.html +++ b/view/home.html @@ -17,9 +17,10 @@ <br> <h1 class="centered">Global Board</h1> <div class="kanban-board"> + % set state_id = 1 % for column in $columns do <div class="kanban-column"> - <h2>{{$column[0].name}}</h2> + <h2>{{$states[$state_id]}}</h2> % for card in $column do <div class="kanban-card"> <p>{{$card.title}}</p> @@ -30,6 +31,7 @@ </div> % end </div> + % set state_id = $state_id + 1 % end </div> </body> diff --git a/view/proj.html b/view/proj.html index dba801a..6a63fc1 100644 --- a/view/proj.html +++ b/view/proj.html @@ -16,9 +16,10 @@ <br> <h1 class="centered">{{$proj.name}} Board</h1> <div class="kanban-board"> + % set state_id = 1 % for column in $columns do <div class="kanban-column"> - <h2>{{$column[0].name}}</h2> + <h2>{{$states[$state_id]}}</h2> % for card in $column do <div class="kanban-card"> <p>{{$card.title}}</p> @@ -29,6 +30,7 @@ </div> % end </div> + % set state_id = $state_id + 1 % end </div> </body>