Você tem uma aplicação CRUD (Create, Read) funcional. Agora, vamos adicionar o "U" (Update) para marcar um "todo" como feito. Você verá que o padrão é exatamente o mesmo que usamos para criar "todos".
db.cljPrecisamos de uma função que receba um id e "vire" o valor de completed no banco de dados.
Ação: Abra src/todo/backend/db.clj e adicione esta nova função no final:
(defn toggle-todo!
"Alterna o status 'completed' de um todo no banco."
[id]
;; (1 - completed) é um truque SQL para inverter 0 -> 1 e 1 -> 0.
(jdbc/execute-one! db-spec ["
UPDATE todos
SET completed = (1 - completed)
WHERE id = ?
RETURNING *"
id
]))
handler.cljAção: Abra src/todo/backend/handler.clj e adicione esta função no final:
(defn toggle-todo-handler
"Handler para 'alternar' o status de um todo."
[request]
(let [id (-> request :path-params :id Integer/parseInt)]
(if-let [updated-todo (db/toggle-todo! id)]
{:status 200 :body updated-todo}
{:status 404 :body {:error "Todo não encontrado"}})))
core.cljAção: Abra src/todo/backend/core.clj e adicione esta nova rota dentro de app-routes (junto à rota GET/POST de /todos):
["/todos/:id/toggle"
{:post {:handler handler/toggle-todo-handler}}]
✅ Ação do Backend Concluída! Pare e reinicie seu servidor de backend (clj -M:run).
core.cljsAção: Abra src/todo/frontend/core.cljs e adicione esta função fetch (junto com get-todos e create-todo):