package main import ( "database/sql" "fmt" "log" "net/http" "github.com/go-chi/chi/v5" _ "modernc.org/sqlite" ) // InitDB creates tables if they don't exist. func InitDB(db *sql.DB) { _, err := db.Exec(`CREATE TABLE IF NOT EXISTS todos ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, description TEXT, due_date TEXT, priority INTEGER NOT NULL DEFAULT 1, status TEXT NOT NULL DEFAULT 'pending' )`) if err != nil { log.Fatal(err) } } // NewRouter creates a chi router with all routes. func NewRouter(db *sql.DB) http.Handler { r := chi.NewRouter() r.Post("/todos", createTodo(db)) r.Get("/todos", listTodos(db)) r.Get("/todos/{id}", getTodo(db)) r.Put("/todos/{id}", updateTodo(db)) r.Delete("/todos/{id}", deleteTodo(db)) return r } func main() { db, err := sql.Open("sqlite", "file:app.db?mode=rwc") if err != nil { log.Fatal(err) } defer db.Close() InitDB(db) fmt.Println("Server running: http://127.0.0.1:3000") log.Fatal(http.ListenAndServe("127.0.0.1:3000", NewRouter(db))) }