Admin: Gestion des listes
This commit is contained in:
parent
c54cad7738
commit
151a199bc5
13 changed files with 605 additions and 29 deletions
|
|
@ -30,7 +30,37 @@ func Lists(c *fiber.Ctx) error {
|
|||
}
|
||||
|
||||
func ListShow(c *fiber.Ctx) error {
|
||||
return c.SendString("ListShow")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Listes",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
var listItems []models.ListItem
|
||||
db.Find(&listItems, "list_id = ?", id)
|
||||
|
||||
return c.Render("list", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"ListItems": listItems,
|
||||
})
|
||||
}
|
||||
|
||||
func ListAdd(c *fiber.Ctx) error {
|
||||
|
|
@ -77,21 +107,272 @@ func ListAdd(c *fiber.Ctx) error {
|
|||
}
|
||||
|
||||
func ListEdit(c *fiber.Ctx) error {
|
||||
return c.SendString("ListEdit")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Modifier liste",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
var errors []string
|
||||
if c.Method() == "POST" {
|
||||
multiOriginal := list.Multi
|
||||
|
||||
name := c.FormValue("name")
|
||||
multi := c.FormValue("multi")
|
||||
|
||||
if len(name) > 100 || len(name) < 1 {
|
||||
errors = append(errors, "Le nom doit avoir entre 1 et 100 caractères")
|
||||
}
|
||||
|
||||
list.Name = name
|
||||
list.Multi = false
|
||||
if multi == "on" {
|
||||
list.Multi = true
|
||||
}
|
||||
|
||||
if len(errors) == 0 {
|
||||
result := db.Save(&list)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
} else {
|
||||
if !list.Multi && multiOriginal {
|
||||
var listItems []models.ListItem
|
||||
result2 := db.Find(&listItems,
|
||||
"list_id = ? AND `default` = ?",
|
||||
list.ID, true,
|
||||
)
|
||||
|
||||
if result2.RowsAffected > 1 {
|
||||
db.Model(&models.ListItem{}).Where(
|
||||
"list_id = ?", list.ID,
|
||||
).Update("default", false)
|
||||
}
|
||||
}
|
||||
|
||||
c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d",
|
||||
list.ID,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render("list_form", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"Errors": errors,
|
||||
})
|
||||
}
|
||||
|
||||
func ListDelete(c *fiber.Ctx) error {
|
||||
return c.SendString("ListDelete")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
result := db.Delete(&models.List{}, id)
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Redirect("/admin/lists")
|
||||
}
|
||||
|
||||
func ListItemAdd(c *fiber.Ctx) error {
|
||||
return c.SendString("ListItemAdd")
|
||||
id := c.Params("id")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Ajouter un élément à la liste",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
listItem := models.ListItem{
|
||||
ListID: list.ID,
|
||||
}
|
||||
var errors []string
|
||||
|
||||
if c.Method() == "POST" {
|
||||
value := c.FormValue("value")
|
||||
isDefault := c.FormValue("default")
|
||||
|
||||
if len(value) > 100 || len(value) < 1 {
|
||||
errors = append(errors, "La valeur doit avoir entre 1 et 100 caractères")
|
||||
}
|
||||
|
||||
listItem.Value = value
|
||||
listItem.Default = false
|
||||
if isDefault == "on" {
|
||||
listItem.Default = true
|
||||
}
|
||||
|
||||
if len(errors) == 0 {
|
||||
result := db.Create(&listItem)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
} else {
|
||||
if listItem.Default && !list.Multi {
|
||||
db.Model(&models.ListItem{}).Where(
|
||||
"list_id = ? AND id <> ?",
|
||||
list.ID, listItem.ID,
|
||||
).Update("default", false)
|
||||
}
|
||||
|
||||
c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d",
|
||||
list.ID,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render("listitem_form", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"ListItem": listItem,
|
||||
"Errors": errors,
|
||||
})
|
||||
}
|
||||
|
||||
func ListItemEdit(c *fiber.Ctx) error {
|
||||
return c.SendString("ListItemEdit")
|
||||
id := c.Params("id")
|
||||
itemid := c.Params("itemid")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var listItem models.ListItem
|
||||
result2 := db.Find(&listItem, "id = ?", itemid)
|
||||
|
||||
if errors.Is(result2.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result2.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
title := fmt.Sprintf(
|
||||
"%s | Modifier un élément de la liste",
|
||||
list.Name,
|
||||
)
|
||||
|
||||
var errors []string
|
||||
if c.Method() == "POST" {
|
||||
value := c.FormValue("value")
|
||||
isDefault := c.FormValue("default")
|
||||
|
||||
if len(value) > 100 || len(value) < 1 {
|
||||
errors = append(errors, "La valeur doit avoir entre 1 et 100 caractères")
|
||||
}
|
||||
|
||||
listItem.Value = value
|
||||
listItem.Default = false
|
||||
if isDefault == "on" {
|
||||
listItem.Default = true
|
||||
}
|
||||
|
||||
if len(errors) == 0 {
|
||||
result3 := db.Save(&listItem)
|
||||
if result3.Error != nil {
|
||||
return result3.Error
|
||||
} else {
|
||||
if listItem.Default && !list.Multi {
|
||||
db.Model(&models.ListItem{}).Where(
|
||||
"list_id = ? AND id <> ?",
|
||||
list.ID, listItem.ID,
|
||||
).Update("default", false)
|
||||
}
|
||||
|
||||
c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d",
|
||||
list.ID,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render("listitem_form", fiber.Map{
|
||||
"PageTitle": title,
|
||||
"List": list,
|
||||
"ListItem": listItem,
|
||||
"Errors": errors,
|
||||
})
|
||||
}
|
||||
|
||||
func ListItemDelete(c *fiber.Ctx) error {
|
||||
return c.SendString("ListItemDelete")
|
||||
id := c.Params("id")
|
||||
itemid := c.Params("itemid")
|
||||
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var list models.List
|
||||
result := db.Find(&list, "id = ?", id)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
return fiber.NewError(fiber.StatusNotFound, "Not found")
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
result2 := db.Delete(&models.ListItem{}, itemid)
|
||||
if result2.Error != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Redirect(fmt.Sprintf(
|
||||
"/admin/lists/%d", list.ID,
|
||||
))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue