This commit is contained in:
2024-07-19 17:04:42 +02:00
commit 5e0d0ec69f
71 changed files with 3316 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
package cmd
import (
"fmt"
"mangezmieux-backend/internal/acl"
aclKey "mangezmieux-backend/internal/acl/key"
"mangezmieux-backend/internal/acl/service"
"mangezmieux-backend/internal/ginserver"
"mangezmieux-backend/internal/health"
"mangezmieux-backend/internal/injector"
"mangezmieux-backend/internal/jwt"
"mangezmieux-backend/internal/logger"
"mangezmieux-backend/internal/postgres"
"mangezmieux-backend/internal/users"
service2 "mangezmieux-backend/internal/users/service"
coreValidator "mangezmieux-backend/internal/validator"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// serveCmd represents the serve command.
var serveCmd = &cobra.Command{
Use: "serve",
Short: "Serve endpoints",
PreRun: initServeBindingsFlags,
Run: func(cmd *cobra.Command, args []string) {
serve()
},
}
func serve() {
initConfig()
logger.InitLogger(config.LogLevel, config.LogFormat)
logrus.
WithField(parameterLogLevel, config.LogLevel).
WithField(parameterLogFormat, config.LogFormat).
WithField(parameterPort, config.Port).
WithField(parameterPostgresHost, config.PostgresHost).
Warn("Configuration")
inj := &injector.Injector{}
authMiddleware := users.AuthMiddleware // <= its not configured yet
jwt.Setup(inj)
jwtService := injector.Get[*jwt.Service](inj, jwt.JWTKey)
inj.Set("AuthenticationMiddleware", authMiddleware.GinMiddleware(jwtService))
ginserver.Setup(inj)
coreValidator.Setup(inj)
psqlInfo := fmt.Sprintf("host=localhost port=5432 user=%s "+
"password=mysecretpassword dbname=%s sslmode=disable",
config.PostgresUser, config.PostgresDBName)
postgres.Setup(inj, psqlInfo)
health.Setup(inj)
acl.SetupDao(inj)
users.Setup(inj)
acl.Setup(inj)
authMiddleware.Service = injector.Get[*service2.Service](inj, users.ServiceKey)
authMiddleware.RoleService = injector.Get[service.Service](inj, aclKey.ServiceKey)
ginserver.Start(inj, config.Port)
}
func init() {
serveCmd.Flags().String(parameterLogLevel, defaultLogLevel, "Use this flag to set the logging level")
serveCmd.Flags().String(parameterLogFormat, defaultLogFormat, "Use this flag to set the logging format")
serveCmd.Flags().Bool(parameterMock, defaultMock, "Use this flag to mock external services")
serveCmd.Flags().String(parameterPort, defaultPort, "Use this flag to set the listening port of the api")
serveCmd.Flags().String(parameterPostgresDBName, defaultPostgresDBName, "Use this flag to set database name")
serveCmd.Flags().String(parameterPostgresDBSchema, defaultPostgresDBSchema, "Use this flag to set database schema name")
serveCmd.Flags().String(parameterPostgresHost, defaultPostgresHost, "Use this flag to set database host")
serveCmd.Flags().String(parameterPostgresUser, defaultPostgresUser, "Use this flag to set database user name")
serveCmd.Flags().String(parameterPostgresPwd, defaultPostgresPwd, "Use this flag to set database user password")
}
func initServeBindingsFlags(cmd *cobra.Command, args []string) {
_ = viper.BindPFlag(parameterLogLevel, cmd.Flags().Lookup(parameterLogLevel))
_ = viper.BindPFlag(parameterLogFormat, cmd.Flags().Lookup(parameterLogFormat))
_ = viper.BindPFlag(parameterMock, cmd.Flags().Lookup(parameterMock))
_ = viper.BindPFlag(parameterPort, cmd.Flags().Lookup(parameterPort))
_ = viper.BindPFlag(parameterPostgresDBName, cmd.Flags().Lookup(parameterPostgresDBName))
_ = viper.BindPFlag(parameterPostgresDBSchema, cmd.Flags().Lookup(parameterPostgresDBSchema))
_ = viper.BindPFlag(parameterPostgresHost, cmd.Flags().Lookup(parameterPostgresHost))
_ = viper.BindPFlag(parameterPostgresUser, cmd.Flags().Lookup(parameterPostgresUser))
_ = viper.BindPFlag(parameterPostgresPwd, cmd.Flags().Lookup(parameterPostgresPwd))
}