From 3281472f67059772c35bfd05713f28b914e8acb0 Mon Sep 17 00:00:00 2001 From: Hanan Askarim Date: Tue, 30 Apr 2024 13:10:53 +0700 Subject: [PATCH] create templ login --- cmd/main.go | 8 + db/login.store.go | 26 ++ handlers/login.handlers.go | 29 ++- handlers/routes.go | 4 + services/login.services.go | 59 +++++ views/login/login.templ | 374 ++++------------------------ views/login/login_templ.go | 49 +++- views/login/logincomponent.templ | 274 ++++++++++++++++++++ views/login/logincomponent_templ.go | 107 ++++++++ 9 files changed, 582 insertions(+), 348 deletions(-) create mode 100644 db/login.store.go create mode 100644 services/login.services.go create mode 100644 views/login/logincomponent.templ create mode 100644 views/login/logincomponent_templ.go diff --git a/cmd/main.go b/cmd/main.go index bf3e16d..0258924 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -38,6 +38,14 @@ func main() { handlers.SetupRoutes(app, h) + LStore, err := db.NewLoginStore(dbName) + if err != nil { + app.Logger.Fatalf("failed to create store: %s", err) + } + l := services.NewServicesLogin(services.Login{}, LStore) + lh := handlers.NewLoginHandler(l) + handlers.SetupRoutesLogin(app, lh) + xStore, err := db.NewXsampleStore(dbName) if err != nil { app.Logger.Fatalf("failed to create store: %s", err) diff --git a/db/login.store.go b/db/login.store.go new file mode 100644 index 0000000..47ea165 --- /dev/null +++ b/db/login.store.go @@ -0,0 +1,26 @@ +package db + +import ( + "database/sql" + + _ "github.com/glebarez/go-sqlite" +) + +type LoginStore struct { + Db *sql.DB +} + +func NewLoginStore(dbName string) (LoginStore, error) { + Db, err := getConnection(dbName) + if err != nil { + return LoginStore{}, err + } + + if err := createMigrations(dbName, Db); err != nil { + return LoginStore{}, err + } + + return LoginStore{ + Db, + }, nil +} diff --git a/handlers/login.handlers.go b/handlers/login.handlers.go index 1a390ef..1559a8c 100644 --- a/handlers/login.handlers.go +++ b/handlers/login.handlers.go @@ -2,19 +2,34 @@ package handlers import ( "github.com/a-h/templ" + "github.com/emarifer/go-templ-project-structure/services" "github.com/emarifer/go-templ-project-structure/views/login" "github.com/labstack/echo/v4" ) -func HandlerShowLoginCompany(c echo.Context) error { - - // si := user.ShowIndex("| Home", user.Show(udata)) - si := login.ShowLogin("Login ", login.DivLogin(), login.CssLogin(), login.JsLogin()) - - return ViewLoginCompany(c, si) +type LoginService interface { + GetLogin(Email string, Password string) (services.Login, error) } -func ViewLoginCompany(c echo.Context, cmp templ.Component) error { + +func NewLoginHandler(us LoginService) *LoginHandler { + return &LoginHandler{ + LoginService: us, + } +} + +type LoginHandler struct { + LoginService LoginService +} + +func (lh *LoginHandler) HandlerShowLogin(c echo.Context) error { + + si := login.ShowLogin("Login ", login.MainLogin(), login.CssLogin(), login.JsLogin()) + + return lh.ViewLogin(c, si) +} + +func (uh *LoginHandler) ViewLogin(c echo.Context, cmp templ.Component) error { c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTML) return cmp.Render(c.Request().Context(), c.Response().Writer) diff --git a/handlers/routes.go b/handlers/routes.go index 5196bcf..180cbe5 100644 --- a/handlers/routes.go +++ b/handlers/routes.go @@ -11,6 +11,10 @@ func SetupRoutes(app *echo.Echo, h *UserHandler) { } //PLAYGROUND TESTING +func SetupRoutesLogin(app *echo.Echo, h *LoginHandler) { + l := app.Group("/login") + l.GET("/", h.HandlerShowLogin) +} func SetupRoutesXsample(app *echo.Echo, h *XsampleHandler) { xSample := app.Group("/xsample") xSample.GET("/xsample01", h.Hello) diff --git a/services/login.services.go b/services/login.services.go new file mode 100644 index 0000000..0ffa532 --- /dev/null +++ b/services/login.services.go @@ -0,0 +1,59 @@ +package services + +import ( + "time" + + "github.com/emarifer/go-templ-project-structure/db" +) + +func NewServicesLogin(u Login, uStore db.LoginStore) *ServicesLogin { + + return &ServicesLogin{ + Login: u, + LoginStore: uStore, + } +} + +type Login struct { + ID int `json:"id"` + Loginname string `json:"Loginname"` + Email string `json:"Email"` + Password string `json:"Password"` + CreatedAt time.Time `json:"created_at,omitempty"` +} + +type ServicesLogin struct { + Login Login + LoginStore db.LoginStore +} + +func (su *ServicesLogin) GetLogin(Email string, Password string) (Login, error) { + + query := `SELECT id, Loginname, Email, Password, created_at FROM Login + WHERE Email = ? AND Password = ?` + + stmt, err := su.LoginStore.Db.Prepare(query) + if err != nil { + return Login{}, err + } + + defer stmt.Close() + + su.Login.Email = Email + su.Login.Password = Password + err = stmt.QueryRow( + su.Login.Email, + su.Login.Password, + ).Scan( + &su.Login.ID, + &su.Login.Loginname, + &su.Login.Email, + &su.Login.Password, + &su.Login.CreatedAt, + ) + if err != nil { + return Login{}, err + } + + return su.Login, nil +} diff --git a/views/login/login.templ b/views/login/login.templ index 0b177e6..2bc24e4 100644 --- a/views/login/login.templ +++ b/views/login/login.templ @@ -4,44 +4,14 @@ import ( "github.com/emarifer/go-templ-project-structure/views/layout" ) -templ DivLogin() { +templ MainLogin() {