From 2d538241946436bda4581eb5a9081e9ad64d2d62 Mon Sep 17 00:00:00 2001 From: Lucas Schumacher Date: Wed, 7 Aug 2024 19:09:34 -0400 Subject: [PATCH] Add Sign in page --- controllers/static.go | 2 +- controllers/users.go | 41 ++++++++++++++++++------- main.go | 13 +++++--- templates/signin.gohtml | 64 +++++++++++++++++++++++++++++++++++++++ templates/tailwind.gohtml | 2 +- 5 files changed, 104 insertions(+), 18 deletions(-) create mode 100644 templates/signin.gohtml diff --git a/controllers/static.go b/controllers/static.go index 7a591a5..9e28c08 100644 --- a/controllers/static.go +++ b/controllers/static.go @@ -11,7 +11,7 @@ type Template interface { Execute(w http.ResponseWriter, data interface{}) } -func StaticTemplate(templatePath ...string) http.HandlerFunc { +func StaticController(templatePath ...string) http.HandlerFunc { tpl := views.Must(views.FromFS(templates.FS, templatePath...)) var testWriter strings.Builder diff --git a/controllers/users.go b/controllers/users.go index e05fd77..e8d44f9 100644 --- a/controllers/users.go +++ b/controllers/users.go @@ -12,20 +12,21 @@ import ( type Users struct { Templates struct { - New Template + Signup Template + Signin Template } UserService *models.UserService } -func (u Users) New(w http.ResponseWriter, r *http.Request) { +func (u Users) GetSignup(w http.ResponseWriter, r *http.Request) { var data struct { Email string } data.Email = r.FormValue("email") - u.Templates.New.Execute(w, data) + u.Templates.Signup.Execute(w, data) } -func (u Users) Create(w http.ResponseWriter, r *http.Request) { +func (u Users) PostSignup(w http.ResponseWriter, r *http.Request) { email := r.FormValue("email") password := r.FormValue("password") user, err := u.UserService.Create(email, password) @@ -37,17 +38,35 @@ func (u Users) Create(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "User created: %+v", user) } -func WithStaticTemplate(user_service *models.UserService, templatePath ...string) Users { - tpl := views.Must(views.FromFS(templates.FS, templatePath...)) +func (u Users) GetSignin(w http.ResponseWriter, r *http.Request) { + var data struct { + Email string + } + data.Email = r.FormValue("email") + u.Templates.Signin.Execute(w, data) +} + +func WithTemplates(user_service *models.UserService, signup Template, signin Template) Users { + u := Users{} + u.Templates.Signup = signup + u.Templates.Signin = signin + u.UserService = user_service + return u +} + +func Default(user_service *models.UserService, templatePath ...string) Users { + signup_tpl := views.Must(views.FromFS(templates.FS, "signup.gohtml", "tailwind.gohtml")) + signin_tpl := views.Must(views.FromFS(templates.FS, "signin.gohtml", "tailwind.gohtml")) var testWriter strings.Builder - err := tpl.ExecuteWriter(&testWriter, nil) + err := signup_tpl.ExecuteWriter(&testWriter, nil) + if err != nil { + panic(err) + } + err = signin_tpl.ExecuteWriter(&testWriter, nil) if err != nil { panic(err) } - u := Users{} - u.Templates.New = tpl - u.UserService = user_service - return u + return WithTemplates(user_service, signup_tpl, signin_tpl) } diff --git a/main.go b/main.go index cac1d32..7b56e49 100644 --- a/main.go +++ b/main.go @@ -37,15 +37,18 @@ func main() { defer db.Close() userService := models.UserService{DB: db} - var usersCtrlr ctrlrs.Users = ctrlrs.WithStaticTemplate(&userService, "signup.gohtml", "tailwind.gohtml") + var usersCtrlr ctrlrs.Users = ctrlrs.Default(&userService) r := chi.NewRouter() r.Use(middleware.Logger) - r.Get("/", ctrlrs.StaticTemplate("home.gohtml", "tailwind.gohtml")) - r.Get("/contact", ctrlrs.StaticTemplate("contact.gohtml", "tailwind.gohtml")) + r.Get("/", ctrlrs.StaticController("home.gohtml", "tailwind.gohtml")) + r.Get("/contact", ctrlrs.StaticController("contact.gohtml", "tailwind.gohtml")) r.Get("/faq", ctrlrs.FAQ("faq.gohtml", "tailwind.gohtml")) - r.Get("/signup", usersCtrlr.New) - r.Post("/signup", usersCtrlr.Create) + + r.Get("/signup", usersCtrlr.GetSignup) + r.Post("/signup", usersCtrlr.PostSignup) + r.Get("/signin", usersCtrlr.GetSignin) + r.NotFound(notFoundHandler) fmt.Println("Starting the server on :3000...") http.ListenAndServe(":3000", r) diff --git a/templates/signin.gohtml b/templates/signin.gohtml new file mode 100644 index 0000000..b90be4d --- /dev/null +++ b/templates/signin.gohtml @@ -0,0 +1,64 @@ + + + {{template "head" .}} + + {{template "header".}} +
+
+

+ Welcome back! +

+
+
+ + +
+
+ + +
+
+ +
+
+

+ Need an account? + Sign up +

+

+ Forgot your password? +

+
+
+
+
+ {{template "footer" .}} + + diff --git a/templates/tailwind.gohtml b/templates/tailwind.gohtml index 9ac0a67..c1a0394 100644 --- a/templates/tailwind.gohtml +++ b/templates/tailwind.gohtml @@ -16,7 +16,7 @@ FAQ
- Sign in + Sign in Sign up