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