- Add Google Wire for compile-time dependency injection - Replace concrete service types with interfaces across handlers - Remove global state (DB, cache) in favor of constructor injection - Split monolithic files into focused modules: - config: separate files for each config domain - dto: converters split by domain (user, post, message, group) - cache: separate metrics.go and redis_cache.go - Introduce unified apperrors package with string-based error codes - Add transaction support with context-aware repository methods - Upgrade golang.org/x/crypto from 0.17.0 to 0.26.0
40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
package config
|
|
|
|
import "fmt"
|
|
|
|
// DatabaseConfig 数据库配置
|
|
type DatabaseConfig struct {
|
|
Type string `mapstructure:"type"`
|
|
SQLite SQLiteConfig `mapstructure:"sqlite"`
|
|
Postgres PostgresConfig `mapstructure:"postgres"`
|
|
MaxIdleConns int `mapstructure:"max_idle_conns"`
|
|
MaxOpenConns int `mapstructure:"max_open_conns"`
|
|
LogLevel string `mapstructure:"log_level"`
|
|
SlowThresholdMs int `mapstructure:"slow_threshold_ms"`
|
|
IgnoreRecordNotFound bool `mapstructure:"ignore_record_not_found"`
|
|
ParameterizedQueries bool `mapstructure:"parameterized_queries"`
|
|
}
|
|
|
|
// SQLiteConfig SQLite 配置
|
|
type SQLiteConfig struct {
|
|
Path string `mapstructure:"path"`
|
|
}
|
|
|
|
// PostgresConfig PostgreSQL 配置
|
|
type PostgresConfig struct {
|
|
Host string `mapstructure:"host"`
|
|
Port int `mapstructure:"port"`
|
|
User string `mapstructure:"user"`
|
|
Password string `mapstructure:"password"`
|
|
DBName string `mapstructure:"dbname"`
|
|
SSLMode string `mapstructure:"sslmode"`
|
|
}
|
|
|
|
// DSN 返回 PostgreSQL 连接字符串
|
|
func (d PostgresConfig) DSN() string {
|
|
return fmt.Sprintf(
|
|
"host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
|
|
d.Host, d.Port, d.User, d.Password, d.DBName, d.SSLMode,
|
|
)
|
|
}
|