This repository has been archived on 2025-10-08. You can view files and clone it, but cannot push or open issues or pull requests.
miniauthold/pkg/userstore/store.go
kekskurse 42358e03a4
Some checks failed
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/playwright Pipeline failed
ci/woodpecker/push/deplyoment unknown status
chore: dont store user if cant send mail to
2025-03-16 14:29:21 +01:00

86 lines
1.6 KiB
Go

package userstore
import (
"database/sql"
_ "embed"
"fmt"
"os"
"strings"
"git.keks.cloud/kekskurse/miniauth/pkg/utils"
"github.com/google/uuid"
"github.com/rs/zerolog"
_ "github.com/tursodatabase/libsql-client-go/libsql"
_ "modernc.org/sqlite"
)
//go:embed migrations/schema.sql
var schema string
type Config struct {
SQLite struct {
Path string `env:"SQLITE_PATH"`
}
Logger zerolog.Logger
}
type Store struct {
log zerolog.Logger
db *sql.DB
}
func NewStore(c Config) (Store, error) {
log := c.Logger.With().Str("pkg", "userstore").Str("sqlitePath", c.SQLite.Path).Logger()
db, err := sql.Open("libsql", c.SQLite.Path)
if err != nil {
return Store{}, utils.WrapError(ErrCantOpenDatabase, err, log)
}
err = db.Ping()
if err != nil {
return Store{}, utils.WrapError(ErrCantOpenDatabase, err, log)
}
s := Store{
db: db,
log: log,
}
_, err = s.db.Exec("PRAGMA foreign_keys = ON;")
if err != nil {
return Store{}, err
}
return s, nil
}
func NewDummyStore() (Store, error) {
name, err := os.MkdirTemp("", "miniauth-teststore")
if err != nil {
return Store{}, err
}
c := Config{}
c.SQLite.Path = fmt.Sprintf("file://%v/%v.sqlite", name, uuid.NewString())
fmt.Println(c.SQLite.Path)
store, err := NewStore(c)
if err != nil {
return Store{}, err
}
newSchema := strings.Replace(schema, "CREATE TABLE sqlite_sequence(name,seq);", "", 1)
_, err = store.db.Exec(newSchema)
if err != nil {
return Store{}, err
}
_, err = store.db.Exec("PRAGMA foreign_keys = ON;")
if err != nil {
return Store{}, err
}
return store, nil
}