diff options
| author | 2025-10-25 18:53:30 +0700 | |
|---|---|---|
| committer | 2025-10-25 18:53:30 +0700 | |
| commit | 427ab1a9a4d6094d9f3a84e62f09cc396b49a09b (patch) | |
| tree | 83535f9d535921cff7739c0166b9494cd7eb2217 /internal | |
| parent | df7a0ae1c0fc177cba2eae8cc73fe21d2afdd229 (diff) | |
| download | web-427ab1a9a4d6094d9f3a84e62f09cc396b49a09b.tar.gz web-427ab1a9a4d6094d9f3a84e62f09cc396b49a09b.zip | |
fix: make sure db transactions end always
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/mailer/mailer.go | 18 | ||||
| -rw-r--r-- | internal/router/client-cache.go | 6 |
2 files changed, 20 insertions, 4 deletions
diff --git a/internal/mailer/mailer.go b/internal/mailer/mailer.go index c146548..eb86d56 100644 --- a/internal/mailer/mailer.go +++ b/internal/mailer/mailer.go @@ -151,13 +151,17 @@ func (m *Mailer) MailIsTaken(email string) (bool, error) { if err != nil { return false, fmt.Errorf("failed to initialize transaction with db: %s", err) } + defer func(tx *sql.Tx) { + if err = tx.Commit(); err != nil { + tx.Rollback() + } + }(tx) var rows *sql.Rows if rows, err = tx.Query(`SELECT email FROM user_email_table WHERE email=? LIMIT 1;`, email); err != nil { tx.Rollback() return false, fmt.Errorf("failed to query user-email settings in db: %s", err) } - defer tx.Commit() defer rows.Close() isTaken := rows.Next() @@ -169,13 +173,17 @@ func (m *Mailer) GetInfo(userIdHash []byte) (email string, lang string, err erro if err != nil { return "", "", fmt.Errorf("failed to initialize transaction with db: %s", err) } + defer func(tx *sql.Tx) { + if err = tx.Commit(); err != nil { + tx.Rollback() + } + }(tx) var rows *sql.Rows if rows, err = tx.Query(`SELECT email, lang FROM user_email_table WHERE user_id=? LIMIT 1;`, userIdHash); err != nil { tx.Rollback() return "", "", fmt.Errorf("failed to query user-email settings in db: %s", err) } - defer tx.Commit() defer rows.Close() if !rows.Next() { @@ -325,6 +333,11 @@ func (m *Mailer) GetSubscriptions(userId string) (subscriptionType SubscriptionT if err != nil { return None, nil, fmt.Errorf("failed to initialize transaction with db: %s", err) } + defer func(tx *sql.Tx) { + if err = tx.Commit(); err != nil { + tx.Rollback() + } + }(tx) hash := m.GetHash(userId) @@ -333,7 +346,6 @@ func (m *Mailer) GetSubscriptions(userId string) (subscriptionType SubscriptionT tx.Rollback() return None, nil, fmt.Errorf("failed to query user-to-tags table in db for the user: %s", err) } - defer tx.Commit() defer rows.Close() if !rows.Next() { diff --git a/internal/router/client-cache.go b/internal/router/client-cache.go index d607cdd..26557d0 100644 --- a/internal/router/client-cache.go +++ b/internal/router/client-cache.go @@ -110,7 +110,11 @@ func (c *ClientCache) Close() error { return fmt.Errorf("fail to save blog_views: %s", err) } - return tx.Commit() + if err = tx.Commit(); err != nil { + tx.Rollback() + return fmt.Errorf("fail to commit all the changes related to cache: %s", err) + } + return nil } func (c *ClientCache) GetHash(id string) string { |