From 7024cd0de98e0a455937bf20acf8f0735c1375a9 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Thu, 26 Oct 2023 00:13:16 +0200 Subject: [PATCH] User edit --- app/repository/users.go | 27 +++++++++-- app/templates/base/base.jet | 18 ++++--- app/templates/components/table_component.jet | 15 ++++-- app/templates/pages/user-edit.jet | 35 ++++++++++++++ app/templates/pages/users.jet | 8 +-- app/views/router.go | 3 ++ app/views/users.go | 51 ++++++++++++++++++-- 7 files changed, 134 insertions(+), 23 deletions(-) create mode 100644 app/templates/pages/user-edit.jet diff --git a/app/repository/users.go b/app/repository/users.go index 71e31b6..84dd413 100644 --- a/app/repository/users.go +++ b/app/repository/users.go @@ -12,6 +12,7 @@ type UsersRepository struct { } type UserFilter struct { + Id *string IsActive *bool } @@ -22,9 +23,14 @@ func CreateUsersRepository(db *gorm.DB) *UsersRepository { func applyFilter(db *gorm.DB, filter *UserFilter) *gorm.DB { query := db - // if filter.State != "" { - // query = query.Where("state = ?", filter.State) - // } + if filter.Id != nil { + query = query.Where("id = ?", filter.Id) + } + + if filter.IsActive != nil { + query = query.Where(map[string]interface{}{"is_active": filter.IsActive}) + } + // if filter.SendAt_lt != nil { // query = query.Where("send_at < ?", filter.SendAt_lt) // } @@ -69,3 +75,18 @@ func (repository *UsersRepository) List(filter *UserFilter, pagination *Paginati return &users } + +func (repository *UsersRepository) Get(filter *UserFilter) *models.User { + var user models.User + + query := repository.db.Model(&models.User{}) + query = applyFilter(query, filter) + query.First(&user) + + return &user +} + +func (repository *UsersRepository) Save(user *models.User) *models.User { + repository.db.Save(user) + return user +} diff --git a/app/templates/base/base.jet b/app/templates/base/base.jet index 0f0b815..62a0c12 100644 --- a/app/templates/base/base.jet +++ b/app/templates/base/base.jet @@ -10,14 +10,20 @@ -
+

{{ title }}

-

- Frontpage - Users - About -

+
{{ yield mainContent() }} diff --git a/app/templates/components/table_component.jet b/app/templates/components/table_component.jet index 564ad1e..79599b2 100644 --- a/app/templates/components/table_component.jet +++ b/app/templates/components/table_component.jet @@ -1,10 +1,19 @@ {{ block usersTable(users) }} -

blablabla

- - +
+ + + + + + + + {{ range users }} + diff --git a/app/templates/pages/user-edit.jet b/app/templates/pages/user-edit.jet new file mode 100644 index 0000000..6ec6931 --- /dev/null +++ b/app/templates/pages/user-edit.jet @@ -0,0 +1,35 @@ +{{ extends "/base/base.jet" }} +{{ import "/components/table_component.jet" }} + + +{{ block mainContent() }} +

Edit user

+ + +
+
+
+ + +
+
+ + +
+
+ + +
+ +
+ + Cancel + + +
+ +
+ +{{ end }} diff --git a/app/templates/pages/users.jet b/app/templates/pages/users.jet index a0435bc..b56de80 100644 --- a/app/templates/pages/users.jet +++ b/app/templates/pages/users.jet @@ -3,13 +3,7 @@ {{ block mainContent() }} -
    - {{ range params1 }} -
  • {{ . }}
  • - {{ end }} -
- -

{{ title }}

+

Users

{{ yield usersTable(users=users) }} {{ end }} diff --git a/app/views/router.go b/app/views/router.go index 3904d46..5b3e78d 100644 --- a/app/views/router.go +++ b/app/views/router.go @@ -7,5 +7,8 @@ func CreateRouter(app *iris.Application) { app.Post("/", PostIndexPage) app.Get("/users", GetUsersPage) + app.Get("/users/{userId:uuid}", EditUserPage) + app.Post("/users/{userId:uuid}", SaveUserPage) + app.Get("/about", GetAboutPage) } diff --git a/app/views/users.go b/app/views/users.go index 5c51439..761352f 100644 --- a/app/views/users.go +++ b/app/views/users.go @@ -6,10 +6,13 @@ import ( "github.com/kataras/iris/v12" ) -func GetUsersPage(ctx iris.Context) { - params1 := []string{"param 1", "param 2", "param 3"} - ctx.ViewData("params1", params1) +type editUserForm struct { + FirstName string `form:"first-name"` + LastName string `form:"last-name"` + Email string `form:"email"` +} +func GetUsersPage(ctx iris.Context) { userRepository := repository.Dao.UsersRepository pagination := repository.NewPagination() @@ -18,7 +21,8 @@ func GetUsersPage(ctx iris.Context) { repository.NewOrdering("last_name", repository.ORDERING_ASC), } - users := userRepository.List(&repository.UserFilter{}, &pagination, &ordering) + isActive := true + users := userRepository.List(&repository.UserFilter{IsActive: &isActive}, &pagination, &ordering) ctx.ViewData("users", users) @@ -27,3 +31,42 @@ func GetUsersPage(ctx iris.Context) { return } } + +func EditUserPage(ctx iris.Context) { + userId := ctx.Params().Get("userId") + userRepository := repository.Dao.UsersRepository + + filter := repository.UserFilter{Id: &userId} + user := userRepository.Get(&filter) + + ctx.ViewData("user", user) + ctx.ViewData("currentPath", ctx.Path()) + + if err := ctx.View("pages/user-edit.jet"); err != nil { + showError(ctx, err) + return + } +} + +func SaveUserPage(ctx iris.Context) { + var form editUserForm + err := ctx.ReadForm(&form) + if err != nil { + ctx.StopWithError(iris.StatusBadRequest, err) + return + } + + userId := ctx.Params().Get("userId") + userRepository := repository.Dao.UsersRepository + + filter := repository.UserFilter{Id: &userId} + user := userRepository.Get(&filter) + + user.FirstName = form.FirstName + user.LastName = form.LastName + user.Email = form.Email + + userRepository.Save(user) + + ctx.Redirect("/users") +}
IDFirst nameLast nameEmail
+ {{ .Id }} + {{ .FirstName }} {{ .LastName }} {{ .Email }}