package dto import ( "bytes" "encoding/json" ) // NullInt allows PATCH semantics: // - field omitted => Set=false (no change) // - value null => Set=true, Valid=false (set DB NULL) // - value number => Set=true, Valid=true, Value= type NullInt struct { Set bool Valid bool Value int } func (n *NullInt) UnmarshalJSON(data []byte) error { n.Set = true trimmed := bytes.TrimSpace(data) if bytes.Equal(trimmed, []byte("null")) { n.Valid = false n.Value = 0 return nil } var v int if err := json.Unmarshal(trimmed, &v); err != nil { return err } n.Valid = true n.Value = v return nil }