package main import ( "context" "errors" "gitea.pena/PenaSide/common/validate" dalBS "gitea.pena/SQuiz/answerer/internal/dal" "gitea.pena/SQuiz/answerer/internal/initialize" "gitea.pena/SQuiz/common/dal" "github.com/caarlos0/env/v8" "log" ) func main() { cfg, err := loadConfig() if err != nil { log.Fatalf("error loading config: %v", err) } err = validateNotEmpty(cfg) if err != nil { log.Fatalf("error validating config: %v", err) } err = validate.ValidateEncryptKeys(&cfg.ExternalCfg.EncryptCommon) if err != nil { log.Fatalf("error validating EncryptKeys: %v", err) } err = validate.ValidateS3(validate.ValidateS3Deps{ S3Endpoint: cfg.S3Endpoint, S3SecretKey: cfg.S3SecretKey, S3AccessKey: cfg.S3AccessKey, IsProd: cfg.IsProd, BucketName: dalBS.Bucket, }) if err != nil { log.Fatalf("error validating S3: %v", err) } _, err = dal.New(context.TODO(), cfg.PostgresURL, nil) if err != nil { log.Fatalf("error connecting to postgres: %v", err) } err = validate.ValidateRedis(cfg.RedisHost, cfg.RedisPassword, int(cfg.RedisDB)) if err != nil { log.Fatalf("error validating Redis: %v", err) } return } func loadConfig() (initialize.Config, error) { var cfg initialize.Config if err := env.Parse(&cfg); err != nil { return cfg, err } return cfg, nil } func validateNotEmpty(cfg initialize.Config) error { if cfg.ClientHttpURL == "" { return errors.New("client http url cannot be empty") } if cfg.RedirectURL == "" { return errors.New("redirect url cannot be empty") } if cfg.TrashLogHost == "" { return errors.New("trash log host cannot be empty") } if cfg.ExternalCfg.EncryptCommon.PrivKey == "" { return errors.New("private key cannot be empty") } if cfg.ExternalCfg.EncryptCommon.PubKey == "" { return errors.New("public key cannot be empty") } return nil }