This commit is contained in:
2026-07-21 05:29:37 +03:00
commit edb875f197
299 changed files with 140638 additions and 0 deletions

174
cmd/main.go Executable file
View File

@@ -0,0 +1,174 @@
package main
import (
"log"
"os"
"os/signal"
"syscall"
"time"
"gordenko.dev/dima/flashscore"
fsmodel "gordenko.dev/dima/flashscore/model"
"gordenko.dev/dima/qx"
"gordenko.dev/dima/tipper/daemon"
"gordenko.dev/dima/tipper/model"
"gordenko.dev/dima/web"
"gordenko.dev/dima/web/api"
"gordenko.dev/dima/web/router"
"gordenko.dev/dima/ws"
_ "github.com/go-sql-driver/mysql"
)
const (
port = 33465
baseDir = "/home/ubuntu/ht"
dsn = "user:password@/tipper"
)
func main() {
logger := log.New(os.Stdout, "", log.LstdFlags)
db, err := qx.Open("mysql", dsn)
if err != nil {
log.Fatalf("qx.Open: %s\n", err)
}
defer db.Close()
tipperModel := model.New(db)
flashscoreModel := fsmodel.New(db)
wsServer, err := ws.NewPublicServer(ws.PublicServerOptions{
Logger: log.New(os.Stdout, "ws: ", log.LstdFlags),
LostConnectionTimeout: time.Duration(60*60*24) * time.Second,
})
if err != nil {
log.Fatalf("ws.NewPublicServer: %s\n", err)
}
d, err := daemon.New(daemon.Options{
Logger: logger,
FlashscoreAPIAddr: "http://localhost:7767/api",
OnexbetWsURL: "ws://localhost:7772/ws",
OnexbetAPIURL: "http://localhost:7772/api",
FlashscoreModel: flashscoreModel,
TipperModel: tipperModel,
SportIDs: []int{
flashscore.Football,
flashscore.Handball,
flashscore.Tennis,
},
})
if err != nil {
log.Fatalf("daemon.New: %s\n", err)
}
publicAPI, err := api.NewAPI(api.Options{
Logger: log.New(os.Stdout, "api: ", log.LstdFlags),
})
if err != nil {
log.Fatalf("api.NewAPI: %s\n", err)
}
publicAPI.PublicFunc("setTipResult", d.SetTipResultManual)
publicAPI.PublicFunc("listSportTips", d.ListSportTips)
publicAPI.PublicFunc("listTeamZones", flashscoreModel.ListTeamZones)
publicAPI.PublicFunc("listTeamsByZone", flashscoreModel.ListTeamsByZone)
publicAPI.PublicFunc("listTeamAliases", flashscoreModel.ListTeamAliases)
publicAPI.PublicFunc("addTeamAlias", flashscoreModel.AddTeamAlias)
publicAPI.PublicFunc("removeTeamAlias", flashscoreModel.RemoveTeamAlias)
publicAPI.PublicFunc("listStrategies", tipperModel.ListStrategies)
publicAPI.PublicFunc("listStrategyRatedChampStats", tipperModel.ListStrategyRatedChampStats)
publicAPI.PublicFunc("getStrategyRatedHistory", tipperModel.GetStrategyRatedHistory)
publicAPI.PublicFunc("listStrategiesReports", tipperModel.ListStrategiesReports)
publicAPI.PublicFunc("listStrategies", tipperModel.ListStrategies)
publicAPI.PublicFunc("listStrategyChampStats", tipperModel.ListStrategyChampStats)
publicAPI.PublicFunc("getStrategyHistory", tipperModel.GetStrategyHistory)
publicAPI.PublicFunc("getSportRatedReport", tipperModel.GetSportRatedReport)
publicAPI.PublicFunc("searchMatchCandidates", d.SearchMatchCandidates)
publicAPI.PublicFunc("searchMatchCandidatesByTeamName", d.SearchMatchCandidatesByTeamName)
publicAPI.PublicFunc("addTeamsAliases", d.AddTeamsAliases)
r := router.New()
r.HandleFunc("/football", pageFootball)
r.HandleFunc("/handball", pageHandball)
r.HandleFunc("/tennis", pageTennis)
r.HandleFunc("/football-by-days", d.PageFootballByDays)
r.HandleFunc("/handball-by-days", d.PageHandballByDays)
r.HandleFunc("/tennis-by-days", d.PageTennisByDays)
r.HandleFunc("/aliases", pageAliases)
r.HandleFunc("/stats", pageStats)
r.HandleFunc("/matches", d.PageMatches)
//r.HandleFunc("/watch", d.PageWatch)
//r.HandleFunc("/unwatch", d.PageUnwatch)
r.HandleFunc("/listRatedChamps", d.ListRatedChamps)
r.HandleFunc("/", pageIndex)
r.HandleFunc("/best-strategies", pageStrategies)
//
r.Handle("/api", publicAPI)
r.Handle("/ws", wsServer)
app, err := web.NewApp(web.AppOptions{
Port: port,
Router: r,
BaseDir: baseDir,
TemplateDir: "templates",
StaticDirs: map[string]string{
"static": "static",
},
})
if err != nil {
log.Fatalf("web.NewApp: %s\n", err)
}
go app.Run()
go d.Run()
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
<-sigs
logger.Println("daemon stopped.")
}
/*
var topChamps = map[string]bool{
"/england/premier-league": true,
"/germany/bundesliga": true,
"/italy/serie-a": true,
"/spain/laliga": true,
"/portugal/primeira-liga": true,
"/switzerland/super-league": true,
"/turkey/super-lig": true,
"/faroe-islands/premier-league": true,
"/usa/mls": true,
}
// Топ чемпы
var myIgnoreChamps = map[string]bool{
"/england/premier-league": true,
"/germany/bundesliga": true,
"/spain/laliga": true,
"/portugal/primeira-liga": true,
"/switzerland/super-league": true,
"/turkey/super-lig": true,
//"/faroe-islands/premier-league": true,
"/usa/mls": true,
}
func acceptedChamps(champs map[string]bool) func(string) bool {
return func(champID string) bool {
return champs[champID]
}
}
func nonAcceptedChamps(champs map[string]bool) func(string) bool {
return func(champID string) bool {
return !champs[champID]
}
}
*/