Last active
May 7, 2022 17:06
-
-
Save valterlobo/491ebdfe4cc76a85efb14ca6b9116131 to your computer and use it in GitHub Desktop.
Golang Transaction - Duvidas em pseudo-código
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func criarDado(sql.Tx, ctx, dado Dado) (error) { | |
} | |
func criarItem(sql.Tx, ctx, item Item) (error) { | |
} | |
pedido ( dado:Dado, itens:[]Item ) | |
func cadastrarPedido(pedido) (error) { | |
ctx := context.Background() | |
tx, err := sql.DB.BeginTx(ctx, nil) | |
errorDado := criarDado(tx, ctx, pedido.dado) | |
if errorDado != nil { | |
tx.Rollback() | |
return errorDado | |
} | |
para cada item no pedido.itens{ | |
errorItem := criarItem ( tx, ctx, item ) | |
if errorItem != nil{ | |
tx.Rollback() | |
return errorItem | |
} | |
} | |
tx.Commit() | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
func GetDB () sql.DB
db, err := sql.Open("mysql",
"user:password@tcp(127.0.0.1:3306)/hello")
if err != nil {
log.Fatal(err)
}
return db
}
type Repository struct {
db *sql.DB
}
func NewRepository(db *sql.DB) Repository {
}
func (r Repository ) Save(d Data ) {
tx, err := r.db.BeginTx(ctx, nil)
if err != nil {
return fail(err)
}
// Defer a rollback in case anything fails.
defer tx.Rollback()
result, err := tx.ExecContext(ctx, "INSERT INTO XXXXXX (id, field ) VALUES (?, ?)",
data.ID, data.Field)
if err != nil {
return fail(err)
}
// Get the ID of the order item just created.
orderID, err := result.LastInsertId()
if err != nil {
return fail(err)
}
}