finish world initialization, set up init on startup and on shutdown, move all models to main directory

This commit is contained in:
lbenedar
2026-04-24 18:04:35 +03:00
parent 07025afefc
commit fd65631be1
125 changed files with 1534 additions and 2802 deletions

View File

@@ -7,6 +7,7 @@ import (
"log/slog"
"net/http/cookiejar"
"os"
"strings"
"time"
"gitea.local.lab/Lbenedar/foundry_helper_service/internal/foundry"
@@ -73,7 +74,7 @@ func openDB(cfg config) (*sqlx.DB, error) {
}
// TODO: change default values
func (app *application) parseFlags() *requests.FoundryHttpRequest {
func (app *application) parseFlags() *transport.FoundryTransportData {
flag.StringVar(&app.cfg.port, "port", ":9090", "Service port")
flag.StringVar(&app.cfg.env, "env", "development", "Enivornment (development|staging|production)")
@@ -85,15 +86,20 @@ func (app *application) parseFlags() *requests.FoundryHttpRequest {
var mode string
flag.StringVar(&mode, "service_mode", "api", "Type of service mode(api|discord|tg)")
foundryHttpData := requests.FoundryHttpRequest{SessionID: nil}
flag.StringVar(&foundryHttpData.Host, "foundry_host", "127.0.0.1", "Address to connect to Foundry")
flag.StringVar(&foundryHttpData.Password, "foundry_pass", "", "Password to connect to Foundry")
var foundryTransportData transport.FoundryTransportData
foundryTransportData.HttpConfig = &requests.FoundryHttpRequest{SessionID: nil}
flag.StringVar(&foundryTransportData.HttpConfig.Host, "foundry_host", "127.0.0.1", "Address to connect to Foundry")
flag.StringVar(&foundryTransportData.HttpConfig.Password, "foundry_pass", "", "Password to connect to Foundry")
var logLevelStr string
flag.StringVar(&logLevelStr, "log_level", "info", "Password to connect to Foundry(debug|info|warn|error)")
var worlds string
flag.StringVar(&worlds, "foundry-worlds", "", "Worlds that initialize in db on startup")
flag.Parse()
foundryTransportData.Worlds = strings.Split(worlds, ",")
app.cfg.mode = service_mode(mode)
logLevel, ok := StringToLogLevel[logLevelStr]
@@ -105,20 +111,21 @@ func (app *application) parseFlags() *requests.FoundryHttpRequest {
if !ok {
app.slogger.Warn("Wrong log level. Started with log_level=info", "received", logLevelStr)
}
return &foundryHttpData
foundryTransportData.Logger = app.slogger
return &foundryTransportData
}
// TODO: Handle DB connection error
func main() {
app := application{foundryApp: &foundry.FoundryApi{}}
foundryHttpData := app.parseFlags()
foundryTransportData := app.parseFlags()
jar, err := cookiejar.New(nil)
if err != nil {
app.slogger.Error("Error", "text", err.Error())
return
}
foundryHttpData.Jar = jar
foundryTransportData.HttpConfig.Jar = jar
app.slogger.Info("", "dsn", app.cfg.db.dsn)
@@ -129,8 +136,15 @@ func main() {
}
defer db.Close()
app.slogger.Info("Database connection pool established")
foundryTransportData.DbConn = db
app.foundryApp.SetTransport(transport.NewFoundryTransport(foundryTransportData))
err = app.foundryApp.PrepareDB()
if err != nil {
app.slogger.Error("Error on preparing database", "err", err)
return
}
app.foundryApp.SetTransport(transport.NewFoundryTransport(db, app.slogger, foundryHttpData))
go app.foundryApp.StartListenFoundry()
app.serve()