more db refactors

This commit is contained in:
2026-02-09 22:28:52 +11:00
parent a4b4f4f4af
commit 6d5983c376
4 changed files with 18 additions and 22 deletions

View File

@@ -2,6 +2,7 @@ package db
import (
"context"
"fmt"
"net/http"
"strings"
@@ -47,17 +48,18 @@ func InsertMultiple[T any](tx bun.Tx, models []*T) *inserter[T] {
}
}
// On adds .On handling for upserts
// Example: .On("(discord_id) DO UPDATE")
func (i *inserter[T]) On(query string) *inserter[T] {
i.q = i.q.On(query)
func (i *inserter[T]) ConflictNothing(conflicts ...string) *inserter[T] {
fieldstr := strings.Join(conflicts, ", ")
i.q = i.q.On(fmt.Sprintf("CONFLICT (%s) DO NOTHING", fieldstr))
return i
}
// Set adds a SET clause for upserts (use with OnConflict)
// Example: .Set("access_token = EXCLUDED.access_token")
func (i *inserter[T]) Set(query string, args ...any) *inserter[T] {
i.q = i.q.Set(query, args...)
func (i *inserter[T]) ConflictUpdate(conflicts []string, columns ...string) *inserter[T] {
fieldstr := strings.Join(conflicts, ", ")
i.q = i.q.On(fmt.Sprintf("CONFLICT (%s) DO UPDATE", fieldstr))
for _, column := range columns {
i.q = i.q.Set(fmt.Sprintf("%s = EXCLUDED.%s", column, column))
}
return i
}