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">