Field position management
This commit is contained in:
parent
aaad6ae454
commit
03b1f92886
6 changed files with 138 additions and 12 deletions
|
|
@ -18,7 +18,7 @@ func Fields(c *fiber.Ctx) error {
|
|||
}
|
||||
|
||||
var fields []models.Field
|
||||
result := db.Order("name collate nocase asc").Find(&fields)
|
||||
result := db.Order("position asc").Find(&fields)
|
||||
|
||||
if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
|
|
@ -111,8 +111,18 @@ func FieldAdd(c *fiber.Ctx) error {
|
|||
}
|
||||
}
|
||||
|
||||
var lastPosition models.Field
|
||||
result := db.Order("position desc").First(
|
||||
&lastPosition, "person_type = ?", field.PersonType,
|
||||
)
|
||||
|
||||
field.Position = 0
|
||||
if result.RowsAffected > 0 && lastPosition.Position >= 0 {
|
||||
field.Position = lastPosition.Position + 1
|
||||
}
|
||||
|
||||
if len(errors) == 0 {
|
||||
result := db.Create(&field)
|
||||
result = db.Create(&field)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
|
@ -193,10 +203,97 @@ func FieldDelete(c *fiber.Ctx) error {
|
|||
return err
|
||||
}
|
||||
|
||||
var field models.Field
|
||||
db.Find(&field, "id = ?", id)
|
||||
|
||||
result := db.Delete(&models.Field{}, id)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if field.ID > 0 {
|
||||
db.Exec(
|
||||
"UPDATE fields SET position = position - 1 WHERE position > ? AND person_type = ?",
|
||||
field.Position, field.PersonType,
|
||||
)
|
||||
}
|
||||
|
||||
return c.Redirect("/admin/fields")
|
||||
}
|
||||
|
||||
func FieldMoveUp(c *fiber.Ctx) error {
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var field models.Field
|
||||
result := db.Find(&field, "id = ?", id)
|
||||
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if result.RowsAffected < 1 {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if field.Position == 0 {
|
||||
return c.Redirect("/admin/fields")
|
||||
}
|
||||
|
||||
db.Exec(
|
||||
"UPDATE fields SET position = position + 1 WHERE position = ? AND person_type = ?",
|
||||
field.Position-1, field.PersonType,
|
||||
)
|
||||
|
||||
db.Exec(
|
||||
"UPDATE fields SET position = position - 1 WHERE id = ?",
|
||||
field.ID,
|
||||
)
|
||||
|
||||
return c.Redirect("/admin/fields")
|
||||
}
|
||||
|
||||
func FieldMoveDown(c *fiber.Ctx) error {
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var field models.Field
|
||||
result := db.Find(&field, "id = ?", id)
|
||||
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if result.RowsAffected < 1 {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
var lastPosition models.Field
|
||||
result = db.Order("position desc").First(
|
||||
&lastPosition, "person_type = ?", field.PersonType,
|
||||
)
|
||||
|
||||
if result.RowsAffected <= 0 || field.Position >= lastPosition.Position {
|
||||
return c.Redirect("/admin/fields")
|
||||
}
|
||||
|
||||
db.Exec(
|
||||
"UPDATE fields SET position = position - 1 WHERE position = ? AND person_type = ?",
|
||||
field.Position+1, field.PersonType,
|
||||
)
|
||||
|
||||
db.Exec(
|
||||
"UPDATE fields SET position = position + 1 WHERE id = ?",
|
||||
field.ID,
|
||||
)
|
||||
|
||||
return c.Redirect("/admin/fields")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue