Added meta handlers

This commit is contained in:
Hein 2025-12-03 13:52:06 +02:00
parent 06b2404c0c
commit 7c1bae60c9

View File

@ -1819,6 +1819,7 @@ func (h *Handler) generateMetadata(schema, entity string, model interface{}) *co
Schema: schema,
Table: h.getTableName(schema, entity, model),
Columns: []common.Column{},
Relations: []string{},
}
}
@ -1828,11 +1829,39 @@ func (h *Handler) generateMetadata(schema, entity string, model interface{}) *co
Schema: schema,
Table: tableName,
Columns: []common.Column{},
Relations: []string{},
}
for i := 0; i < modelType.NumField(); i++ {
field := modelType.Field(i)
// Skip unexported fields
if !field.IsExported() {
continue
}
gormTag := field.Tag.Get("gorm")
jsonTag := field.Tag.Get("json")
// Skip fields with json:"-"
if jsonTag == "-" {
continue
}
// Get JSON name
jsonName := strings.Split(jsonTag, ",")[0]
if jsonName == "" {
jsonName = field.Name
}
// Check if this is a relation field (slice or struct, but not time.Time)
if field.Type.Kind() == reflect.Slice ||
(field.Type.Kind() == reflect.Struct && field.Type.Name() != "Time") ||
(field.Type.Kind() == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct && field.Type.Elem().Name() != "Time") {
metadata.Relations = append(metadata.Relations, jsonName)
continue
}
// Get column name from gorm tag or json tag
columnName := field.Tag.Get("gorm")
if strings.Contains(columnName, "column:") {
@ -1844,14 +1873,8 @@ func (h *Handler) generateMetadata(schema, entity string, model interface{}) *co
}
}
} else {
columnName = field.Tag.Get("json")
if columnName == "" || columnName == "-" {
columnName = strings.ToLower(field.Name)
columnName = jsonName
}
}
// Check for primary key and unique constraint
gormTag := field.Tag.Get("gorm")
column := common.Column{
Name: columnName,