heruvym/internal/repository/minio/minio.go
2024-09-25 17:22:57 +03:00

102 lines
2.2 KiB
Go

package minio
import (
"context"
"fmt"
"io"
"net/http"
"github.com/minio/minio-go/v7"
"github.com/themakers/hlog"
)
type Deps struct {
HLogger hlog.Logger
Store *minio.Client
}
type BlobStore struct {
log hlog.Logger
store *minio.Client
}
const bucket = "pair"
func New(ctx context.Context, deps Deps) (*BlobStore, error) {
bStore := &BlobStore{
log: deps.HLogger.Module("minio"),
store: deps.Store,
}
bucketExists, err := bStore.store.BucketExists(ctx, bucket)
if err != nil {
return nil, err
}
if !bucketExists {
if err := bStore.store.MakeBucket(ctx, bucket, minio.MakeBucketOptions{}); err != nil {
return nil, err
}
}
return bStore, nil
}
func (bs *BlobStore) PutFile(
ctx context.Context,
filename string,
reader io.Reader,
size int64) error {
info, err := bs.store.PutObject(ctx, bucket, filename, reader, size, minio.PutObjectOptions{
//UserMetadata: nil,
//UserTags: nil,
//Progress: nil,
//ContentType: "",
//ContentEncoding: "",
//ContentDisposition: "",
//ContentLanguage: "",
//CacheControl: "",
//Mode: "",
//RetainUntilDate: time.Time{},
//ServerSideEncryption: nil,
//NumThreads: 0,
//StorageClass: "",
//WebsiteRedirectLocation: "",
//PartSize: 0,
//LegalHold: "",
//SendContentMd5: false,
//DisableMultipart: false,
//Internal: minio.AdvancedPutOptions{},
})
if err != nil {
fmt.Println(err)
return err
}
fmt.Println("info", info)
return nil
}
func (bs *BlobStore) DeleteFile(ctx context.Context, id string) error {
if err := bs.store.RemoveObject(ctx, bucket, id, minio.RemoveObjectOptions{
//GovernanceBypass: false,
//VersionID: "",
//Internal: AdvancedRemoveOptions
}); err != nil {
return err
}
return nil
}
func (bs *BlobStore) FileExists(ctx context.Context, filename string) (bool, error) {
_, err := bs.store.StatObject(ctx, bucket, filename, minio.StatObjectOptions{})
if err != nil {
if minio.ToErrorResponse(err).StatusCode == http.StatusNotFound {
return false, nil
}
return false, err
}
return true, nil
}