101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"embed"
|
|
"flag"
|
|
"fmt"
|
|
|
|
"git.vdhsn.com/barretthousen/barretthousen/src/auth/internal"
|
|
"git.vdhsn.com/barretthousen/barretthousen/src/auth/internal/data"
|
|
"git.vdhsn.com/barretthousen/barretthousen/src/auth/internal/data/postgres"
|
|
"git.vdhsn.com/barretthousen/barretthousen/src/auth/internal/domain"
|
|
"git.vdhsn.com/barretthousen/barretthousen/src/lib/kernel"
|
|
"github.com/jackc/pgx/v4/pgxpool"
|
|
"go.uber.org/dig"
|
|
)
|
|
|
|
type (
|
|
authApp struct {
|
|
LogLevel kernel.LogLevel `yaml:"log_level" yaml-default:"0"`
|
|
Port int `yaml:"port" `
|
|
DB_Service kernel.PostgresConnection `yaml:"db_service"`
|
|
DB_Migrate kernel.PostgresConnection `yaml:"db_migrate"`
|
|
}
|
|
)
|
|
|
|
var (
|
|
migrate = flag.Bool("migrate", false, "migrates postgres db")
|
|
client = flag.String("client", "", "Runs this service in client mode, to invoke sync job. Takes GRPC endpoint")
|
|
target = flag.String("target", "", "To be used with client mode. The target to sync")
|
|
|
|
//go:embed internal/data/postgres/migrations/*.sql
|
|
dbMigrateScript embed.FS
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
kernel.Run(context.Background(), &authApp{
|
|
LogLevel: kernel.LevelTrace,
|
|
Port: 5001,
|
|
})
|
|
}
|
|
|
|
func (app *authApp) Start(ctx context.Context) error {
|
|
if *migrate {
|
|
if err := kernel.MigrateDB(ctx, app.DB_Migrate, dbMigrateScript, "auth"); err != nil {
|
|
return fmt.Errorf("could not execute db migration: %w", err)
|
|
}
|
|
}
|
|
|
|
ioc := dig.New()
|
|
var err error
|
|
if err = ioc.Provide(func() kernel.PostgresConnection {
|
|
return app.DB_Service
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = ioc.Provide(func(pgCfg kernel.PostgresConnection) (*pgxpool.Pool, error) {
|
|
return kernel.NewDBConnection(ctx, pgCfg)
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = ioc.Provide(func(pgConn *pgxpool.Pool) *postgres.Queries {
|
|
return postgres.New(pgConn)
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = ioc.Provide(func(queries *postgres.Queries) domain.Storage {
|
|
return &data.PGRunnerStorage{Queries: queries}
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = ioc.Provide(func(rs domain.Storage) *domain.Domain {
|
|
return &domain.Domain{
|
|
Storage: rs,
|
|
}
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
return ioc.Invoke(func(d *domain.Domain) error {
|
|
authService := internal.NewAuthServer(d)
|
|
|
|
if _, err := kernel.StartGRPCServer(ctx, app.Port, authService); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (app *authApp) OnStop(ctx context.Context) {
|
|
}
|
|
|
|
func (app *authApp) GetLogLevel() kernel.LogLevel { return app.LogLevel }
|