59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
package services
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
_ "embed"
|
|
|
|
"github.com/andreykaipov/goobs"
|
|
"github.com/charmbracelet/log"
|
|
"github.com/radiden/obs-replay-server/models"
|
|
)
|
|
|
|
type Database struct {
|
|
Client *sql.DB
|
|
Queries *models.Queries
|
|
}
|
|
|
|
type Services struct {
|
|
OBS *goobs.Client
|
|
DB *Database
|
|
}
|
|
|
|
func InitServices(initialSchema string) *Services {
|
|
db, err := initDB(initialSchema)
|
|
if err != nil {
|
|
log.Fatal("couldn't initialize db", "error", err)
|
|
}
|
|
|
|
obs, err := initOBS()
|
|
if err != nil {
|
|
log.Fatal("couldn't connect to obs", "error", err)
|
|
}
|
|
return &Services{
|
|
DB: db,
|
|
OBS: obs,
|
|
}
|
|
}
|
|
|
|
func initDB(initialSchema string) (*Database, error) {
|
|
ctx := context.Background()
|
|
|
|
db, err := sql.Open("sqlite3", "file:db.sqlite")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
db.ExecContext(ctx, initialSchema)
|
|
|
|
return &Database{
|
|
Client: db,
|
|
Queries: models.New(db),
|
|
}, nil
|
|
}
|
|
|
|
func initOBS() (*goobs.Client, error) {
|
|
obs, err := goobs.New("localhost:4455", goobs.WithPassword("ThpNdGXBwneYn9X7"))
|
|
return obs, err
|
|
}
|