User edit

This commit is contained in:
Eden Kirin
2023-10-26 00:13:16 +02:00
parent 21607a5c48
commit 7024cd0de9
7 changed files with 134 additions and 23 deletions

View File

@ -12,6 +12,7 @@ type UsersRepository struct {
} }
type UserFilter struct { type UserFilter struct {
Id *string
IsActive *bool IsActive *bool
} }
@ -22,9 +23,14 @@ func CreateUsersRepository(db *gorm.DB) *UsersRepository {
func applyFilter(db *gorm.DB, filter *UserFilter) *gorm.DB { func applyFilter(db *gorm.DB, filter *UserFilter) *gorm.DB {
query := db query := db
// if filter.State != "" { if filter.Id != nil {
// query = query.Where("state = ?", filter.State) 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 { // if filter.SendAt_lt != nil {
// query = query.Where("send_at < ?", filter.SendAt_lt) // query = query.Where("send_at < ?", filter.SendAt_lt)
// } // }
@ -69,3 +75,18 @@ func (repository *UsersRepository) List(filter *UserFilter, pagination *Paginati
return &users 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
}

View File

@ -10,14 +10,20 @@
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css">
</head> </head>
<body> <body>
<div class="container"> <div class="container mt-3">
<h1>{{ title }}</h1> <h1>{{ title }}</h1>
<p> <ul class="nav">
<a href="/">Frontpage</a> <li class="nav-item">
<a href="/users">Users</a> <a href="/" class="nav-link">Frontpage</a>
<a href="/about">About</a> </li>
</p> <li class="nav-item">
<a href="/users" class="nav-link">Users</a>
</li>
<li class="nav-item">
<a href="/about" class="nav-link">About</a>
</li>
</ul>
<main> <main>
{{ yield mainContent() }} {{ yield mainContent() }}

View File

@ -1,10 +1,19 @@
{{ block usersTable(users) }} {{ block usersTable(users) }}
<p>blablabla</p> <table class="table table-hover">
<thead>
<table class="table"> <tr>
<th>ID</th>
<th>First name</th>
<th>Last name</th>
<th>Email</th>
</tr>
</thead>
<tbody> <tbody>
{{ range users }} {{ range users }}
<tr> <tr>
<td>
<a href="/users/{{ .Id }}">{{ .Id }}</a>
</td>
<td>{{ .FirstName }}</td> <td>{{ .FirstName }}</td>
<td>{{ .LastName }}</td> <td>{{ .LastName }}</td>
<td>{{ .Email }}</td> <td>{{ .Email }}</td>

View File

@ -0,0 +1,35 @@
{{ extends "/base/base.jet" }}
{{ import "/components/table_component.jet" }}
{{ block mainContent() }}
<h3>Edit user</h3>
<div class="row">
<form class="mb-5 col-4 ms-auto me-auto" method="post" action="{{ .currentPath }}">
<div class="mb-3">
<label class="form-label">First name</label>
<input type="text" name="first-name" class="form-control" value="{{ user.FirstName }}" required>
</div>
<div class="mb-3">
<label class="form-label">Last name</label>
<input type="text" name="last-name" class="form-control" value="{{ user.LastName }}" required>
</div>
<div class="mb-3">
<label class="form-label">Email</label>
<input type="email" name="email" class="form-control" value="{{ user.Email }}" required>
</div>
<div class="d-flex">
<a href="/users" class="btn btn-outline-secondary ms-auto me-2">
Cancel
</a>
<button type="submit" class="btn btn-success">
Save
</button>
</div>
</form>
</div>
{{ end }}

View File

@ -3,13 +3,7 @@
{{ block mainContent() }} {{ block mainContent() }}
<ul> <h3>Users</h3>
{{ range params1 }}
<li>{{ . }}</li>
{{ end }}
</ul>
<h3>{{ title }}</h3>
{{ yield usersTable(users=users) }} {{ yield usersTable(users=users) }}
{{ end }} {{ end }}

View File

@ -7,5 +7,8 @@ func CreateRouter(app *iris.Application) {
app.Post("/", PostIndexPage) app.Post("/", PostIndexPage)
app.Get("/users", GetUsersPage) app.Get("/users", GetUsersPage)
app.Get("/users/{userId:uuid}", EditUserPage)
app.Post("/users/{userId:uuid}", SaveUserPage)
app.Get("/about", GetAboutPage) app.Get("/about", GetAboutPage)
} }

View File

@ -6,10 +6,13 @@ import (
"github.com/kataras/iris/v12" "github.com/kataras/iris/v12"
) )
func GetUsersPage(ctx iris.Context) { type editUserForm struct {
params1 := []string{"param 1", "param 2", "param 3"} FirstName string `form:"first-name"`
ctx.ViewData("params1", params1) LastName string `form:"last-name"`
Email string `form:"email"`
}
func GetUsersPage(ctx iris.Context) {
userRepository := repository.Dao.UsersRepository userRepository := repository.Dao.UsersRepository
pagination := repository.NewPagination() pagination := repository.NewPagination()
@ -18,7 +21,8 @@ func GetUsersPage(ctx iris.Context) {
repository.NewOrdering("last_name", repository.ORDERING_ASC), 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) ctx.ViewData("users", users)
@ -27,3 +31,42 @@ func GetUsersPage(ctx iris.Context) {
return 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")
}