Skip to content

Commit

Permalink
feat(server): add env var to specify account database (#640)
Browse files Browse the repository at this point in the history
  • Loading branch information
rot1024 authored Aug 24, 2023
1 parent 0ef6a88 commit 3b88ad8
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 36 deletions.
37 changes: 12 additions & 25 deletions server/e2e/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/reearth/reearth/server/internal/infrastructure/mongo"
"github.com/reearth/reearth/server/internal/usecase/gateway"
"github.com/reearth/reearth/server/internal/usecase/repo"
"github.com/reearth/reearthx/account/accountinfrastructure/accountmemory"
"github.com/reearth/reearthx/account/accountinfrastructure/accountmongo"
"github.com/reearth/reearthx/account/accountusecase/accountgateway"
"github.com/reearth/reearthx/account/accountusecase/accountrepo"
Expand All @@ -35,13 +34,13 @@ func StartServer(t *testing.T, cfg *config.Config, useMongo bool, seeder Seeder)
return e
}

func StartServerAndRepos(t *testing.T, cfg *config.Config, useMongo bool, seeder Seeder) (*httpexpect.Expect, *repo.Container) {
func initRepos(t *testing.T, useMongo bool, seeder Seeder) (repos *repo.Container) {
ctx := context.Background()

var repos *repo.Container
if useMongo {
db := mongotest.Connect(t)(t)
repos = lo.Must(mongo.New(ctx, db, false))
accountRepos := lo.Must(accountmongo.New(ctx, db.Client(), db.Name(), false, false))
repos = lo.Must(mongo.New(ctx, db, accountRepos, false))
} else {
repos = memory.New()
}
Expand All @@ -52,8 +51,14 @@ func StartServerAndRepos(t *testing.T, cfg *config.Config, useMongo bool, seeder
}
}

return repos
}

func StartServerAndRepos(t *testing.T, cfg *config.Config, useMongo bool, seeder Seeder) (*httpexpect.Expect, *repo.Container) {
repos := initRepos(t, useMongo, seeder)
return StartServerWithRepos(t, cfg, repos), repos
}

func StartServerWithRepos(t *testing.T, cfg *config.Config, repos *repo.Container) *httpexpect.Expect {
t.Helper()

Expand Down Expand Up @@ -110,27 +115,9 @@ func StartGQLServer(t *testing.T, cfg *config.Config, useMongo bool, seeder Seed
}

func StartGQLServerAndRepos(t *testing.T, cfg *config.Config, useMongo bool, seeder Seeder) (*httpexpect.Expect, *accountrepo.Container) {
ctx := context.Background()

var repos *repo.Container
var accountRepos *accountrepo.Container

if useMongo {
db := mongotest.Connect(t)(t)
repos = lo.Must(mongo.New(ctx, db, false))
accountRepos = lo.Must(accountmongo.New(ctx, db.Client(), db.Name(), false, true))
} else {
repos = memory.New()
accountRepos = accountmemory.New()
}

if seeder != nil {
if err := seeder(ctx, repos); err != nil {
t.Fatalf("failed to seed the db: %s", err)
}
}

return StartGQLServerWithRepos(t, cfg, repos, accountRepos), accountRepos
repos := initRepos(t, useMongo, seeder)
acRepos := repos.AccountRepos()
return StartGQLServerWithRepos(t, cfg, repos, acRepos), acRepos
}

func StartGQLServerWithRepos(t *testing.T, cfg *config.Config, repos *repo.Container, accountrepos *accountrepo.Container) *httpexpect.Expect {
Expand Down
1 change: 1 addition & 0 deletions server/internal/app/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type Config struct {
Host_Web string
Dev bool
DB string `default:"mongodb://localhost"`
DB_Account string
GraphQL GraphQLConfig
Published PublishedConfig
GCPProject string `envconfig:"GOOGLE_CLOUD_PROJECT"`
Expand Down
14 changes: 11 additions & 3 deletions server/internal/app/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import (
"go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo"
)

const databaseName = "reearth"

func initReposAndGateways(ctx context.Context, conf *config.Config, debug bool) (*repo.Container, *gateway.Container, *accountrepo.Container, *accountgateway.Container) {
gateways := &gateway.Container{}
acGateways := &accountgateway.Container{}
Expand All @@ -40,14 +42,20 @@ func initReposAndGateways(ctx context.Context, conf *config.Config, debug bool)
log.Fatalf("mongo error: %+v\n", err)
}

// repos
accountDatabase := conf.DB_Account
if accountDatabase == "" {
accountDatabase = databaseName
}

txAvailable := mongox.IsTransactionAvailable(conf.DB)

repos, err := mongorepo.NewWithExtensions(ctx, client.Database("reearth"), txAvailable, conf.Ext_Plugin)
accountRepos, err := accountmongo.New(ctx, client, databaseName, txAvailable, true)
if err != nil {
log.Fatalf("Failed to init mongo: %+v\n", err)
}

acRepos, err := accountmongo.New(ctx, client, "reearth", txAvailable, true)
repos, err := mongorepo.NewWithExtensions(ctx, client.Database(accountDatabase), accountRepos, txAvailable, conf.Ext_Plugin)
if err != nil {
log.Fatalf("Failed to init mongo: %+v\n", err)
}
Expand Down Expand Up @@ -77,7 +85,7 @@ func initReposAndGateways(ctx context.Context, conf *config.Config, debug bool)
log.Fatalf("repo initialization error: %v", err)
}

return repos, gateways, acRepos, acGateways
return repos, gateways, accountRepos, acGateways
}

func initFile(ctx context.Context, conf *config.Config) (fileRepo gateway.File) {
Expand Down
11 changes: 6 additions & 5 deletions server/internal/infrastructure/mongo/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/reearth/reearth/server/pkg/scene"
"github.com/reearth/reearthx/account/accountdomain/user"
"github.com/reearth/reearthx/account/accountinfrastructure/accountmongo"
"github.com/reearth/reearthx/account/accountusecase/accountrepo"
"github.com/reearth/reearthx/authserver"
"github.com/reearth/reearthx/log"
"github.com/reearth/reearthx/mongox"
Expand All @@ -23,7 +24,7 @@ import (
"go.mongodb.org/mongo-driver/mongo"
)

func New(ctx context.Context, db *mongo.Database, useTransaction bool) (*repo.Container, error) {
func New(ctx context.Context, db *mongo.Database, account *accountrepo.Container, useTransaction bool) (*repo.Container, error) {
lock, err := NewLock(db.Collection("locks"))
if err != nil {
return nil, err
Expand All @@ -47,13 +48,13 @@ func New(ctx context.Context, db *mongo.Database, useTransaction bool) (*repo.Co
Property: NewProperty(client),
Scene: NewScene(client),
Tag: NewTag(client),
Workspace: accountmongo.NewWorkspaceCompat(client),
User: accountmongo.NewUser(client),
SceneLock: NewSceneLock(client),
Policy: NewPolicy(client),
Storytelling: NewStorytelling(client),
Lock: lock,
Transaction: client.Transaction(),
Workspace: account.Workspace,
User: account.User,
}

// init
Expand All @@ -69,8 +70,8 @@ func New(ctx context.Context, db *mongo.Database, useTransaction bool) (*repo.Co
return c, nil
}

func NewWithExtensions(ctx context.Context, db *mongo.Database, useTransaction bool, src []string) (*repo.Container, error) {
c, err := New(ctx, db, useTransaction)
func NewWithExtensions(ctx context.Context, db *mongo.Database, account *accountrepo.Container, useTransaction bool, src []string) (*repo.Container, error) {
c, err := New(ctx, db, account, useTransaction)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions server/internal/usecase/interactor/dataset.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ type Dataset struct {
common
commonSceneLock
sceneRepo repo.Scene
workspaceRepo accountrepo.Workspace
datasetRepo repo.Dataset
datasetSchemaRepo repo.DatasetSchema
propertyRepo repo.Property
layerRepo repo.Layer
pluginRepo repo.Plugin
policyRepo repo.Policy
workspaceRepo accountrepo.Workspace
policyRepo accountrepo.Policy
datasource gateway.DataSource
file gateway.File
google gateway.Google
Expand Down
2 changes: 1 addition & 1 deletion server/internal/usecase/interactor/layer.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ type Layer struct {
datasetSchemaRepo repo.DatasetSchema
sceneRepo repo.Scene
sceneLockRepo repo.SceneLock
policyRepo repo.Policy
policyRepo accountrepo.Policy
workspaceRepo accountrepo.Workspace
transaction usecasex.Transaction
}
Expand Down
9 changes: 9 additions & 0 deletions server/internal/usecase/repo/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,15 @@ type Container struct {
Extensions []plugin.ID
}

func (c *Container) AccountRepos() *accountrepo.Container {
return &accountrepo.Container{
Workspace: c.Workspace,
User: c.User,
// TODO: Policy: c.Policy,
Transaction: c.Transaction,
}
}

func (c *Container) Filtered(workspace WorkspaceFilter, scene SceneFilter) *Container {
if c == nil {
return c
Expand Down

0 comments on commit 3b88ad8

Please sign in to comment.