Objetivo: Substituir nosso db.clj "de mentira" (o atom) por um db.clj "de verdade" que usa um banco de dados SQLite.
Por que SQLite? É o banco de dados mais simples de usar. Ele não requer um servidor separado (como o PostgreSQL) e armazena o banco de dados inteiro em um único arquivo (ex: prod.db) no seu projeto.
Nossa "Cirurgia":
A parte mais legal desta fase é o quão pouco código vamos mudar. Graças à forma como estruturamos nosso aplicativo, nós só precisamos mudar o db.clj.
Os arquivos handler.clj e core.clj (que lidam com a API) não se importam como os dados são armazenados; eles apenas chamam funções como (db/get-all-todos). Vamos simplesmente reescrever o interior dessas funções para falar com SQL em vez de um atom.
Primeiro, precisamos dizer ao deps.edn para baixar as "ferramentas" de banco de dados.
next.jdbc: Esta é a biblioteca moderna em Clojure para "falar" com bancos de dados SQL.org.xerial/sqlite-jdbc: Este é o "driver" específico que permite ao next.jdbc se comunicar com o SQLite.Ação:
Abra seu arquivo deps.edn e adicione estas duas linhas ao seu bloco :deps:
:deps
{;; ... (dependências do backend) ...
ring/ring-cors {:mvn/version "0.1.13"}
;; --- ADICIONE ESTAS DUAS LINHAS ---
seancorfield/next.jdbc {:mvn/version "1.2.659"}
org.xerial/sqlite-jdbc {:mvn/version "3.45.3.0"}
;; --- Dependências do Frontend ---
thheller/shadow-cljs {:mvn/version "2.26.2"}
reagent/reagent {:mvn/version "2.0.0-alpha5"}
}
Nossa "lista de compras" (deps.edn) agora inclui as ferramentas necessárias para que o Clojure se conecte e execute comandos SQL em um banco de dados SQLite.
next.jdbc (no REPL)Objetivo: Aprender como o next.jdbc funciona em isolamento, antes de integrá-lo. Vamos criar um banco, inserir dados e ler dados, tudo a partir do REPL.
A "Cirurgia":
A parte mais legal desta fase é o quão pouco código vamos mudar. Graças à forma como estruturamos nosso aplicativo, nós só precisamos mudar o db.clj.
Os arquivos handler.clj e core.clj (que lidam com a API) não se importam como os dados são armazenados; eles apenas chamam funções como (db/get-all-todos). Vamos simplesmente reescrever o interior dessas funções para falar com SQL em vez de um atom.