login

<     >

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>