diff --git a/api/apiRoutes.go b/api/apiRoutes.go index 641c605..9bf294a 100644 --- a/api/apiRoutes.go +++ b/api/apiRoutes.go @@ -2,13 +2,13 @@ package api import ( "net/http" - handler2 "portfolio/api/handler" + "portfolio/api/handler" ) func ApiRoutes(mux **http.ServeMux) { m := *mux // Register the routes and webHandler - m.HandleFunc("/api/", handler2.CatchAllHandler) - m.HandleFunc("POST /api/user", handler2.CreateUser) - m.HandleFunc("GET /api/user/{id}", handler2.GetUser) + m.HandleFunc("/api/", handler.CatchAllHandler) + m.HandleFunc("POST /api/user", handler.CreateUser) + m.HandleFunc("GET /api/user/{id}", handler.GetUser) } diff --git a/api/handler/errorHandlers.go b/api/handler/errorHandlers.go index e86d144..508e6cf 100644 --- a/api/handler/errorHandlers.go +++ b/api/handler/errorHandlers.go @@ -2,7 +2,7 @@ package handler import "net/http" -func InternalServerErrorHandler(w http.ResponseWriter, r *http.Request) { +func InternalServerErrorHandler(w http.ResponseWriter) { w.WriteHeader(http.StatusInternalServerError) _, err := w.Write([]byte("500 Internal Server Error")) if err != nil { @@ -10,7 +10,7 @@ func InternalServerErrorHandler(w http.ResponseWriter, r *http.Request) { } } -func NotFoundHandler(w http.ResponseWriter, r *http.Request) { +func NotFoundHandler(w http.ResponseWriter) { w.WriteHeader(http.StatusNotFound) _, err := w.Write([]byte("404 Not Found")) if err != nil { @@ -18,7 +18,7 @@ func NotFoundHandler(w http.ResponseWriter, r *http.Request) { } } -func BadRequestHandler(w http.ResponseWriter, r *http.Request) { +func BadRequestHandler(w http.ResponseWriter) { w.WriteHeader(http.StatusBadRequest) _, err := w.Write([]byte("400 Bad Request")) if err != nil { diff --git a/api/handler/homepage.go b/api/handler/homepage.go deleted file mode 100644 index 1a82383..0000000 --- a/api/handler/homepage.go +++ /dev/null @@ -1,18 +0,0 @@ -package handler - -import ( - "html/template" - "net/http" -) - -func InitHomepage(w http.ResponseWriter, r *http.Request) { - tmpl := template.Must(template.ParseFiles("./frontend/templates/index.html")) - err := tmpl.Execute(w, nil) - if err != nil { - _, err := w.Write([]byte("failed to load")) - if err != nil { - return - } - return - } -} diff --git a/api/handler/mainHandler.go b/api/handler/mainHandler.go index 6b3ebf0..172342d 100644 --- a/api/handler/mainHandler.go +++ b/api/handler/mainHandler.go @@ -6,6 +6,6 @@ func CatchAllHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusGone) _, err := w.Write([]byte("Bad endpoint")) if err != nil { - InternalServerErrorHandler(w, r) + InternalServerErrorHandler(w) } } diff --git a/api/handler/userHandler.go b/api/handler/userHandler.go index d0d5f7d..c3fa915 100644 --- a/api/handler/userHandler.go +++ b/api/handler/userHandler.go @@ -5,7 +5,9 @@ import ( "encoding/json" "net/http" "portfolio/database/ent" + "portfolio/database/ent/user" "portfolio/database/query" + "portfolio/service/validate" "strconv" ) @@ -13,12 +15,26 @@ func CreateUser(w http.ResponseWriter, r *http.Request) { var u *ent.User - err := json.NewDecoder(r.Body).Decode(&u) - if err != nil { - InternalServerErrorHandler(w, r) + isHtmx := r.Header.Get("HX-Request") + + if isHtmx == "true" { + u = &ent.User{ + Name: r.PostFormValue("name"), + Role: user.Role(r.PostFormValue("role")), + } + } else { + err := json.NewDecoder(r.Body).Decode(&u) + if err != nil { + InternalServerErrorHandler(w) + } } - err = query.CreateUser(context.Background(), *u) + if !validate.UserIsValid(u) { + BadRequestHandler(w) + return + } + + err := query.CreateUser(context.Background(), *u) if err != nil { return } @@ -31,7 +47,7 @@ func GetUser(w http.ResponseWriter, r *http.Request) { userID, err := strconv.Atoi(r.PathValue("id")) if err != nil { - BadRequestHandler(w, r) + BadRequestHandler(w) } User, err := query.GetUser(context.Background(), userID) diff --git a/api/webHandler/homepageHandler.go b/api/webHandler/homepageHandler.go new file mode 100644 index 0000000..5630947 --- /dev/null +++ b/api/webHandler/homepageHandler.go @@ -0,0 +1,29 @@ +package webHandler + +import ( + "html/template" + "net/http" + "portfolio/types" +) + +func InitHomepage(w http.ResponseWriter, r *http.Request) { + + tmpl := template.Must(template.ParseFiles("./templates/index.html")) + + userNames := map[string][]types.Username{ + "Names": { + {Name: "The Godfather"}, + {Name: "Blade Runner"}, + {Name: "The Thing"}, + }, + } + + err := tmpl.Execute(w, userNames) + if err != nil { + _, err := w.Write([]byte("failed to load")) + if err != nil { + return + } + return + } +} diff --git a/api/webRoutes.go b/api/webRoutes.go index 3b8e8f5..6041116 100644 --- a/api/webRoutes.go +++ b/api/webRoutes.go @@ -2,11 +2,11 @@ package api import ( "net/http" - "portfolio/api/handler" + "portfolio/api/webHandler" ) func WebRoutes(mux **http.ServeMux) { m := *mux // Register the routes and webHandler - m.HandleFunc("GET /{$}", handler.InitHomepage) + m.HandleFunc("GET /{$}", webHandler.InitHomepage) } diff --git a/database/query/userQuery.go b/database/query/userQuery.go index 518001c..813e0be 100644 --- a/database/query/userQuery.go +++ b/database/query/userQuery.go @@ -4,14 +4,14 @@ import ( "context" "fmt" "log" - "portfolio/backend/database" - "portfolio/backend/database/ent" - "portfolio/backend/database/ent/user" + "portfolio/database" + "portfolio/database/ent" + "portfolio/database/ent/user" ) func GetUser(ctx context.Context, id int) (*ent.User, error) { - u, err := database.DBclient.User. + u, err := database.Client.User. Query(). Where(user.ID(id)). Only(ctx) @@ -24,7 +24,7 @@ func GetUser(ctx context.Context, id int) (*ent.User, error) { func CreateUser(ctx context.Context, User ent.User) error { - _, err := database.DBclient.User. + _, err := database.Client.User. Create(). SetName(User.Name). SetRole(User.Role). diff --git a/service/validate/validateUser.go b/service/validate/validateUser.go new file mode 100644 index 0000000..e994f5c --- /dev/null +++ b/service/validate/validateUser.go @@ -0,0 +1,13 @@ +package validate + +import ( + "portfolio/database/ent" +) + +func UserIsValid(u *ent.User) bool { + if len(u.Name) > 0 && + len(u.Role) > 0 { + return true + } + return false +} diff --git a/templates/index.html b/templates/index.html index 02853d2..0c2ce3c 100644 --- a/templates/index.html +++ b/templates/index.html @@ -13,30 +13,29 @@
-

Film List

+

User List

-
-

Add Film

+

Add User

-
+
- - + +
-
- - +
+ +
-