package main import ( "bytes" "context" "fmt" "gitea.pena/PenaSide/common/validate" "gitea.pena/PenaSide/heruvym/internal/initialize" minioDal "gitea.pena/PenaSide/heruvym/internal/repository/minio" "github.com/caarlos0/env/v8" "github.com/minio/minio-go/v7" "github.com/pioz/faker" "log" ) func main() { cfg, err := loadConfig() if err != nil { log.Fatalf("error loading config: %v", err) } if cfg.ClientHttpUrl == "" { log.Fatalf("error client http url is empty") } if cfg.AdminHttpUrl == "" { log.Fatalf("error admin http url is empty") } err = validate.ValidateMongo(cfg.ExternalCfg.Database) if err != nil { log.Fatalf("error validating mongo: %v", err) } err = validate.ValidateTgToken(cfg.TelegramToken) if err != nil { log.Fatalf("error validating telegram token: %v", err) } if cfg.TelegramChannelID == 0 { log.Fatalf("telegram channel id must be set") } err = validateRedis(cfg) if err != nil { log.Fatalf("error validating redis: %v", err) } err = validateS3(cfg) if err != nil { log.Fatalf("error validating s3: %v", err) } } func loadConfig() (initialize.Config, error) { var config initialize.Config if err := env.Parse(&config); err != nil { return config, err } return config, nil } func validateRedis(cfg initialize.Config) error { if cfg.RedisHost == "" { return fmt.Errorf("redis host is empty") } _, err := initialize.Redis(context.TODO(), cfg) if err != nil { return err } return nil } func validateS3(cfg initialize.Config) error { if cfg.S3Endpoint == "" { return fmt.Errorf("s3 endpoint is empty") } if cfg.S3AccessKey == "" { return fmt.Errorf("s3 access key is empty") } if cfg.S3SecretKey == "" { return fmt.Errorf("s3 secret key is empty") } ctx := context.TODO() client, err := initialize.Minio(cfg) if err != nil { return fmt.Errorf("error connect s3 in validate: %w", err) } objectName := faker.String() content := []byte(faker.String()) contentType := "text/plain" exist, err := client.BucketExists(ctx, minioDal.Bucket) if err != nil { return fmt.Errorf("error find s3 bucket in validate: %w", err) } // не создаем бакет так как бакет могут не дать создать if !exist { log.Println("bucket does not exist") return nil } _, err = client.PutObject(ctx, minioDal.Bucket, objectName, bytes.NewReader(content), int64(len(content)), minio.PutObjectOptions{ContentType: contentType}) if err != nil { return fmt.Errorf("error create test object: %w", err) } err = client.RemoveObject(ctx, minioDal.Bucket, objectName, minio.RemoveObjectOptions{}) if err != nil { return fmt.Errorf("error remove test object: %w", err) } return nil }