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
-
-
+
+
+
+ | ID |
+ First name |
+ Last name |
+ Email |
+
+
{{ range users }}
+ |
+ {{ .Id }}
+ |
{{ .FirstName }} |
{{ .LastName }} |
{{ .Email }} |
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
+
+
+
+
+{{ 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")
+}