First working version

This commit is contained in:
Eden Kirin
2025-10-31 14:36:41 +01:00
parent f8edfc0fc1
commit f9f67b6c93
22 changed files with 2277 additions and 0 deletions

View 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
}