// 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 }