package controllers import ( "errors" "fmt" "strconv" "git.readonly.ch/bouzoure/pop-camarades/helpers" "git.readonly.ch/bouzoure/pop-camarades/models" "github.com/gofiber/fiber/v2" "gorm.io/gorm" ) func Fields(c *fiber.Ctx) error { db, err := helpers.GetDatabase() if err != nil { return err } var fields []models.Field result := db.Order("name collate nocase asc").Find(&fields) if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) { return err } return c.Render("fields", fiber.Map{ "PageTitle": "Champs supplémentaires", "Fields": fields, "PersonTypes": models.PersonTypes, "FieldTypes": models.FieldTypes, }) } func FieldShow(c *fiber.Ctx) error { id := c.Params("id") db, err := helpers.GetDatabase() if err != nil { return err } var field models.Field result := db.Preload("List").Find(&field, "id = ?", id) if errors.Is(result.Error, gorm.ErrRecordNotFound) { return fiber.NewError(fiber.StatusNotFound, "Not found") } if result.Error != nil { return result.Error } title := fmt.Sprintf( "%s | Champs supplémentaires", field.Name, ) return c.Render("field", fiber.Map{ "PageTitle": title, "Field": field, "PersonTypes": models.PersonTypes, "FieldTypes": models.FieldTypes, }) } func FieldAdd(c *fiber.Ctx) error { var field models.Field var errors []string db, err := helpers.GetDatabase() if err != nil { return err } var lists []models.List db.Order("name collate nocase asc").Find(&lists) if c.Method() == "POST" { field.Name = c.FormValue("name") if len(field.Name) > 100 || len(field.Name) < 1 { errors = append(errors, "Le nom doit contentir entre 1 et 100 caractères") } for key := range models.PersonTypes { if c.FormValue("person_type") == key { field.PersonType = key } } if len(field.PersonType) < 1 { errors = append(errors, "Population incorrecte") } for key := range models.FieldTypes { if c.FormValue("field_type") == key { field.FieldType = key } } if len(field.FieldType) < 1 { errors = append(errors, "Type de champ incorrect") } if field.FieldType == "list" { listID, err := strconv.ParseUint(c.FormValue("list"), 10, 0) if err != nil || listID < 1 { errors = append(errors, "Liste incorrecte") } else { field.ListID = uint(listID) } } if len(errors) == 0 { result := db.Create(&field) if result.Error != nil { return result.Error } else { c.Redirect(fmt.Sprintf( "/admin/fields/%d", field.ID, )) } } } return c.Render("field_form", fiber.Map{ "PageTitle": "Ajouter un champ", "Field": field, "Lists": lists, "Errors": errors, "PersonTypes": models.PersonTypes, "FieldTypes": models.FieldTypes, }) } func FieldEdit(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 errors.Is(result.Error, gorm.ErrRecordNotFound) { return fiber.NewError(fiber.StatusNotFound, "Not found") } if result.Error != nil { return result.Error } title := fmt.Sprintf( "%s | Modifier un champ", field.Name, ) var errors []string if c.Method() == "POST" { field.Name = c.FormValue("name") if len(field.Name) > 100 || len(field.Name) < 1 { errors = append(errors, "Le nom doit contentir entre 1 et 100 caractères") } if len(errors) == 0 { result := db.Save(&field) if result.Error != nil { return result.Error } else { c.Redirect(fmt.Sprintf( "/admin/fields/%d", field.ID, )) } } } return c.Render("field_form", fiber.Map{ "PageTitle": title, "Field": field, "Errors": errors, }) } func FieldDelete(c *fiber.Ctx) error { id := c.Params("id") db, err := helpers.GetDatabase() if err != nil { return err } result := db.Delete(&models.Field{}, id) if result.Error != nil { return result.Error } return c.Redirect("/admin/fields") }