Prepare read-only PostgreSQL paper queries and optional Core wiring
Foundry Go checks / check (push) Successful in 3m57s
Foundry Go checks / check (pull_request) Successful in 5m2s

This commit is contained in:
2026-11-07 02:38:28 +08:00
parent 81cf7d9448
commit 028e453d92
9 changed files with 504 additions and 6 deletions
+28
View File
@@ -13,6 +13,7 @@ import (
"gitea.entroia.com/Zayden-Jung/foundry-core/internal/auth"
"gitea.entroia.com/Zayden-Jung/foundry-core/internal/codex"
"gitea.entroia.com/Zayden-Jung/foundry-core/internal/platform"
"gitea.entroia.com/Zayden-Jung/foundry-core/internal/research"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/stdlib"
)
@@ -61,6 +62,33 @@ func main() {
log.Fatal(err)
}
mux := http.NewServeMux()
var papers research.Repository
if researchDSN := os.Getenv("FOUNDRY_RESEARCH_DATABASE_URL"); researchDSN != "" {
researchConfig, err := pgx.ParseConfig(researchDSN)
if err != nil {
log.Fatal("Invalid research database configuration")
}
researchConfig.RuntimeParams["default_transaction_read_only"] = "on"
researchConfig.RuntimeParams["application_name"] = "foundry-research"
researchDB := stdlib.OpenDB(*researchConfig)
defer researchDB.Close()
researchDB.SetMaxOpenConns(2)
researchDB.SetMaxIdleConns(2)
researchDB.SetConnMaxIdleTime(5 * time.Minute)
researchDB.SetConnMaxLifetime(30 * time.Minute)
repository, err := research.NewPostgresRepository(researchDB, env("FOUNDRY_RESEARCH_SCHEMA", "research"))
if err != nil {
log.Fatal("Invalid research database configuration")
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
err = repository.Check(ctx)
cancel()
if err != nil {
log.Fatal("Research database is unavailable or not published")
}
papers = repository
}
research.Register(mux, papers, callbacks)
if err := codex.Register(mux, callbacks, os.Getenv("FOUNDRY_CODEX_SOCKET"), os.Getenv("FOUNDRY_CODEX_GRANTS")); err != nil {
log.Fatal(err)
}