Peter Kurfer
9ea9a8f658
Some checks failed
Go build / build (push) Failing after 1m58s
- setup ent scheme - add command to create users - document API - add helpers to create migrations - add command to run migrations - add basic compose file
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package internal
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"os"
|
|
"os/signal"
|
|
"os/user"
|
|
|
|
"github.com/alecthomas/kong"
|
|
|
|
"code.icb4dc0.de/prskr/searcherside/core/ports"
|
|
clih "code.icb4dc0.de/prskr/searcherside/handlers/cli"
|
|
"code.icb4dc0.de/prskr/searcherside/infrastructure/config"
|
|
"code.icb4dc0.de/prskr/searcherside/internal/cli"
|
|
)
|
|
|
|
type App struct {
|
|
Logging config.Logging `embed:"" prefix:"logging."`
|
|
|
|
Serve clih.ServerHandler `cmd:"" name:"serve" help:"Start the server" aliases:"server"`
|
|
Migrate clih.MigrateHandler `cmd:"" name:"migrate" help:"Apply database migrations"`
|
|
User clih.UsersHandler `cmd:"" name:"user" help:"Manage users"`
|
|
Token clih.TokenHandler `cmd:"" name:"token" help:"Generate a token"`
|
|
}
|
|
|
|
func (a *App) Execute() error {
|
|
wd, err := os.Getwd()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
yamlLoader := config.Yaml{KeyFormatter: config.KebabToPascalCase}
|
|
user, err := user.Current()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
|
|
cliCtx := kong.Parse(
|
|
a,
|
|
kong.Name("searcherside"),
|
|
kong.Description("SearcherSide"),
|
|
kong.NamedMapper("password", cli.PasswordMapper{}),
|
|
kong.Bind(ports.CWD(wd)),
|
|
kong.BindTo(os.Stdout, (*ports.STDOUT)(nil)),
|
|
kong.BindTo(ctx, (*context.Context)(nil)),
|
|
kong.Configuration(yamlLoader.Loader, "./config.yaml", "/etc/searcherside/config.yaml", "~/.searcherside.yaml"),
|
|
kong.Vars{
|
|
"CWD": wd,
|
|
"WHOAMI": user.Username,
|
|
},
|
|
)
|
|
|
|
return cliCtx.Run()
|
|
}
|
|
|
|
func (a *App) AfterApply(kongCtx *kong.Context) error {
|
|
defaultLogger := slog.New(slog.NewJSONHandler(os.Stderr, a.Logging.Options()))
|
|
|
|
slog.SetDefault(defaultLogger)
|
|
|
|
kongCtx.Bind(defaultLogger)
|
|
|
|
return nil
|
|
}
|