86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
// Command member-seed creates a dev tenant and member for local API testing.
|
|
//
|
|
// make deps-up && make mongo-index && make member-seed
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"gateway/internal/config"
|
|
redislib "gateway/internal/library/redis"
|
|
domusecase "gateway/internal/model/member/domain/usecase"
|
|
memberusecase "gateway/internal/model/member/usecase"
|
|
|
|
"github.com/zeromicro/go-zero/core/conf"
|
|
)
|
|
|
|
var (
|
|
configFile = flag.String("f", "etc/gateway.dev.yaml", "config file")
|
|
tenantID = flag.String("tenant", "dev-tenant", "tenant_id")
|
|
slug = flag.String("slug", "dev", "tenant slug")
|
|
uidPrefix = flag.String("prefix", "DEV", "uid prefix")
|
|
email = flag.String("email", "dev@example.com", "member email")
|
|
)
|
|
|
|
func main() {
|
|
if err := run(); err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func run() error {
|
|
flag.Parse()
|
|
var c config.Config
|
|
conf.MustLoad(*configFile, &c)
|
|
if c.Mongo.Host == "" || c.Redis.Host == "" {
|
|
return fmt.Errorf("member-seed: Mongo and Redis are required")
|
|
}
|
|
|
|
ctx := context.Background()
|
|
rds, err := redislib.NewClient(c.Redis)
|
|
if err != nil {
|
|
return fmt.Errorf("member-seed: redis: %w", err)
|
|
}
|
|
mod, err := memberusecase.NewModuleFromParam(memberusecase.ModuleParam{
|
|
Redis: rds,
|
|
MongoConf: &c.Mongo,
|
|
Config: c.Member,
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("member-seed: module: %w", err)
|
|
}
|
|
if mod.Tenant == nil || mod.Lifecycle == nil {
|
|
return fmt.Errorf("member-seed: tenant/lifecycle not wired (need Mongo)")
|
|
}
|
|
|
|
if _, err := mod.Tenant.Create(ctx, &domusecase.CreateTenantRequest{
|
|
TenantID: *tenantID,
|
|
Slug: *slug,
|
|
Name: "Dev Tenant",
|
|
UIDPrefix: *uidPrefix,
|
|
}); err != nil {
|
|
fmt.Printf("tenant create skipped (may exist): %v\n", err)
|
|
}
|
|
|
|
m, err := mod.Lifecycle.CreateUnverified(ctx, &domusecase.CreatePlatformMemberRequest{
|
|
TenantID: *tenantID,
|
|
Email: *email,
|
|
DisplayName: "Dev User",
|
|
Language: "zh-tw",
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("member-seed: create member: %w", err)
|
|
}
|
|
if err := mod.Lifecycle.Activate(ctx, *tenantID, m.UID); err != nil {
|
|
return fmt.Errorf("member-seed: activate: %w", err)
|
|
}
|
|
|
|
fmt.Printf("tenant_id=%s uid=%s\n", *tenantID, m.UID)
|
|
fmt.Printf("Use headers: X-Tenant-ID=%s X-UID=%s\n", *tenantID, m.UID)
|
|
return nil
|
|
}
|