User edit
This commit is contained in:
@ -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
|
||||||
|
}
|
||||||
|
|||||||
@ -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() }}
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
35
app/templates/pages/user-edit.jet
Normal file
35
app/templates/pages/user-edit.jet
Normal 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 }}
|
||||||
@ -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 }}
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user