config of pgx is added
This commit is contained in:
		
							parent
							
								
									e30c7b7100
								
							
						
					
					
						commit
						3ceae1e399
					
				| @ -22,31 +22,12 @@ type MethodMapping struct { | ||||
| } | ||||
| 
 | ||||
| func Run(t reflect.Type) error { | ||||
| 	pgURL := &url.URL{ | ||||
| 		Scheme: "postgres", | ||||
| 		User:   url.UserPassword("totopia", "totopia"), | ||||
| 		Path:   "totopia", | ||||
| 	} | ||||
| 	q := pgURL.Query() | ||||
| 	q.Add("sslmode", "disable") | ||||
| 	pgURL.RawQuery = q.Encode() | ||||
| 
 | ||||
| 	config, err := pgxpool.ParseConfig(pgURL.String()) | ||||
| 	if err != nil { | ||||
| 	pool, err := buildPgx(t) | ||||
| 	if nil != err { | ||||
| 		return fmt.Errorf("[%v]", err) | ||||
| 	} | ||||
| 	config.ConnConfig.Host = "localhost" | ||||
| 	config.ConnConfig.Port = 54320 | ||||
| 
 | ||||
| 	pool, err := pgxpool.ConnectConfig(context.Background(), config) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("[%v]", err) | ||||
| 	} | ||||
| 
 | ||||
| 	defer pool.Close() | ||||
| 
 | ||||
| 	di.RegisterResource("dbConnPool", pool) | ||||
| 
 | ||||
| 	taServer := di.GetTypeAnnotation(t, appAnnotation.ServerAnnotationType) | ||||
| 	if nil == taServer { | ||||
| 		return fmt.Errorf("[%s] is not Server, use @app:Server", t.Elem().Name()) | ||||
| @ -74,6 +55,45 @@ func Run(t reflect.Type) error { | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func buildPgx(t reflect.Type) (*pgxpool.Pool, error) { | ||||
| 	taPgx := di.GetTypeAnnotation(t, webAnnotation.PgxAnnotationType) | ||||
| 	if nil == taPgx { | ||||
| 		return nil, fmt.Errorf("[%s] is not Pgx, use @web:Pgx", t.Elem().Name()) | ||||
| 
 | ||||
| 	} | ||||
| 	aPgx := taPgx.(*webAnnotation.PgxAnnotation) | ||||
| 
 | ||||
| 	pgURL := &url.URL{ | ||||
| 		Scheme: "postgres", | ||||
| 		User:   url.UserPassword(aPgx.User, aPgx.Password), | ||||
| 		Path:   aPgx.Database, | ||||
| 	} | ||||
| 	q := pgURL.Query() | ||||
| 	if aPgx.SSLMode { | ||||
| 		q.Add("sslmode", "enable") | ||||
| 	} else { | ||||
| 		q.Add("sslmode", "disable") | ||||
| 	} | ||||
| 
 | ||||
| 	pgURL.RawQuery = q.Encode() | ||||
| 
 | ||||
| 	config, err := pgxpool.ParseConfig(pgURL.String()) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("[%v]", err) | ||||
| 	} | ||||
| 	config.ConnConfig.Host = aPgx.Host | ||||
| 	config.ConnConfig.Port = aPgx.Port | ||||
| 
 | ||||
| 	pool, err := pgxpool.ConnectConfig(context.Background(), config) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("[%v]", err) | ||||
| 	} | ||||
| 
 | ||||
| 	di.RegisterResource("dbConnPool", pool) | ||||
| 
 | ||||
| 	return pool, nil | ||||
| } | ||||
| 
 | ||||
| func parseRestHandler(restHandler interface{}) *webAnnotation.RestHandlerAnnotation { | ||||
| 	t := reflect.TypeOf(restHandler) | ||||
| 	ta := di.GetTypeAnnotation(t, webAnnotation.RestHandlerAnnotationType) | ||||
|  | ||||
							
								
								
									
										26
									
								
								pkg/loafer/web/annotation/pgx.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								pkg/loafer/web/annotation/pgx.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| package annotation | ||||
| 
 | ||||
| import ( | ||||
| 	"reflect" | ||||
| 
 | ||||
| 	"git.loafle.net/loafer/annotation-go" | ||||
| ) | ||||
| 
 | ||||
| var PgxAnnotationType = reflect.TypeOf((*PgxAnnotation)(nil)) | ||||
| 
 | ||||
| func init() { | ||||
| 	if err := annotation.Register(PgxAnnotationType); nil != err { | ||||
| 		panic(err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| type PgxAnnotation struct { | ||||
| 	annotation.TypeAnnotation `@annotation:"@web:Pgx"` | ||||
| 
 | ||||
| 	Host     string `json:"host"` | ||||
| 	Port     uint16 `json:"port"` | ||||
| 	Database string `json:"database"` | ||||
| 	User     string `json:"user"` | ||||
| 	Password string `json:"password"` | ||||
| 	SSLMode  bool   `json:"sslMode"` | ||||
| } | ||||
| @ -22,5 +22,5 @@ func init() { | ||||
| } | ||||
| 
 | ||||
| type Server struct { | ||||
| 	annotation.TypeAnnotation `annotation:"@app:Server(\"httpPort\": 8080)"` | ||||
| 	annotation.TypeAnnotation `annotation:"@app:Server(\"httpPort\": 8080) @web:Pgx(\"host\": \"localhost\", \"port\": 54320, \"database\": \"totopia\", \"user\": \"totopia\", \"password\": \"totopia\", \"sslMode\": false)"` | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user