package app import ( "context" "log" "github.com/go-playground/validator/v10" "github.com/jackc/pgx/v5/pgxpool" "github.com/minio/minio-go/v7" ) type App struct { Ctx context.Context Cfg *Config Db *pgxpool.Pool S3 *minio.Client Validator *validator.Validate } func NewApp(ctx context.Context) *App { cfg, err := loadConfig() if err != nil { log.Fatal(err) } db, err := newDB(ctx, cfg) if err != nil { log.Fatal(err) } s3, err := newS3Client(ctx, cfg) if err != nil { log.Fatal(err) } return &App{ Ctx: ctx, Cfg: cfg, Db: db.pool, S3: s3, Validator: validator.New(validator.WithRequiredStructEnabled()), } }