summaryrefslogtreecommitdiff
path: root/internal
diff options
from:
to:
context:
space:
mode:
authorGravatar SayaAndy <saya.andy@posteo.com> 2025-10-25 18:53:30 +0700
committerGravatar SayaAndy <saya.andy@posteo.com> 2025-10-25 18:53:30 +0700
commit427ab1a9a4d6094d9f3a84e62f09cc396b49a09b (patch)
tree83535f9d535921cff7739c0166b9494cd7eb2217 /internal
parentdf7a0ae1c0fc177cba2eae8cc73fe21d2afdd229 (diff)
downloadweb-427ab1a9a4d6094d9f3a84e62f09cc396b49a09b.tar.gz
web-427ab1a9a4d6094d9f3a84e62f09cc396b49a09b.zip
fix: make sure db transactions end always
Diffstat (limited to 'internal')
-rw-r--r--internal/mailer/mailer.go18
-rw-r--r--internal/router/client-cache.go6
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 {