login

<     >

2023-08-04 17:14:50 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

update paths again

for backend ideally we should use this pattern for CRUD:
  C   POST /obj
  R    GET /obj/{id}
  U    PUT /obj/{id}
  D DELETE /obj/{id}
but HTML forms only support GET and POST methods
in order to avoid JS, let's use this pattern for now:
  C POST /obj
  R  GET /obj/{id}
  U POST /obj/{id}/put
  D POST /obj/{id}/del
also these GET paths are used for UI:
  /obj            -- list objects
  /obj/new        -- show form to create a new object
  /obj/{id}/edit  -- show form to edit an object

diff --git a/skopos.lua b/skopos.lua
index fb21c7a..a2cfda4 100644
--- a/skopos.lua
+++ b/skopos.lua
@@ -109,7 +109,7 @@ function App:routes()
         end
         return "/login", 303
     end},
-    {"GET", "/invites",
+    {"GET", "/i",
     function (req)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
@@ -117,21 +117,21 @@ function App:routes()
         local env = {title=self.title, invites=invites}
         return lud.template.render_file("view/invites.html", env)
     end},
-    {"POST", "/new/invite",
+    {"POST", "/i",
     function (req)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
         self.model:create_invite(user.id)
         self:log(LOG_INFO, "user "..user.nick.." generated a new invite")
-        return "/invites", 303
+        return "/i", 303
     end},
-    {"POST", "/del/invite/([%x]+)",
+    {"POST", "/i/([%x]+)/del",
     function (req, uuid)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
         self.model:del_invite(user.id, uuid)
         self:log(LOG_INFO, "user "..user.nick.." canceled invite "..uuid)
-        return "/invites", 303
+        return "/i", 303
     end},
     {"GET", "/p",
     function (req)
@@ -141,6 +141,13 @@ function App:routes()
         local env = {title=self.title, user=user, projs=projs}
         return lud.template.render_file("view/projs.html", env)
     end},
+    {"GET", "/p/new",
+    function (req)
+        local user = self:get_user(req)
+        if user == nil then return "/login", 303 end
+        local env = {title=self.title, user=user}
+        return lud.template.render_file("view/proj_form.html", env)
+    end},
     {"GET", "/p/([-_%w]+)",
     function (req, name)
         local user = self:get_user(req)
@@ -151,14 +158,7 @@ function App:routes()
         local env = {title=self.title, user=user, proj=proj, columns=columns}
         return lud.template.render_file("view/proj.html", env)
     end},
-    {"GET", "/new/project",
-    function (req)
-        local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
-        local env = {title=self.title, user=user}
-        return lud.template.render_file("view/proj_form.html", env)
-    end},
-    {"POST", "/new/project",
+    {"POST", "/p",
     function (req)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
@@ -180,7 +180,7 @@ function App:routes()
         local env = {title=self.title, user=user, proj=proj}
         return lud.template.render_file("view/proj_form.html", env)
     end},
-    {"POST", "/upd/project/([-_%w]+)",
+    {"POST", "/p/([-_%w]+)/put",
     function (req, old_name)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
@@ -193,7 +193,7 @@ function App:routes()
         self:log(LOG_INFO, "user "..user.nick.." edited project "..old_name)
         return "/p", 303
     end},
-    {"POST", "/del/project/([-_%w]+)",
+    {"POST", "/p/([-_%w]+)/del",
     function (req, name)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
@@ -204,6 +204,15 @@ function App:routes()
         end
         return "/p", 303
     end},
+    {"GET", "/p/([-_%w]+)/t/new",
+    function (req, name)
+        local user = self:get_user(req)
+        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 env = {title=self.title, user=user, proj=proj}
+        return lud.template.render_file("view/ticket_form.html", env)
+    end},
     {"GET", "/p/([-_%w]+)/t/(%d+)",
     function (req, name, code)
         local user = self:get_user(req)
@@ -217,16 +226,7 @@ function App:routes()
         local env = {title=self.title, user=user, proj=proj, tick=tick, comments=comments}
         return lud.template.render_file("view/ticket.html", env)
     end},
-    {"GET", "/p/([-_%w]+)/new/ticket",
-    function (req, name)
-        local user = self:get_user(req)
-        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 env = {title=self.title, user=user, proj=proj}
-        return lud.template.render_file("view/ticket_form.html", env)
-    end},
-    {"POST", "/p/([-_%w]+)/new/ticket",
+    {"POST", "/p/([-_%w]+)/t",
     function (req, name)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
@@ -250,7 +250,7 @@ function App:routes()
         local env = {title=self.title, user=user, proj=proj, tick=tick}
         return lud.template.render_file("view/ticket_form.html", env)
     end},
-    {"POST", "/p/([-_%w]+)/upd/ticket/(%d+)",
+    {"POST", "/p/([-_%w]+)/t/(%d+)/put",
     function (req, name, code)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end
@@ -265,7 +265,7 @@ function App:routes()
         self:log(LOG_INFO, "user "..user.nick.." edited ticket "..name.."#"..code)
         return "/p/"..name.."/t/"..code, 303
     end},
-    {"POST", "/p/([-_%w]+)/del/ticket/(%d+)",
+    {"POST", "/p/([-_%w]+)/t/(%d+)/del",
     function (req, name, code)
         local user = self:get_user(req)
         if user == nil then return "/login", 303 end

diff --git a/view/home.html b/view/home.html
index e19ac1a..a3cfb8a 100644
--- a/view/home.html
+++ b/view/home.html
@@ -12,7 +12,7 @@
 <body>
   <div class="centered menu">
     <a href="/p">projects</a>
-    <a href="/invites">invites</a>
+    <a href="/i">invites</a>
   </div>
   <br>
   <h1 class="centered">Global Board</h1>

diff --git a/view/invites.html b/view/invites.html
index a5e477c..4f387bd 100644
--- a/view/invites.html
+++ b/view/invites.html
@@ -11,7 +11,7 @@
 </head>
 <body>
   <h1 class="centered">Invites</h1>
-  <form class="centered" action="/new/invite" method="post">
+  <form class="centered" action="/i" method="post">
     <button type="submit">new</button>
   </form>
   <br>
@@ -26,7 +26,7 @@
         <td><a href="/join?invite={{$invite.uuid}}" class="mono">{{$invite.uuid}}</a></td>
         <td>{{os.date("%Y-%m-%d %H:%M:%S", $invite.expire)}}</td>
         <td>
-          <form action="/del/invite/{{$invite.uuid}}" method="post">
+          <form action="/i/{{$invite.uuid}}/del" method="post">
             <button type="submit">cancel</button>
           </form>
         </td>

diff --git a/view/proj.html b/view/proj.html
index f1a8d6e..dba801a 100644
--- a/view/proj.html
+++ b/view/proj.html
@@ -11,7 +11,7 @@
 </head>
 <body>
   <div class="centered menu">
-    <a href="/p/{{$proj.name}}/new/ticket">new ticket</a>
+    <a href="/p/{{$proj.name}}/t/new">new ticket</a>
   </div>
   <br>
   <h1 class="centered">{{$proj.name}} Board</h1>

diff --git a/view/proj_form.html b/view/proj_form.html
index 6d0d018..e856365 100644
--- a/view/proj_form.html
+++ b/view/proj_form.html
@@ -11,11 +11,11 @@
 <body>
   <h1 class="centered">Project</h1>
   % if $proj == nil then
-  %   set action = "/new/project"
+  %   set action = "/p"
   %   set proj = {name="", desc="", goal="", color="#000000", priority=0}
   %   set submit_value = "Create"
   % else
-  %   set action = "/upd/project/" .. $proj.name
+  %   set action = "/p/" .. $proj.name .. "/put"
   %   set submit_value = "Save"
   % end
   <form action="{{$action}}" method="post">

diff --git a/view/projs.html b/view/projs.html
index 438484b..a96457c 100644
--- a/view/projs.html
+++ b/view/projs.html
@@ -10,7 +10,7 @@
 </head>
 <body>
   <h1 class="centered">Projects</h1>
-  <div class="centered"><a href="/new/project">new</a></div>
+  <div class="centered"><a href="/p/new">new</a></div>
   <br>
   <table class="center">
     <tr>
@@ -29,7 +29,7 @@
         <td><span style="background-color:{{$proj.color}};">{{$proj.color}}</span></td>
         <td><a href="/p/{{$proj.name}}/edit">edit</a></td>
         <td>
-          <form action="/del/project/{{$proj.name}}" method="post">
+          <form action="/p/{{$proj.name}}/del" method="post">
             <button type="submit">delete</button>
           </form>
         </td>

diff --git a/view/ticket.html b/view/ticket.html
index 934b6b7..84c3229 100644
--- a/view/ticket.html
+++ b/view/ticket.html
@@ -11,7 +11,8 @@
 </head>
 <body>
   <div class="centered menu">
-    <a href="/p/{{$proj.name}}/t/{{$tick.code}}/new/comment">new comment</a>
+    <a href="/p/{{$proj.name}}/t/{{$tick.code}}/edit">edit</a>
+    <a href="/p/{{$proj.name}}/t/{{$tick.code}}/c/new">new comment</a>
   </div>
   <br>
   <h1 class="centered">{{$proj.name}} - Ticket #{{$tick.code}}</h1>

diff --git a/view/ticket_form.html b/view/ticket_form.html
index 0b00989..f717446 100644
--- a/view/ticket_form.html
+++ b/view/ticket_form.html
@@ -10,13 +10,13 @@
 </head>
 <body>
   <h1 class="centered">Ticket</h1>
-  % set action = "/p/" .. $proj.name
+  % set action = "/p/" .. $proj.name .. "/t"
   % if $tick == nil then
-  %   set action = $action .. "/new/ticket"
+  %   set action = $action
   %   set tick = {title="", desc="", priority=0}
   %   set submit_value = "Create"
   % else
-  %   set action = $action .. "/upd/ticket/" .. $tick.code
+  %   set action = $action .. "/" .. $tick.code .. "/put"
   %   set submit_value = "Save"
   % end
   <form action="{{$action}}" method="post">