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

71 lines
1.5 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 {
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
}