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 { | func Run(t reflect.Type) error { | ||||||
| 	pgURL := &url.URL{ | 	pool, err := buildPgx(t) | ||||||
| 		Scheme: "postgres", | 	if nil != err { | ||||||
| 		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 { |  | ||||||
| 		return fmt.Errorf("[%v]", 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() | 	defer pool.Close() | ||||||
| 
 | 
 | ||||||
| 	di.RegisterResource("dbConnPool", pool) |  | ||||||
| 
 |  | ||||||
| 	taServer := di.GetTypeAnnotation(t, appAnnotation.ServerAnnotationType) | 	taServer := di.GetTypeAnnotation(t, appAnnotation.ServerAnnotationType) | ||||||
| 	if nil == taServer { | 	if nil == taServer { | ||||||
| 		return fmt.Errorf("[%s] is not Server, use @app:Server", t.Elem().Name()) | 		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 | 	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 { | func parseRestHandler(restHandler interface{}) *webAnnotation.RestHandlerAnnotation { | ||||||
| 	t := reflect.TypeOf(restHandler) | 	t := reflect.TypeOf(restHandler) | ||||||
| 	ta := di.GetTypeAnnotation(t, webAnnotation.RestHandlerAnnotationType) | 	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 { | 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