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 { cfg, err := awsconfig.LoadDefaultConfig(context.Background(), awsconfig.WithRegion(s3Config.Region), awsconfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider( s3Config.AccessKeyID, s3Config.SecretAccessKey, "", )), ) if err != nil { panic(err) } client := s3.NewFromConfig(cfg, func(o *s3.Options) { o.BaseEndpoint = aws.String(s3Config.Endpoint) o.UsePathStyle = true }) return client }