Connect users controller to db

This commit is contained in:
Lucas Schumacher 2024-08-07 12:19:32 -04:00
parent fef066b449
commit 7d234c5aad
2 changed files with 37 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import (
"net/http" "net/http"
"strings" "strings"
"git.kealoha.me/lks/lenslocked/models"
"git.kealoha.me/lks/lenslocked/templates" "git.kealoha.me/lks/lenslocked/templates"
"git.kealoha.me/lks/lenslocked/views" "git.kealoha.me/lks/lenslocked/views"
) )
@ -13,6 +14,7 @@ type Users struct {
Templates struct { Templates struct {
New Template New Template
} }
UserService *models.UserService
} }
func (u Users) New(w http.ResponseWriter, r *http.Request) { func (u Users) New(w http.ResponseWriter, r *http.Request) {
@ -22,12 +24,20 @@ func (u Users) New(w http.ResponseWriter, r *http.Request) {
data.Email = r.FormValue("email") data.Email = r.FormValue("email")
u.Templates.New.Execute(w, data) u.Templates.New.Execute(w, data)
} }
func (u Users) Create(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "TODO! ", r.FormValue("email"))
func (u Users) Create(w http.ResponseWriter, r *http.Request) {
email := r.FormValue("email")
password := r.FormValue("password")
user, err := u.UserService.Create(email, password)
if err != nil {
fmt.Println(err)
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
fmt.Fprintf(w, "User created: %+v", user)
} }
func FromStaticTemplate(templatePath ...string) Users { func WithStaticTemplate(user_service *models.UserService, templatePath ...string) Users {
tpl := views.Must(views.FromFS(templates.FS, templatePath...)) tpl := views.Must(views.FromFS(templates.FS, templatePath...))
var testWriter strings.Builder var testWriter strings.Builder
@ -38,5 +48,6 @@ func FromStaticTemplate(templatePath ...string) Users {
u := Users{} u := Users{}
u.Templates.New = tpl u.Templates.New = tpl
u.UserService = user_service
return u return u
} }

24
main.go
View File

@ -1,12 +1,17 @@
package main package main
import ( import (
"database/sql"
"fmt" "fmt"
"net/http" "net/http"
"os"
ctrlrs "git.kealoha.me/lks/lenslocked/controllers" ctrlrs "git.kealoha.me/lks/lenslocked/controllers"
"git.kealoha.me/lks/lenslocked/models"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware" "github.com/go-chi/chi/v5/middleware"
_ "github.com/jackc/pgx/v4/stdlib"
) )
func notFoundHandler(w http.ResponseWriter, r *http.Request) { func notFoundHandler(w http.ResponseWriter, r *http.Request) {
@ -15,8 +20,25 @@ func notFoundHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "404 page not found") fmt.Fprint(w, "404 page not found")
} }
func ConnectDB() *sql.DB {
db, err := sql.Open("pgx", os.Getenv("LENSLOCKED_DB_STRING"))
if err != nil {
panic(fmt.Sprint("Error connecting to database: %w", err))
}
err = db.Ping()
if err != nil {
panic(fmt.Sprint("Error connecting to database: %w", err))
}
return db
}
func main() { func main() {
var usersCtrlr ctrlrs.Users = ctrlrs.FromStaticTemplate("signup.gohtml", "tailwind.gohtml") db := ConnectDB()
defer db.Close()
userService := models.UserService{DB: db}
var usersCtrlr ctrlrs.Users = ctrlrs.WithStaticTemplate(&userService, "signup.gohtml", "tailwind.gohtml")
r := chi.NewRouter() r := chi.NewRouter()
r.Use(middleware.Logger) r.Use(middleware.Logger)
r.Get("/", ctrlrs.StaticTemplate("home.gohtml", "tailwind.gohtml")) r.Get("/", ctrlrs.StaticTemplate("home.gohtml", "tailwind.gohtml"))