billing docs service
This commit is contained in:
67
api/billing/documents/internal/docstore/store.go
Normal file
67
api/billing/documents/internal/docstore/store.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package docstore
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/tech/sendico/pkg/merrors"
|
||||
"github.com/tech/sendico/pkg/mlogger"
|
||||
)
|
||||
|
||||
// Driver identifies the document storage backend.
|
||||
type Driver string
|
||||
|
||||
const (
|
||||
DriverLocal Driver = "local_fs"
|
||||
DriverS3 Driver = "s3"
|
||||
DriverMinio Driver = "minio"
|
||||
)
|
||||
|
||||
// Config configures the document storage backend.
|
||||
type Config struct {
|
||||
Driver Driver `yaml:"driver"`
|
||||
Local *LocalConfig `yaml:"local"`
|
||||
S3 *S3Config `yaml:"s3"`
|
||||
}
|
||||
|
||||
// LocalConfig configures local filesystem storage.
|
||||
type LocalConfig struct {
|
||||
RootPath string `yaml:"root_path"`
|
||||
}
|
||||
|
||||
// S3Config configures S3/Minio storage.
|
||||
type S3Config struct {
|
||||
Endpoint string `yaml:"endpoint"`
|
||||
Region string `yaml:"region"`
|
||||
Bucket string `yaml:"bucket"`
|
||||
AccessKeyEnv string `yaml:"access_key_env"`
|
||||
SecretKeyEnv string `yaml:"secret_access_key_env"`
|
||||
AccessKey string `yaml:"access_key"`
|
||||
SecretAccessKey string `yaml:"secret_access_key"`
|
||||
UseSSL bool `yaml:"use_ssl"`
|
||||
ForcePathStyle bool `yaml:"force_path_style"`
|
||||
}
|
||||
|
||||
// Store defines storage operations for generated documents.
|
||||
type Store interface {
|
||||
Save(ctx context.Context, key string, data []byte) error
|
||||
Load(ctx context.Context, key string) ([]byte, error)
|
||||
}
|
||||
|
||||
// New creates a document store based on config.
|
||||
func New(logger mlogger.Logger, cfg Config) (Store, error) {
|
||||
switch strings.ToLower(string(cfg.Driver)) {
|
||||
case string(DriverLocal):
|
||||
if cfg.Local == nil {
|
||||
return nil, merrors.InvalidArgument("docstore: local config missing")
|
||||
}
|
||||
return NewLocalStore(logger, *cfg.Local)
|
||||
case string(DriverS3), string(DriverMinio):
|
||||
if cfg.S3 == nil {
|
||||
return nil, merrors.InvalidArgument("docstore: s3 config missing")
|
||||
}
|
||||
return NewS3Store(logger, *cfg.S3)
|
||||
default:
|
||||
return nil, merrors.InvalidArgument("docstore: unsupported driver")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user