78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
package common
|
|
|
|
import (
|
|
"github.com/kuzgoga/fogg"
|
|
"go/ast"
|
|
"strings"
|
|
)
|
|
|
|
func GetModelField(model *Model, fieldName string) *Field {
|
|
field, fieldExists := model.Fields[fieldName]
|
|
if fieldExists {
|
|
return &field
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func GetModelFromType(modelType ast.Expr, models map[string]Model) *Model {
|
|
baseType := ResolveBaseType(modelType)
|
|
if baseType != nil {
|
|
return GetRelatedModel(*baseType, models)
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func GetRelatedModel(modelName string, models map[string]Model) *Model {
|
|
model, modelExists := models[modelName]
|
|
if modelExists {
|
|
return &model
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func FindModelParam(paramName string, model Model) *fogg.TagParam {
|
|
for _, field := range model.Fields {
|
|
if field.Tags.HasParam(paramName) {
|
|
return field.Tags.GetParam(paramName)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func FindReferencesInM2M(m2mReference Field, relatedModel Model) *Field {
|
|
/* Find `references` field in m2m relation */
|
|
referencesTag := m2mReference.Tags.GetParam("references")
|
|
if referencesTag != nil {
|
|
return GetModelField(&relatedModel, referencesTag.Value)
|
|
} else {
|
|
for _, field := range relatedModel.Fields {
|
|
if field.Tags.HasOption("primaryKey") {
|
|
return &field
|
|
}
|
|
}
|
|
for _, field := range relatedModel.Fields {
|
|
if strings.ToLower(field.Name) == "id" {
|
|
return &field
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func FindBackReferenceInM2M(relationName string, relatedModel Model) *Field {
|
|
for _, field := range relatedModel.Fields {
|
|
m2mRelation := field.Tags.GetParam("many2many")
|
|
if m2mRelation != nil {
|
|
if m2mRelation.Value == relationName {
|
|
return &field
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//func findForeignKey()
|