refactor(internal/storage): generalization and deduplication

This commit is contained in:
2026-02-15 04:00:16 +03:00
parent 820c9410a1
commit 411574cabe

View File

@@ -2,55 +2,59 @@ package storage
import ( import (
"database/sql" "database/sql"
"errors"
"fmt" "fmt"
"strings"
_ "modernc.org/sqlite" _ "modernc.org/sqlite"
) )
func CreateTables() error { const (
// Requests DB DBDir = "/var/lib/banforge/"
db_r, err := sql.Open("sqlite", ReqDBPath = DBDir + "requests.db"
"/var/lib/banforge/requests.db?"+ banDBPath = DBDir + "bans.db"
"mode=rwc&"+ )
"_pragma=journal_mode(WAL)&"+
"_pragma=busy_timeout(30000)&"+
"_pragma=synchronous(NORMAL)")
if err != nil {
return fmt.Errorf("failed to open requests db: %w", err)
}
defer func() {
err = db_r.Close()
if err != nil {
fmt.Println(err)
}
}()
_, err = db_r.Exec(CreateRequestsTable) var pragmas = map[string]string{
if err != nil { `journal_mode`: `wal`,
return fmt.Errorf("failed to create requests table: %w", err) `synchronous`: `normal`,
} `busy_timeout`: `30000`,
// also consider these
// Bans DB // `temp_store`: `memory`,
db_b, err := sql.Open("sqlite", // `cache_size`: `1000000000`,
"/var/lib/banforge/bans.db?"+ }
"mode=rwc&"+
"_pragma=journal_mode(WAL)&"+ func buildSqliteDsn(path string, pragmas map[string]string) string {
"_pragma=busy_timeout(30000)&"+ pragmastrs := make([]string, len(pragmas))
"_pragma=synchronous(FULL)") i := 0
if err != nil { for k, v := range pragmas {
return fmt.Errorf("failed to open bans db: %w", err) pragmastrs[i] = (fmt.Sprintf(`pragma=%s(%s)`, k, v))
} i++
defer func() { }
err = db_b.Close() return path + "?" + "mode=rwc&" + strings.Join(pragmastrs, "&")
if err != nil { }
fmt.Println(err)
} func initDB(dsn, sqlstr string) (err error) {
}() db, err := sql.Open("sqlite", dsn)
if err != nil {
_, err = db_b.Exec(CreateBansTable) return fmt.Errorf("failed to open %q: %w", dsn, err)
if err != nil { }
return fmt.Errorf("failed to create bans table: %w", err) defer func() {
} closeErr := db.Close()
fmt.Println("Tables created successfully!") if closeErr != nil {
return nil err = errors.Join(err, fmt.Errorf("failed to close %q: %w", dsn, closeErr))
}
}()
if err != nil {
return fmt.Errorf("failed to create table: %w", err)
}
return err
}
func CreateTables() (err error) {
// Requests DB
err1 := initDB(buildSqliteDsn(ReqDBPath, pragmas), CreateRequestsTable)
err2 := initDB(buildSqliteDsn(banDBPath, pragmas), CreateBansTable)
return errors.Join(err1, err2)
} }