Notez la partie sur laquelle j'ai étudié un peu, comme la définition du modèle avec struct
et la migration avec ʻAutoMigrate`.
Je voulais être en mesure de spécifier un UUID fixe lors du test et de la saisie de données de départ tout en laissant la génération automatique de l'UUID à la bibliothèque, j'ai donc pris les mesures suivantes.
Tout d'abord, définissez le modèle dans struct
package model
import (
"github.com/go-playground/validator/v10"
"github.com/google/uuid"
)
type User struct {
ID string `validate:"is_valid_uuid" gorm:"primaryKey;size:255;default:uuid_generate_v4()" json:"id"`
...
}
//Si l'ID ne vient pas, ne le validez pas, et si c'est le cas, vérifiez s'il s'agit d'un UUID
validate := validator.New()
validate.RegisterValidation("is_valid_uuid", isValidUUID)
func isValidUUID(fl v.FieldLevel) bool {
id := fl.Field().String()
if len(id) == 0 {
return true
}
_, err := uuid.Parse(id)
return err == nil
}
Pour utiliser ʻuuid_generate_v4 () ci-dessus, installez l'extension ʻuuid-ossp
sur postgres avant ʻAutoMigrate (& User {})`
db, err = gorm.Open("postgres", fmt.Sprintf(
"host=%s port=%s user=%s password=%s dbname=%s", host, port, user, password, dbname,
))
if err != nil {
panic(err)
}
db.Exec(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`)
result := db.AutoMigrate(&model.User{})
...
Spécifiez le type avec la balise de struct
type User struct {
Role string `validate:"is_valid_role" gorm:"type:role_enum;default:'user'" json:"role"`
...
}
ʻAjouter une définition de type aux postgres avant AutoMigrate`
db.Exec(`
DO
$$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'role_enum') THEN
create type role_enum AS ENUM ('admin', 'editor', 'user');
END IF;
END
$$;
`)
result := db.AutoMigrate(&model.User{})
...
C'était un mémo sur la migration de GORM. S'il y en a d'autres, je les ajouterai.
Recommended Posts