Complete foundational data layer with repository implementation
- Add GORM dependencies for SQLite and PostgreSQL - Create domain models (User, Session, File) with common errors - Implement repository interfaces and database layer with migrations - Update WebApp to bootstrap with database and repositories - Add comprehensive unit tests for repository methods - Update config structure to support multiple database drivers - Extend AGENTS.md with debugging principles and dependency rules
This commit is contained in:
@@ -20,8 +20,22 @@ type ServerConfig struct {
|
||||
}
|
||||
|
||||
type DatabaseConfig struct {
|
||||
Driver string `mapstructure:"driver"`
|
||||
Path string `mapstructure:"path"`
|
||||
Driver string `mapstructure:"driver"`
|
||||
SQLite SQLiteConfig `mapstructure:"sqlite"`
|
||||
Postgres PostgresConfig `mapstructure:"postgres"`
|
||||
}
|
||||
|
||||
type SQLiteConfig struct {
|
||||
Path string `mapstructure:"path"`
|
||||
}
|
||||
|
||||
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"`
|
||||
}
|
||||
|
||||
type StorageConfig struct {
|
||||
@@ -60,8 +74,26 @@ func (c *Config) Validate() error {
|
||||
errs = append(errs, fmt.Errorf("server.host: %q is not a valid IP address", c.Server.Host))
|
||||
}
|
||||
|
||||
if c.Database.Path == "" {
|
||||
errs = append(errs, errors.New("database.path: must not be empty"))
|
||||
switch c.Database.Driver {
|
||||
case "sqlite3":
|
||||
if c.Database.SQLite.Path == "" {
|
||||
errs = append(errs, errors.New("database.sqlite.path: must not be empty"))
|
||||
}
|
||||
case "postgres":
|
||||
if c.Database.Postgres.Host == "" {
|
||||
errs = append(errs, errors.New("database.postgres.host: must not be empty"))
|
||||
}
|
||||
if c.Database.Postgres.Port < 1 || c.Database.Postgres.Port > 65535 {
|
||||
errs = append(errs, fmt.Errorf("database.postgres.port: %d out of range [1, 65535]", c.Database.Postgres.Port))
|
||||
}
|
||||
if c.Database.Postgres.User == "" {
|
||||
errs = append(errs, errors.New("database.postgres.user: must not be empty"))
|
||||
}
|
||||
if c.Database.Postgres.DBName == "" {
|
||||
errs = append(errs, errors.New("database.postgres.dbname: must not be empty"))
|
||||
}
|
||||
default:
|
||||
errs = append(errs, fmt.Errorf("database.driver: %q is not supported (use sqlite3 or postgres)", c.Database.Driver))
|
||||
}
|
||||
|
||||
if c.Storage.Local.Path == "" {
|
||||
|
||||
Reference in New Issue
Block a user