package storage import ( "context" "fmt" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) type Storage struct { Client *minio.Client Bucket string } func New(ctx context.Context, endpoint, accessKey, secretKey, bucket string, useSSL bool) (*Storage, error) { client, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKey, secretKey, ""), Secure: useSSL, }) if err != nil { return nil, fmt.Errorf("minio: %w", err) } exists, err := client.BucketExists(ctx, bucket) if err != nil { return nil, fmt.Errorf("bucket exists check: %w", err) } if !exists { if err := client.MakeBucket(ctx, bucket, minio.MakeBucketOptions{}); err != nil { return nil, fmt.Errorf("make bucket: %w", err) } } return &Storage{Client: client, Bucket: bucket}, nil }