85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
package common
|
|
|
|
import (
|
|
"context"
|
|
"openreplay/backend/internal/config/common"
|
|
objConfig "openreplay/backend/internal/config/objectstorage"
|
|
"openreplay/backend/pkg/common/api/auth"
|
|
"openreplay/backend/pkg/db/postgres/pool"
|
|
"openreplay/backend/pkg/flakeid"
|
|
"openreplay/backend/pkg/logger"
|
|
"openreplay/backend/pkg/objectstorage"
|
|
"openreplay/backend/pkg/objectstorage/store"
|
|
)
|
|
|
|
// ServicesBuilder struct to hold service components
|
|
type ServicesBuilder struct {
|
|
Config *common.Config
|
|
Flaker *flakeid.Flaker
|
|
ObjStorage objectstorage.ObjectStorage
|
|
Auth auth.Auth
|
|
Log logger.Logger
|
|
Pgconn pool.Pool
|
|
workerID int
|
|
jwtSecret string
|
|
extraSecret string
|
|
}
|
|
|
|
// NewServiceBuilder initializes the ServicesBuilder with essential components (logger)
|
|
func NewServiceBuilder(log logger.Logger) *ServicesBuilder {
|
|
return &ServicesBuilder{
|
|
Log: log,
|
|
}
|
|
}
|
|
|
|
// WithFlaker sets the Flaker component
|
|
func (b *ServicesBuilder) WithFlaker(workerID uint16) *ServicesBuilder {
|
|
b.Flaker = flakeid.NewFlaker(workerID)
|
|
return b
|
|
}
|
|
|
|
// WithObjectStorage sets the Object Storage component
|
|
func (b *ServicesBuilder) WithObjectStorage(config *objConfig.ObjectsConfig) *ServicesBuilder {
|
|
objStore, err := store.NewStore(config)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
b.ObjStorage = objStore
|
|
return b
|
|
}
|
|
|
|
// WithAuth sets the Auth component
|
|
func (b *ServicesBuilder) WithAuth(jwtSecret string, extraSecret ...string) *ServicesBuilder {
|
|
b.jwtSecret = jwtSecret
|
|
if len(extraSecret) > 0 {
|
|
b.extraSecret = extraSecret[0]
|
|
}
|
|
b.Auth = auth.NewAuth(b.Log, "jwt_iat", b.jwtSecret, b.extraSecret, b.Pgconn)
|
|
return b
|
|
}
|
|
|
|
// WithDatabase sets the database connection pool
|
|
func (b *ServicesBuilder) WithDatabase(url string) *ServicesBuilder {
|
|
pgConn, err := pool.New(url)
|
|
if err != nil {
|
|
b.Log.Fatal(context.Background(), "can't init postgres connection: %s", err)
|
|
}
|
|
|
|
b.Pgconn = pgConn
|
|
return b
|
|
}
|
|
|
|
// WithWorkerID sets the WorkerID for Flaker
|
|
func (b *ServicesBuilder) WithWorkerID(workerID int) *ServicesBuilder {
|
|
b.workerID = workerID
|
|
return b
|
|
}
|
|
|
|
// WithJWTSecret sets the JWT and optional extra secret for Auth
|
|
func (b *ServicesBuilder) WithJWTSecret(jwtSecret string, extraSecret ...string) *ServicesBuilder {
|
|
b.jwtSecret = jwtSecret
|
|
if len(extraSecret) > 0 {
|
|
b.extraSecret = extraSecret[0]
|
|
}
|
|
return b
|
|
}
|