-
Notifications
You must be signed in to change notification settings - Fork 1
/
adapter.go
138 lines (111 loc) · 5.4 KB
/
adapter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package adapter
import (
"os"
"path/filepath"
"strings"
// Specificate the docs package
_ "github.com/bancodobrasil/featws-resolver-adapter-go/docs"
"github.com/bancodobrasil/featws-resolver-adapter-go/middlewares"
"github.com/bancodobrasil/featws-resolver-adapter-go/routes"
"github.com/bancodobrasil/featws-resolver-adapter-go/services"
ginMonitor "github.com/bancodobrasil/gin-monitor"
"github.com/gin-gonic/gin"
"github.com/prometheus/client_golang/prometheus/promhttp"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
ginlogrus "github.com/toorop/gin-logrus"
)
// init initializes configuration settings for a Go application using environment variables
// and a configuration file.
func init() {
ex, err := os.Executable()
if err != nil {
log.Fatal(err)
}
exePath := filepath.Dir(ex)
viper.AddConfigPath(exePath)
viper.SetConfigType("env")
viper.SetConfigName(".env")
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
viper.SetDefault("EXTERNAL-HOST", "localhost:7000")
viper.SetDefault("RESOLVER_LOG_JSON", false)
viper.SetDefault("RESOLVER_LOG_LEVEL", "error")
viper.SetDefault("RESOLVER_SERVICE_NAME", "resolver-adapter-go")
viper.SetDefault("RESOLVER_API_KEY", "")
if err := viper.ReadInConfig(); err == nil {
log.Infof("Using config file: %s", viper.ConfigFileUsed())
}
}
// Config has a single field named Port of type string.
//
// Property:
// - {string} Port: is a string that represents the port number that a server or application will listen on for incoming network connections. It is commonly used in network programming to specify the communication endpoint for a particular service.
type Config struct {
Port string
}
// @title FeatWS Resolver Adapter
// @version 1.0
// @Description
// @Description O Resolver Adapter Project é uma biblioteca que fornece um conjunto de resolvers para serem utilizados por outros projetos. Resolvers são um conceito fundamental no desenvolvimento de software que são responsáveis por determinar o valor de um campo em um esquema GraphQL.
// @Description
// @Description No contexto do GraphQL, um resolver é uma função que resolve um campo GraphQL, buscando os dados de uma fonte de dados, como um banco de dados ou uma API. O Resolver Adapter Project fornece um conjunto de resolvers pré-construídos que podem ser usados por outros projetos para lidar com cenários comuns de busca de dados.
// @Description
// @Description Por exemplo, se você tem um esquema GraphQL que inclui um campo para buscar os dados de um usuário. O Resolver Adapter Project pode ser usado para buscar os dados do banco de dados interno do BB sobre um cliente especifico do banco, podendo retornar diversos parâmetros do cliente, como os seguintes:
// @Description
// @Description - account (conta)
// @Description - accountType (tipo de conta)
// @Description - age (idade)
// @Description - agenciaDet (tipo de conta)
// @Description - branch (agencia)
// @Description - branchState (Estado da agencia)
// @Description - customerBase (agencia)
// @Description - dataNascimento (data de nascimento)
// @Description - employeeDependency (Dependecia do empregado do banco - só trará um retorno se a pessoa for funci do banco)
// @Description - employeeKey (se é empregado do banco)
// @Description - enterpriseKey (chave empresarial)
// @Description - gender (sexo)
// @Description - holder (titularidade da conta)
// @Description - holderState (estado do titularidade da conta)
// @Description - mci
// @Description - mcipj
// @Description - wallet (carteira)
// @Description
// @Description No geral, o Resolver Adapter Project é uma biblioteca útil que pode simplificar o desenvolvimento de APIs GraphQL fornecendo resolvers pré-construídos que podem ser facilmente integrados em outros projetos.
// @Description
// @Description Antes de realizar as requisições no Swagger, é necessário autorizar o acesso clicando no botão **Authorize**, ao lado, e inserindo a senha correspondente. Após inserir o campo **value** e clicar no botão **Authorize**, o Swagger estará disponível para ser utilizado.
// @termsOfService http://swagger.io/terms/
// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email [email protected]
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host localhost:7000
// @BasePath /api/v1
// @securityDefinitions.apikey Authentication Api Key
// @in header
// @name X-API-Key
// @x-extension-openapi {"example": "value on a json format"}
// Run sets up a Gin router with middleware and routes, and runs it on a specified port.
func Run(resolverFunc services.ResolverFunc, config Config) error {
InitLogger()
monitor, err := ginMonitor.New("v0.0.1-rc8", ginMonitor.DefaultErrorMessageKey, ginMonitor.DefaultBuckets)
if err != nil {
panic(err)
}
gin.DefaultWriter = log.StandardLogger().WriterLevel(log.DebugLevel)
gin.DefaultErrorWriter = log.StandardLogger().WriterLevel(log.ErrorLevel)
services.SetupResolver(resolverFunc)
router := gin.New()
middlewares.InitializeMiddlewares()
// Register ginLogrus log format to gin
router.Use(ginlogrus.Logger(log.StandardLogger()), gin.Recovery())
// Register gin-monitor middleware
router.Use(monitor.Prometheus())
// Register metrics endpoint
router.GET("/metrics", gin.WrapH(promhttp.Handler()))
routes.SetupRoutes(router)
routes.APIRoutes(router)
return router.Run(":" + config.Port)
}