feat: add PostgreSQL persistence layer with Neon DB support
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"tutor/internal/config"
|
||||
"tutor/internal/db"
|
||||
"tutor/internal/httpapi"
|
||||
"tutor/internal/interview"
|
||||
"tutor/internal/learnermemory"
|
||||
@@ -15,12 +17,38 @@ import (
|
||||
|
||||
func NewServer(cfg config.Config) *http.Server {
|
||||
runner := workflows.NewStubRunner()
|
||||
store := interview.NewMemoryStore()
|
||||
memory := learnermemory.NewService(learnermemory.NewMemoryStore())
|
||||
|
||||
var interviewStore interview.Store
|
||||
var memoryStore learnermemory.Store
|
||||
var ontologyStore ontology.Store
|
||||
var assetsStore teachingassets.Store
|
||||
|
||||
if cfg.DatabaseURL != "" {
|
||||
pool, err := db.Open(cfg.DatabaseURL)
|
||||
if err != nil {
|
||||
log.Fatalf("open database: %v", err)
|
||||
}
|
||||
if err := db.Migrate(pool); err != nil {
|
||||
log.Fatalf("migrate database: %v", err)
|
||||
}
|
||||
interviewStore = interview.NewPostgresStore(pool)
|
||||
memoryStore = learnermemory.NewPostgresStore(pool)
|
||||
ontologyStore = ontology.NewPostgresStore(pool)
|
||||
assetsStore = teachingassets.NewPostgresStore(pool)
|
||||
log.Println("using postgres persistence")
|
||||
} else {
|
||||
interviewStore = interview.NewMemoryStore()
|
||||
memoryStore = learnermemory.NewMemoryStore()
|
||||
ontologyStore = ontology.NewMemoryStore()
|
||||
assetsStore = teachingassets.NewMemoryStore()
|
||||
log.Println("using in-memory persistence")
|
||||
}
|
||||
|
||||
memory := learnermemory.NewService(memoryStore)
|
||||
progress := progression.NewService(memory)
|
||||
onto := ontology.NewService(ontology.NewMemoryStore())
|
||||
assets := teachingassets.NewService(teachingassets.NewMemoryStore(), onto, cfg.ImageModelKey)
|
||||
service := interview.NewService(store, runner, memory)
|
||||
onto := ontology.NewService(ontologyStore)
|
||||
assets := teachingassets.NewService(assetsStore, onto, cfg.ImageModelKey)
|
||||
service := interview.NewService(interviewStore, runner, memory)
|
||||
handler := httpapi.NewHandler(cfg, service, memory, progress, onto, assets)
|
||||
|
||||
return &http.Server{
|
||||
|
||||
Reference in New Issue
Block a user