103 lines
2.0 KiB
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
|
|
}
|