mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2026-06-10 07:43:46 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6590cd789a |
@@ -125,6 +125,13 @@ func (p *NestedCUDProcessor) ProcessNestedCUD(
|
|||||||
result.AffectedRows = 1
|
result.AffectedRows = 1
|
||||||
result.Data = regularData
|
result.Data = regularData
|
||||||
|
|
||||||
|
// Re-select the inserted row so result.Data reflects DB-generated defaults.
|
||||||
|
if row, err := p.processSelect(ctx, tableName, id); err != nil {
|
||||||
|
logger.Warn("Select after insert failed: table=%s, id=%v, error=%v", tableName, id, err)
|
||||||
|
} else if len(row) > 0 {
|
||||||
|
result.Data = row
|
||||||
|
}
|
||||||
|
|
||||||
// Process child relations after parent insert (to get parent ID)
|
// Process child relations after parent insert (to get parent ID)
|
||||||
if err := p.processChildRelations(ctx, "insert", id, relationFields, result.RelationData, modelType, parentIDs); err != nil {
|
if err := p.processChildRelations(ctx, "insert", id, relationFields, result.RelationData, modelType, parentIDs); err != nil {
|
||||||
logger.Error("Failed to process child relations after insert: table=%s, parentID=%v, relations=%+v, error=%v", tableName, id, relationFields, err)
|
logger.Error("Failed to process child relations after insert: table=%s, parentID=%v, relations=%+v, error=%v", tableName, id, relationFields, err)
|
||||||
@@ -146,9 +153,16 @@ func (p *NestedCUDProcessor) ProcessNestedCUD(
|
|||||||
result.AffectedRows = rows
|
result.AffectedRows = rows
|
||||||
result.Data = regularData
|
result.Data = regularData
|
||||||
|
|
||||||
|
// Re-select the updated row so result.Data reflects current DB state.
|
||||||
|
if row, err := p.processSelect(ctx, tableName, result.ID); err != nil {
|
||||||
|
logger.Warn("Select after update failed: table=%s, id=%v, error=%v", tableName, result.ID, err)
|
||||||
|
} else if len(row) > 0 {
|
||||||
|
result.Data = row
|
||||||
|
}
|
||||||
|
|
||||||
// Process child relations for update
|
// Process child relations for update
|
||||||
if err := p.processChildRelations(ctx, "update", data[pkName], relationFields, result.RelationData, modelType, parentIDs); err != nil {
|
if err := p.processChildRelations(ctx, "update", data[pkName], relationFields, result.RelationData, modelType, parentIDs); err != nil {
|
||||||
logger.Error("Failed to process child relations after update: table=%s, parentID=%v, relations=%+v, error=%v", tableName, data[pkName], relationFields, err)
|
logger.Error("Failed to process child relations after update: table=%s, parentID=%v, relations=%+v, error=%v", tableName, data[pkName], regularData, err)
|
||||||
return nil, fmt.Errorf("failed to process child relations: %w", err)
|
return nil, fmt.Errorf("failed to process child relations: %w", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -294,6 +308,20 @@ func (p *NestedCUDProcessor) processInsert(
|
|||||||
return id, nil
|
return id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// processSelect fetches the row identified by id from tableName into a flat map.
|
||||||
|
// Used to populate result.Data with the actual DB state after insert/update.
|
||||||
|
func (p *NestedCUDProcessor) processSelect(ctx context.Context, tableName string, id interface{}) (map[string]interface{}, error) {
|
||||||
|
pkName := reflection.GetPrimaryKeyName(tableName)
|
||||||
|
var row map[string]interface{}
|
||||||
|
if err := p.db.NewSelect().
|
||||||
|
Table(tableName).
|
||||||
|
Where(fmt.Sprintf("%s = ?", QuoteIdent(pkName)), id).
|
||||||
|
Scan(ctx, &row); err != nil {
|
||||||
|
return nil, fmt.Errorf("select after write failed: %w", err)
|
||||||
|
}
|
||||||
|
return row, nil
|
||||||
|
}
|
||||||
|
|
||||||
// processUpdate handles update operation
|
// processUpdate handles update operation
|
||||||
func (p *NestedCUDProcessor) processUpdate(
|
func (p *NestedCUDProcessor) processUpdate(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
|
|||||||
Reference in New Issue
Block a user