Add S3 configuration and presigned URL logic for file upload and download
This commit is contained in:
@@ -1,15 +1,80 @@
|
||||
package svc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
|
||||
"git.cialloo.com/CiallooWeb/Blog/app/internal/config"
|
||||
"github.com/aws/aws-sdk-go-v2/aws"
|
||||
awsconfig "github.com/aws/aws-sdk-go-v2/config"
|
||||
"github.com/aws/aws-sdk-go-v2/credentials"
|
||||
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
type ServiceContext struct {
|
||||
Config config.Config
|
||||
Config config.Config
|
||||
S3Client *s3.Client
|
||||
DB *sql.DB
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
return &ServiceContext{
|
||||
Config: c,
|
||||
Config: c,
|
||||
S3Client: initS3Client(c.S3),
|
||||
DB: initDatabase(c.Database),
|
||||
}
|
||||
}
|
||||
|
||||
func initDatabase(dbConfig config.DatabaseConfig) *sql.DB {
|
||||
db, err := sql.Open("postgres", dbConfig.DSN)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Verify connection
|
||||
if err := db.Ping(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return db
|
||||
}
|
||||
|
||||
func initS3Client(s3Config config.S3Config) *s3.Client {
|
||||
var cfg aws.Config
|
||||
var err error
|
||||
|
||||
if s3Config.Endpoint != "" {
|
||||
// Custom endpoint (e.g., MinIO)
|
||||
cfg, err = awsconfig.LoadDefaultConfig(context.Background(),
|
||||
awsconfig.WithRegion(s3Config.Region),
|
||||
awsconfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
|
||||
s3Config.AccessKeyID,
|
||||
s3Config.SecretAccessKey,
|
||||
"",
|
||||
)),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return s3.NewFromConfig(cfg, func(o *s3.Options) {
|
||||
o.BaseEndpoint = aws.String(s3Config.Endpoint)
|
||||
o.UsePathStyle = true
|
||||
})
|
||||
}
|
||||
|
||||
// Standard AWS S3
|
||||
cfg, err = awsconfig.LoadDefaultConfig(context.Background(),
|
||||
awsconfig.WithRegion(s3Config.Region),
|
||||
awsconfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(
|
||||
s3Config.AccessKeyID,
|
||||
s3Config.SecretAccessKey,
|
||||
"",
|
||||
)),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return s3.NewFromConfig(cfg)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user