Files
Blog/app/internal/svc/servicecontext.go
2025-10-25 08:18:18 +08:00

89 lines
1.9 KiB
Go

package svc
import (
"context"
"database/sql"
"git.cialloo.com/CiallooWeb/Blog/app/internal/config"
"git.cialloo.com/CiallooWeb/Blog/app/internal/middleware"
"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"
"github.com/zeromicro/go-zero/rest"
)
type ServiceContext struct {
Config config.Config
SuperAdminAuthMiddleware rest.Middleware
S3Client *s3.Client
DB *sql.DB
}
func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
SuperAdminAuthMiddleware: middleware.NewSuperAdminAuthMiddleware(c).Handle,
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)
}