70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
_ "github.com/lib/pq"
|
|
log "github.com/nacorid/logger"
|
|
"github.com/nacorid/naco-api/internal/activitypub"
|
|
"github.com/nacorid/naco-api/internal/bluesky"
|
|
"github.com/nacorid/naco-api/internal/config"
|
|
"github.com/nacorid/naco-api/internal/ollama"
|
|
"github.com/nacorid/naco-api/internal/server"
|
|
"github.com/nacorid/naco-api/internal/store"
|
|
)
|
|
|
|
func main() {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
cfg := config.Load()
|
|
|
|
log.Init(log.Config{
|
|
LogFilePath: cfg.LogFile,
|
|
ConsoleLevel: log.LevelDebug,
|
|
FileLevel: log.LevelTrace,
|
|
})
|
|
conn, err := sql.Open("postgres", cfg.DatabaseURL)
|
|
if err != nil {
|
|
log.Fatalf("Failed to connect to database: %v", err)
|
|
}
|
|
defer conn.Close()
|
|
db := store.New(conn)
|
|
|
|
bskyClient, err := bluesky.NewBlueskyClient(ctx, cfg.BlueskyDID, cfg.BlueskyAppPassword, cfg.BlueskyHost)
|
|
if err != nil {
|
|
log.Fatal("Failed to create bluesky client", "error", err)
|
|
}
|
|
|
|
uri, err := url.Parse(cfg.OllamaHost)
|
|
if err != nil {
|
|
log.Fatal("Invalid OLLAMA_HOST URL", "error", err)
|
|
}
|
|
ollamaClient := ollama.New(ctx, uri, http.DefaultClient)
|
|
|
|
apClient, err := activitypub.NewAPClient(ctx, cfg.ActivityPubHost, cfg.ActivityPubToken)
|
|
if err != nil {
|
|
log.Fatal("Failed to create activitypub client", "error", err)
|
|
}
|
|
|
|
srv := server.New(ctx, db, apClient, bskyClient, ollamaClient, cfg)
|
|
|
|
go func() {
|
|
log.Info("Server starting", "address", cfg.ListenAddress)
|
|
if err := srv.Start(); err != http.ErrServerClosed {
|
|
log.Fatal("HTTP server error", "error", err)
|
|
}
|
|
}()
|
|
|
|
stopChan := make(chan os.Signal, 1)
|
|
signal.Notify(stopChan, syscall.SIGINT, syscall.SIGTERM)
|
|
<-stopChan
|
|
|
|
log.Info("Shutting down server...")
|
|
}
|