fix(bun): support extra generated model fields
This commit is contained in:
@@ -51,6 +51,43 @@ func (w *Writer) WriteDatabase(db *models.Database) error {
|
||||
return w.writeSingleFile(db)
|
||||
}
|
||||
|
||||
// addExtraFields appends user-defined extra fields to matching models.
|
||||
// Fields may be scoped by target_table (table name, schema.table name, or model name).
|
||||
// Unscoped fields apply to every generated model.
|
||||
func (w *Writer) addExtraFields(templateData *TemplateData) {
|
||||
extraFields := LoadExtraFieldsFromMetadata(w.options.Metadata)
|
||||
if len(extraFields) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
for _, model := range templateData.Models {
|
||||
for _, ef := range extraFields {
|
||||
if !extraFieldMatchesModel(ef, model) {
|
||||
continue
|
||||
}
|
||||
|
||||
fieldData := &FieldData{
|
||||
Name: resolveFieldNameCollision(ef.Name),
|
||||
Type: ef.Type,
|
||||
BunTag: ef.BunTag,
|
||||
JSONTag: ef.JSONTag,
|
||||
Comment: ef.Comment,
|
||||
}
|
||||
model.ExtraFields = append(model.ExtraFields, fieldData)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func extraFieldMatchesModel(field ExtraFieldConfig, model *ModelData) bool {
|
||||
if field.TargetTable == "" {
|
||||
return true
|
||||
}
|
||||
|
||||
return field.TargetTable == model.TableNameOnly ||
|
||||
field.TargetTable == model.TableName ||
|
||||
field.TargetTable == model.Name
|
||||
}
|
||||
|
||||
// WriteSchema writes a schema as Bun models
|
||||
func (w *Writer) WriteSchema(schema *models.Schema) error {
|
||||
// Create a temporary database with just this schema
|
||||
@@ -107,6 +144,9 @@ func (w *Writer) writeSingleFile(db *models.Database) error {
|
||||
templateData.AddImport("\"fmt\"")
|
||||
}
|
||||
|
||||
// Apply extra fields from generator config (issue #4)
|
||||
w.addExtraFields(templateData)
|
||||
|
||||
// Finalize imports
|
||||
templateData.FinalizeImports()
|
||||
|
||||
@@ -200,6 +240,9 @@ func (w *Writer) writeMultiFile(db *models.Database) error {
|
||||
templateData.AddImport("\"fmt\"")
|
||||
}
|
||||
|
||||
// Apply extra fields from generator config (issue #4)
|
||||
w.addExtraFields(templateData)
|
||||
|
||||
// Finalize imports
|
||||
templateData.FinalizeImports()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user