From 9bfb31798cd887a520ef178a336406a06ec0897b Mon Sep 17 00:00:00 2001 From: ~wispem-wantex Date: Sat, 14 Feb 2026 18:33:41 -0800 Subject: [PATCH] codegen: don't auto-timestamp overwrite provided timestamps if there are ones --- pkg/codegen/modelgenerate/generate_model.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/pkg/codegen/modelgenerate/generate_model.go b/pkg/codegen/modelgenerate/generate_model.go index 414e028..944fe7a 100644 --- a/pkg/codegen/modelgenerate/generate_model.go +++ b/pkg/codegen/modelgenerate/generate_model.go @@ -403,10 +403,21 @@ func GenerateSaveItemFunc(tbl schema.Table) *ast.FuncDecl { ret1 := []ast.Stmt{Comment("Do create")} if hasCreatedAt { // Auto-timestamps: created_at - ret1 = append(ret1, &ast.AssignStmt{ - Lhs: []ast.Expr{&ast.SelectorExpr{X: ast.NewIdent(tbl.VarName), Sel: ast.NewIdent("CreatedAt")}}, - Tok: token.ASSIGN, - Rhs: []ast.Expr{&ast.CallExpr{Fun: ast.NewIdent("TimestampNow"), Args: []ast.Expr{}}}, + ret1 = append(ret1, &ast.IfStmt{ + // Don't overwrite existing timestamps. This is useful for various reasons, e.g., data import / migrations + Cond: &ast.CallExpr{Fun: &ast.SelectorExpr{ + X: &ast.SelectorExpr{X: ast.NewIdent(tbl.VarName), Sel: ast.NewIdent("CreatedAt")}, + Sel: ast.NewIdent("IsZero"), + }}, + Body: &ast.BlockStmt{ + List: []ast.Stmt{ + &ast.AssignStmt{ + Lhs: []ast.Expr{&ast.SelectorExpr{X: ast.NewIdent(tbl.VarName), Sel: ast.NewIdent("CreatedAt")}}, + Tok: token.ASSIGN, + Rhs: []ast.Expr{&ast.CallExpr{Fun: ast.NewIdent("TimestampNow"), Args: []ast.Expr{}}}, + }, + }, + }, }) } return append(ret1, namedExecStmt(insertStmt)...)