funccropImage(db *gorm.DB) { if db.Statement.Schema != nil { // crop image fields and upload them to CDN, dummy code for _, field := range db.Statement.Schema.Fields { switch db.Statement.ReflectValue.Kind() { case reflect.Slice, reflect.Array: for i := 0; i < db.Statement.ReflectValue.Len(); i++ { // Get value from field if fieldValue, isZero := field.ValueOf(db.Statement.Context, db.Statement.ReflectValue.Index(i)); !isZero { if crop, ok := fieldValue.(CropInterface); ok { crop.Crop() } } } case reflect.Struct: // Get value from field if fieldValue, isZero := field.ValueOf(db.Statement.Context, db.Statement.ReflectValue); !isZero { if crop, ok := fieldValue.(CropInterface); ok { crop.Crop() } }
// Set value to field err := field.Set(db.Statement.Context, db.Statement.ReflectValue, "newValue") } }
// All fields for current model db.Statement.Schema.Fields
// All primary key fields for current model db.Statement.Schema.PrimaryFields
// Prioritized primary key field: field with DB name `id` or the first defined primary key db.Statement.Schema.PrioritizedPrimaryField
// All relationships for current model db.Statement.Schema.Relationships
// Find field with field name or db name field := db.Statement.Schema.LookUpField("Name")
// processing } }
db.Callback().Create().Register("crop_image", cropImage) // register a callback for Create process