First working version
This commit is contained in:
48
internal/generator/mapper.go
Normal file
48
internal/generator/mapper.go
Normal file
@ -0,0 +1,48 @@
|
||||
package generator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// GenerateMapper generates the mapper snippet (without imports)
|
||||
func GenerateMapper(ctx *Context) (string, error) {
|
||||
var b strings.Builder
|
||||
|
||||
// Mapper registration (snippet only, no imports)
|
||||
b.WriteString(" mapper_registry.map_imperatively(\n")
|
||||
b.WriteString(fmt.Sprintf(" class_=%s,\n", ctx.EntityName))
|
||||
b.WriteString(fmt.Sprintf(" local_table=%s,\n", ctx.TableConstant))
|
||||
b.WriteString(" properties={\n")
|
||||
|
||||
// Generate relationships for all foreign keys
|
||||
fkRelationships := make(map[string][]string) // entity -> []column_names
|
||||
|
||||
for _, fk := range ctx.TableInfo.ForeignKeys {
|
||||
relationName := GetRelationshipName(fk.ColumnName)
|
||||
entityName := GetRelationshipEntityName(fk.ForeignTableName)
|
||||
|
||||
// Group by entity name to handle multiple FKs to same table
|
||||
fkRelationships[entityName] = append(fkRelationships[entityName], fk.ColumnName)
|
||||
|
||||
if len(fkRelationships[entityName]) == 1 {
|
||||
// First FK to this table
|
||||
b.WriteString(fmt.Sprintf(" \"%s\": relationship(\n", relationName))
|
||||
b.WriteString(fmt.Sprintf(" %s, lazy=relationship_loading_strategy.value\n", entityName))
|
||||
} else {
|
||||
// Multiple FKs to same table, need to specify foreign_keys
|
||||
b.WriteString(fmt.Sprintf(" \"%s\": relationship(\n", relationName))
|
||||
b.WriteString(fmt.Sprintf(" %s,\n", entityName))
|
||||
b.WriteString(" lazy=relationship_loading_strategy.value,\n")
|
||||
b.WriteString(fmt.Sprintf(" foreign_keys=%s.columns.%s,\n",
|
||||
ctx.TableConstant, fk.ColumnName))
|
||||
}
|
||||
|
||||
b.WriteString(" ),\n")
|
||||
}
|
||||
|
||||
b.WriteString(" },\n")
|
||||
b.WriteString(" )\n")
|
||||
|
||||
return b.String(), nil
|
||||
}
|
||||
Reference in New Issue
Block a user