72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
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
|
|
}
|