echo-todo/main.go

103 lines
2.0 KiB
Go

package main
import (
// "fmt"
"database/sql"
"log"
"net/http"
"os"
_ "github.com/tursodatabase/libsql-client-go/libsql"
"github.com/joho/godotenv"
"git.duckylabs.xyz/duckbox/echo-todo/handlers"
"git.duckylabs.xyz/duckbox/echo-todo/models"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
func main() {
err := godotenv.Load(".env")
dbUrl := os.Getenv("DB_URL")
if dbUrl == "" {
log.Fatalf("DB_URL is not set")
}
dbToken := os.Getenv("DB_TOKEN")
if dbToken == "" {
log.Fatalf("DB_TOKEN is not set")
}
db, err := sql.Open("libsql", dbUrl+dbToken)
if err != nil {
log.Fatalf("failed to open db: %s: %s", dbUrl, err)
// fmt.Fprintf(os.Stderr, "failed to open db %s: %s", dbUrl, err)
os.Exit(1)
}
defer db.Close()
// testUser := User {
// Username: "echo-todo",
// Email: "echo@todo.com",
// Role: "dev",
// }
// TEST: Playing with DB functions
// insertUser(db, testUser)
e := echo.New()
e.Use(middleware.Logger())
e.Use(dbMiddleware(db))
e.Static("/", "frontend/dist")
e.GET("/api", HomeHandler)
e.POST("/api/addUser", handlers.AddUserHandler)
e.GET("/api/partials/allUsersTable", handlers.AllUserTableHandler)
e.GET("/api/partials/addUserTable", handlers.AddUserTableHandler)
e.Logger.Fatal(e.Start(":1234"))
}
func dbMiddleware(db *sql.DB) echo.MiddlewareFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
c.Set("db", db)
return next(c)
}
}
}
func HomeHandler(c echo.Context) error {
return c.String(http.StatusOK, "Hello from the home route")
}
func AllNotesHandler(c echo.Context) error {
return c.String(http.StatusOK, "All notes")
}
func insertUser(db *sql.DB, user models.User) (int64, error) {
result, err := db.Exec("INSERT INTO users (username, email, role) VALUES (?, ?, ?)", user.Username, user.Email, user.Role)
if err != nil {
log.Fatalf("failed to insert user: %v", err)
}
id, err := result.LastInsertId()
if err != nil {
log.Fatalf("failed to insert user: %v", err)
}
return id, nil
}