diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..5c08376 --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,40 @@ +package config + +import ( + "os" + "path/filepath" + "sync" +) + +type Config struct { + ListenAddr string + DataDir string + DBPath string + ReposDir string +} + +var instance *Config +var initOnce sync.Once + +func Get() *Config { + initOnce.Do(func() { + instance = &Config{ + ListenAddr: ":9000", + DataDir: "./data", + } + }) + return instance +} + +func (c *Config) SetDataDir(dir string) { + c.DataDir = dir + c.DBPath = filepath.Join(dir, "gitm.db") + c.ReposDir = filepath.Join(dir, "repos") +} + +func (c *Config) EnsureDirs() error { + if err := os.MkdirAll(c.DataDir, 0755); err != nil { + return err + } + return os.MkdirAll(c.ReposDir, 0755) +} diff --git a/internal/models/models.go b/internal/models/models.go new file mode 100644 index 0000000..e757787 --- /dev/null +++ b/internal/models/models.go @@ -0,0 +1,42 @@ +package models + +import "time" + +type GiteaServer struct { + ID int64 `json:"id"` + Name string `json:"name"` + URL string `json:"url"` + Token string `json:"-"` // Never expose in JSON + SyncInterval int `json:"sync_interval"` + LastSyncAt *time.Time `json:"last_sync_at"` + Status string `json:"status"` + CreatedAt time.Time `json:"created_at"` +} + +type Repo struct { + ID int64 `json:"id"` + ServerID int64 `json:"server_id"` + Name string `json:"name"` + FullName string `json:"full_name"` + CloneURL string `json:"clone_url"` + LocalPath string `json:"local_path"` + Size int64 `json:"size"` + LastSyncAt *time.Time `json:"last_sync_at"` + SyncStatus string `json:"sync_status"` + CreatedAt time.Time `json:"created_at"` +} + +type SyncLog struct { + ID int64 `json:"id"` + ServerID int64 `json:"server_id"` + RepoID *int64 `json:"repo_id"` + Status string `json:"status"` + Message string `json:"message"` + StartedAt time.Time `json:"started_at"` + FinishedAt *time.Time `json:"finished_at"` +} + +type Setting struct { + Key string `json:"key"` + Value string `json:"value"` +}