beerpong-elo/internal/beerpong-elo.go

72 lines
1.4 KiB
Go
Raw Normal View History

2025-02-02 15:11:35 +01:00
package beerpongelo
import (
"encoding/json"
"log"
"net/http"
"os"
"git.kapelle.org/niklas/beerpong-elo/internal/model"
"git.kapelle.org/niklas/beerpong-elo/internal/repo"
"git.kapelle.org/niklas/beerpong-elo/internal/web"
)
type Config struct {
DBHost string
DBUsername string
DBPassword string
DBName string
Address string
}
func Start(config Config) {
repo, err := repo.NewSQLRepo(config.DBHost, config.DBUsername, config.DBPassword, config.DBName)
if err != nil {
log.Fatalf("Failed to start server: %s", err)
}
mux := web.CreateWebserver(repo)
http.ListenAndServe(config.Address, mux)
}
func Import(config Config, file string) {
repo, err := repo.NewSQLRepo(config.DBHost, config.DBUsername, config.DBPassword, config.DBName)
if err != nil {
log.Fatalf("Failed to import file %s: %s", file, err)
}
controller := newController(repo)
err = loadFromFile(controller, file)
if err != nil {
log.Fatalf("Failed to import file %s: %s", file, err)
}
}
func loadFromFile(c Controller, path string) error {
content, err := os.ReadFile(path)
if err != nil {
return err
}
var payload []model.Game
err = json.Unmarshal(content, &payload)
if err != nil {
return err
}
for _, game := range payload {
_, err = c.AddGame(game)
if err != nil {
return err
}
}
log.Printf("Imported %d games", len(payload))
return nil
}