package tenants import ( "time" "backend/modules/commands/tenant" "backend/modules/medias" "backend/modules/users" "backend/providers/app" "backend/providers/postgres" "backend/providers/storage" "git.ipao.vip/rogeecn/atom" "git.ipao.vip/rogeecn/atom/container" "github.com/pkg/errors" "github.com/spf13/cobra" ) func defaultProviders(providers ...container.ProviderContainer) container.Providers { return append(container.Providers{ app.DefaultProvider(), storage.DefaultProvider(), postgres.DefaultProvider(), }, providers...) } func Command() atom.Option { return atom.Command( atom.Name("tenants"), atom.Short("run tenants"), atom.Command( atom.Name("create"), atom.Providers(defaultProviders().With( medias.Provide, users.Provide, tenant.Provide, )), atom.Arguments(func(cmd *cobra.Command) { cmd.Flags().String("slug", "", "slug") }), atom.RunE(func(cmd *cobra.Command, args []string) error { return container.Container.Invoke(func(t *tenant.Create) error { slug := cmd.Flag("slug").Value.String() return t.RunE(args[0], slug) }) }), ), atom.Command( atom.Name("expire"), atom.Long("expire [slug] [2024-01-01]"), atom.Providers(defaultProviders().With( medias.Provide, users.Provide, tenant.Provide, )), atom.Arguments(func(cmd *cobra.Command) { }), atom.RunE(func(cmd *cobra.Command, args []string) error { return container.Container.Invoke(func(t *tenant.Expire) error { slug := args[0] expireStr := args[1] // format 2024-01-01 // parse expire string as time.Time expire, err := time.Parse("2006-01-02", expireStr) if err != nil { return errors.Wrapf(err, "parse expire time failed: %s", expireStr) } return t.RunE(slug, expire) }) }), ), ) }