Compare commits

...

3 Commits

8 changed files with 49 additions and 45 deletions

View File

@ -1358,7 +1358,7 @@ roles:
- updated_at: "now" - updated_at: "now"
delete: delete:
deny: true block: true
- name: admin - name: admin
match: id = 1000 match: id = 1000

View File

@ -110,6 +110,13 @@ e.g. db:migrate -+1
Run: cmdDBSetup, Run: cmdDBSetup,
}) })
rootCmd.AddCommand(&cobra.Command{
Use: "db:reset",
Short: "Reset database",
Long: "This command will drop, create, migrate and seed the database (won't run in production)",
Run: cmdDBReset,
})
rootCmd.AddCommand(&cobra.Command{ rootCmd.AddCommand(&cobra.Command{
Use: "new APP-NAME", Use: "new APP-NAME",
Short: "Create a new application", Short: "Create a new application",
@ -276,3 +283,13 @@ func initCompiler() {
logger.Fatal().Err(err).Msg("failed to initialized resolvers") logger.Fatal().Err(err).Msg("failed to initialized resolvers")
} }
} }
func initConfOnce() {
var err error
if conf == nil {
if conf, err = initConf(); err != nil {
logger.Fatal().Err(err).Msg("failed to read config")
}
}
}

View File

@ -36,6 +36,7 @@ var newMigrationText = `-- Write your migrate up statements here
` `
func cmdDBSetup(cmd *cobra.Command, args []string) { func cmdDBSetup(cmd *cobra.Command, args []string) {
initConfOnce()
cmdDBCreate(cmd, []string{}) cmdDBCreate(cmd, []string{})
cmdDBMigrate(cmd, []string{"up"}) cmdDBMigrate(cmd, []string{"up"})
@ -54,13 +55,19 @@ func cmdDBSetup(cmd *cobra.Command, args []string) {
logger.Warn().Msgf("failed to read seed file '%s'", sfile) logger.Warn().Msgf("failed to read seed file '%s'", sfile)
} }
func cmdDBCreate(cmd *cobra.Command, args []string) { func cmdDBReset(cmd *cobra.Command, args []string) {
var err error initConfOnce()
if conf, err = initConf(); err != nil { if conf.Production {
logger.Fatal().Err(err).Msg("failed to read config") logger.Fatal().Msg("db:reset does not work in production")
return
} }
cmdDBDrop(cmd, []string{})
cmdDBSetup(cmd, []string{})
}
func cmdDBCreate(cmd *cobra.Command, args []string) {
initConfOnce()
ctx := context.Background() ctx := context.Background()
conn, err := initDB(conf, false) conn, err := initDB(conf, false)
@ -80,12 +87,7 @@ func cmdDBCreate(cmd *cobra.Command, args []string) {
} }
func cmdDBDrop(cmd *cobra.Command, args []string) { func cmdDBDrop(cmd *cobra.Command, args []string) {
var err error initConfOnce()
if conf, err = initConf(); err != nil {
logger.Fatal().Err(err).Msg("failed to read config")
}
ctx := context.Background() ctx := context.Background()
conn, err := initDB(conf, false) conn, err := initDB(conf, false)
@ -110,12 +112,7 @@ func cmdDBNew(cmd *cobra.Command, args []string) {
os.Exit(1) os.Exit(1)
} }
var err error initConfOnce()
if conf, err = initConf(); err != nil {
logger.Fatal().Err(err).Msg("failed to read config")
}
name := args[0] name := args[0]
m, err := migrate.FindMigrations(conf.MigrationsPath) m, err := migrate.FindMigrations(conf.MigrationsPath)
@ -144,19 +141,14 @@ func cmdDBNew(cmd *cobra.Command, args []string) {
} }
func cmdDBMigrate(cmd *cobra.Command, args []string) { func cmdDBMigrate(cmd *cobra.Command, args []string) {
var err error
if len(args) == 0 { if len(args) == 0 {
cmd.Help() cmd.Help()
os.Exit(1) os.Exit(1)
} }
initConfOnce()
dest := args[0] dest := args[0]
if conf, err = initConf(); err != nil {
logger.Fatal().Err(err).Msg("failed to read config")
}
conn, err := initDB(conf, true) conn, err := initDB(conf, true)
if err != nil { if err != nil {
logger.Fatal().Err(err).Msg("failed to connect to database") logger.Fatal().Err(err).Msg("failed to connect to database")
@ -251,11 +243,7 @@ func cmdDBMigrate(cmd *cobra.Command, args []string) {
} }
func cmdDBStatus(cmd *cobra.Command, args []string) { func cmdDBStatus(cmd *cobra.Command, args []string) {
var err error initConfOnce()
if conf, err = initConf(); err != nil {
logger.Fatal().Err(err).Msg("failed to read config")
}
conn, err := initDB(conf, true) conn, err := initDB(conf, true)
if err != nil { if err != nil {

View File

@ -62,7 +62,7 @@ func cmdDBSeed(cmd *cobra.Command, args []string) {
func graphQLFunc(query string, data interface{}, opt map[string]string) map[string]interface{} { func graphQLFunc(query string, data interface{}, opt map[string]string) map[string]interface{} {
b, err := json.Marshal(data) b, err := json.Marshal(data)
if err != nil { if err != nil {
logger.Fatal().Err(err).Msg("failed to json serialize") logger.Fatal().Err(err).Send()
} }
ctx := context.Background() ctx := context.Background()
@ -94,7 +94,7 @@ func graphQLFunc(query string, data interface{}, opt map[string]string) map[stri
_, err = t.ExecuteFunc(buf, argMap(c)) _, err = t.ExecuteFunc(buf, argMap(c))
if err == errNoUserID { if err == errNoUserID {
logger.Fatal().Msg("query requires a user_id") logger.Fatal().Err(err).Msg("query requires a user_id")
} }
if err != nil { if err != nil {
@ -109,9 +109,11 @@ func graphQLFunc(query string, data interface{}, opt map[string]string) map[stri
} }
defer tx.Rollback(c) defer tx.Rollback(c)
// if err := c.setLocalUserID(tx); err != nil { if conf.DB.SetUserID {
// return nil, 0, err if err := c.setLocalUserID(tx); err != nil {
// } logger.Fatal().Err(err).Send()
}
}
var root []byte var root []byte
@ -125,14 +127,14 @@ func graphQLFunc(query string, data interface{}, opt map[string]string) map[stri
res, err := c.execRemoteJoin(st.qc, st.skipped, root) res, err := c.execRemoteJoin(st.qc, st.skipped, root)
if err != nil { if err != nil {
logger.Fatal().Err(err).Msg("remote join failed") logger.Fatal().Err(err).Send()
} }
val := make(map[string]interface{}) val := make(map[string]interface{})
err = json.Unmarshal(res, &val) err = json.Unmarshal(res, &val)
if err != nil { if err != nil {
logger.Fatal().Err(err).Msg("failed to deserialize json") logger.Fatal().Err(err).Send()
} }
return val return val

View File

@ -64,10 +64,9 @@ type config struct {
User string User string
Password string Password string
Schema string Schema string
PoolSize int32 `mapstructure:"pool_size"` PoolSize int32 `mapstructure:"pool_size"`
MaxRetries int `mapstructure:"max_retries"` MaxRetries int `mapstructure:"max_retries"`
LogLevel string `mapstructure:"log_level"` SetUserID bool `mapstructure:"set_user_id"`
SetUserID bool `mapstructure:"set_user_id"`
Vars map[string]string `mapstructure:"variables"` Vars map[string]string `mapstructure:"variables"`

View File

@ -28,9 +28,7 @@ func (pl *Logger) Log(ctx context.Context, level pgx.LogLevel, msg string, data
zlevel = zerolog.ErrorLevel zlevel = zerolog.ErrorLevel
case pgx.LogLevelWarn: case pgx.LogLevelWarn:
zlevel = zerolog.WarnLevel zlevel = zerolog.WarnLevel
case pgx.LogLevelInfo: case pgx.LogLevelDebug, pgx.LogLevelInfo:
zlevel = zerolog.InfoLevel
case pgx.LogLevelDebug:
zlevel = zerolog.DebugLevel zlevel = zerolog.DebugLevel
default: default:
zlevel = zerolog.DebugLevel zlevel = zerolog.DebugLevel

View File

@ -3,7 +3,7 @@ host_port: 0.0.0.0:8080
web_ui: true web_ui: true
# debug, info, warn, error, fatal, panic # debug, info, warn, error, fatal, panic
log_level: "debug" log_level: "info"
# When production mode is 'true' only queries # When production mode is 'true' only queries
# from the allow list are permitted. # from the allow list are permitted.
@ -184,7 +184,7 @@ roles:
- updated_at: "now" - updated_at: "now"
delete: delete:
deny: true block: true
- name: admin - name: admin
match: id = 1000 match: id = 1000

View File

@ -7,7 +7,7 @@ host_port: 0.0.0.0:8080
web_ui: false web_ui: false
# debug, info, warn, error, fatal, panic, disable # debug, info, warn, error, fatal, panic, disable
log_level: "info" log_level: "warn"
# When production mode is 'true' only queries # When production mode is 'true' only queries
# from the allow list are permitted. # from the allow list are permitted.
# When it's 'false' all queries are saved to the # When it's 'false' all queries are saved to the