Files
SakurasanandClaude Sonnet 5 d0e31b198f feat(server): API relay gateway backend M0-M4
Gin + GORM + pure-Go SQLite. Users/auth (JWT), API key management with
quotas, proxy gateway with weighted channel failover and health checks,
usage/billing ledger, cross-protocol conversion (Anthropic Messages /
OpenAI Chat Completions / OpenAI Responses), and channel/model admin API.
Channels declare native API formats and auto-convert the rest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-15 21:05:02 +08:00

45 lines
840 B
Go

package store
import (
"fmt"
"os"
"path/filepath"
"github.com/glebarez/sqlite"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func Open(driver, dsn string, debug bool) (*gorm.DB, error) {
cfg := &gorm.Config{}
if debug {
cfg.Logger = logger.Default.LogMode(logger.Info)
} else {
cfg.Logger = logger.Default.LogMode(logger.Warn)
}
var dialector gorm.Dialector
switch driver {
case "postgres":
dialector = postgres.Open(dsn)
default:
if err := os.MkdirAll(filepath.Dir(dsn), 0o755); err != nil {
return nil, fmt.Errorf("create data dir: %w", err)
}
dialector = sqlite.Open(dsn)
}
db, err := gorm.Open(dialector, cfg)
if err != nil {
return nil, err
}
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxOpenConns(20)
sqlDB.SetMaxIdleConns(5)
return db, nil
}