diff --git a/apis/pgTest.api b/apis/pgTest.api new file mode 100644 index 0000000..83ec1b1 --- /dev/null +++ b/apis/pgTest.api @@ -0,0 +1,29 @@ +syntax = "v1" + +type PgTestRequest { + Form string `json:"from"` +} +// 通用api返回参数 +type PgTestResponse { + Success bool `json:"success,default=true"` // 是否成功 + Message string `json:"message,optional"` // 消息 + Result interface{} `json:"data,optional"` // 数据 + Total int64 `json:"total,optional"` // 总数 +} + +@server ( + group: PgTest +) +service demo-api { + @doc( + summary: "pg测试接口", + ) + @handler PgInsertTestHandler + post /pg_test/insert returns (TestResponse) + @doc( + summary: "pg测试接口", + ) + @handler PgSearchTestHandler + post /pg_test/search returns (TestResponse) + +} diff --git a/demo.api b/demo.api index 38c2823..ae93005 100644 --- a/demo.api +++ b/demo.api @@ -1,5 +1,6 @@ syntax = "v1" import "/apis/teThoroughlyRegister.api" +import "/apis/pgTest.api" type Request { Name string `path:"name,options=you|me"` diff --git a/etc/demo-api.yaml b/etc/demo-api.yaml index 5a59e9f..93ec326 100644 --- a/etc/demo-api.yaml +++ b/etc/demo-api.yaml @@ -1,17 +1,17 @@ Name: demo-api Host: 0.0.0.0 Port: 8888 -MaxConns: 1000 +MaxConns: 10000 Pg: # postgresql 连接配置 - DataSource: postgres://postgres:123456@127.0.0.1:/postgres?sslmode=disable + DataSource: postgres://postgres:123456@127.0.0.1:/test?sslmode=disable CacheRedis: - Host: 127.0.0.1:6379 # Pass: $pass Type: node -Log: - ServiceName: demo - Mode: file - Path: logs - Level: info - KeepDays: 7 \ No newline at end of file +# Log: +# ServiceName: demo +# Mode: file +# Path: logs +# Level: info +# KeepDays: 7 \ No newline at end of file diff --git a/internal/handler/PgTest/pginserttesthandler.go b/internal/handler/PgTest/pginserttesthandler.go new file mode 100644 index 0000000..9f13cd8 --- /dev/null +++ b/internal/handler/PgTest/pginserttesthandler.go @@ -0,0 +1,21 @@ +package PgTest + +import ( + "net/http" + + "demo/internal/logic/PgTest" + "demo/internal/svc" + "github.com/zeromicro/go-zero/rest/httpx" +) + +func PgInsertTestHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + l := PgTest.NewPgInsertTestLogic(r.Context(), svcCtx) + resp, err := l.PgInsertTest() + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/internal/handler/PgTest/pgsearchtesthandler.go b/internal/handler/PgTest/pgsearchtesthandler.go new file mode 100644 index 0000000..6ac9ca0 --- /dev/null +++ b/internal/handler/PgTest/pgsearchtesthandler.go @@ -0,0 +1,21 @@ +package PgTest + +import ( + "net/http" + + "demo/internal/logic/PgTest" + "demo/internal/svc" + "github.com/zeromicro/go-zero/rest/httpx" +) + +func PgSearchTestHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + l := PgTest.NewPgSearchTestLogic(r.Context(), svcCtx) + resp, err := l.PgSearchTest() + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/internal/handler/routes.go b/internal/handler/routes.go index 958fa2f..9b81739 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -4,6 +4,7 @@ package handler import ( "net/http" + PgTest "demo/internal/handler/PgTest" "demo/internal/svc" "github.com/zeromicro/go-zero/rest" @@ -49,4 +50,19 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { }, }, ) + + server.AddRoutes( + []rest.Route{ + { + Method: http.MethodPost, + Path: "/pg_test/insert", + Handler: PgTest.PgInsertTestHandler(serverCtx), + }, + { + Method: http.MethodPost, + Path: "/pg_test/search", + Handler: PgTest.PgSearchTestHandler(serverCtx), + }, + }, + ) } diff --git a/internal/logic/PgTest/pginserttestlogic.go b/internal/logic/PgTest/pginserttestlogic.go new file mode 100644 index 0000000..367d2ff --- /dev/null +++ b/internal/logic/PgTest/pginserttestlogic.go @@ -0,0 +1,51 @@ +package PgTest + +import ( + "context" + + "demo/internal/svc" + "demo/internal/types" + Pgmodel "demo/model/pgTest" // 引入model + + "github.com/google/uuid" + "github.com/zeromicro/go-zero/core/logx" +) + +type PgInsertTestLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewPgInsertTestLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PgInsertTestLogic { + return &PgInsertTestLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *PgInsertTestLogic) PgInsertTest() (resp *types.TestResponse, err error) { + // 组装数据 + uid := uuid.New() + server := l.svcCtx.Config.Name + // insertData := new (Pgmodel.Test) + // insertData.Id = uid.String() + // insertData.Server = server + insertData := &Pgmodel.Test{ + Id: uid.String(), + Server: server, + } + + // 插入数据库 + _, err = l.svcCtx.PgModel.Insert(l.ctx, insertData) + if err != nil { + return nil, err + } + resp = &types.TestResponse{ + Success: true, + Message: "插入成功", + } + + return resp, nil +} diff --git a/internal/logic/PgTest/pgsearchtestlogic.go b/internal/logic/PgTest/pgsearchtestlogic.go new file mode 100644 index 0000000..6ee6edd --- /dev/null +++ b/internal/logic/PgTest/pgsearchtestlogic.go @@ -0,0 +1,40 @@ +package PgTest + +import ( + "context" + + "demo/internal/svc" + "demo/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type PgSearchTestLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewPgSearchTestLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PgSearchTestLogic { + return &PgSearchTestLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *PgSearchTestLogic) PgSearchTest() (resp *types.TestResponse, err error) { + + // 查询数据库 + data, err := l.svcCtx.PgModel.FindOne(l.ctx, "findonetest") + if err != nil { + return nil, err + } + resp = &types.TestResponse{ + Success: true, + Message: "查询成功", + Result: *data, + } + + return resp, nil +} diff --git a/internal/svc/servicecontext.go b/internal/svc/servicecontext.go index 063e862..9a45f40 100644 --- a/internal/svc/servicecontext.go +++ b/internal/svc/servicecontext.go @@ -3,6 +3,7 @@ package svc import ( "demo/internal/config" dbModel "demo/model" + pgModel "demo/model/pgTest" _ "github.com/lib/pq" "github.com/zeromicro/go-zero/core/stores/sqlx" @@ -11,6 +12,7 @@ import ( type ServiceContext struct { Config config.Config DbModel dbModel.TeThoroughlyRegisterModel + PgModel pgModel.TestModel } func NewServiceContext(c config.Config) *ServiceContext { @@ -18,5 +20,6 @@ func NewServiceContext(c config.Config) *ServiceContext { return &ServiceContext{ Config: c, DbModel: dbModel.NewTeThoroughlyRegisterModel(conn), + PgModel: pgModel.NewTestModel(conn), } } diff --git a/internal/types/types.go b/internal/types/types.go index 25b4a64..b3978b1 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -81,3 +81,14 @@ type TestResponse struct { Result interface{} `json:"data,optional"` // 数据 Total int64 `json:"total,optional"` // 总数 } + +type PgTestRequest struct { + Form string `json:"from"` +} + +type PgTestResponse struct { + Success bool `json:"success,default=true"` // 是否成功 + Message string `json:"message,optional"` // 消息 + Result interface{} `json:"data,optional"` // 数据 + Total int64 `json:"total,optional"` // 总数 +} diff --git a/model/pgTest/test.ddl b/model/pgTest/test.ddl new file mode 100644 index 0000000..61ca0f5 --- /dev/null +++ b/model/pgTest/test.ddl @@ -0,0 +1,11 @@ +-- public.test definition + +-- Drop table + +-- DROP TABLE public.test; + +CREATE TABLE public.test ( + id varchar NOT NULL, + "from" varchar NOT NULL, + CONSTRAINT test_pk PRIMARY KEY (id) +); \ No newline at end of file diff --git a/model/pgTest/testmodel.go b/model/pgTest/testmodel.go new file mode 100644 index 0000000..19bf495 --- /dev/null +++ b/model/pgTest/testmodel.go @@ -0,0 +1,24 @@ +package pgTest + +import "github.com/zeromicro/go-zero/core/stores/sqlx" + +var _ TestModel = (*customTestModel)(nil) + +type ( + // TestModel is an interface to be customized, add more methods here, + // and implement the added methods in customTestModel. + TestModel interface { + testModel + } + + customTestModel struct { + *defaultTestModel + } +) + +// NewTestModel returns a model for the database table. +func NewTestModel(conn sqlx.SqlConn) TestModel { + return &customTestModel{ + defaultTestModel: newTestModel(conn), + } +} diff --git a/model/pgTest/testmodel_gen.go b/model/pgTest/testmodel_gen.go new file mode 100644 index 0000000..c34889f --- /dev/null +++ b/model/pgTest/testmodel_gen.go @@ -0,0 +1,91 @@ +// Code generated by goctl. DO NOT EDIT. + +package pgTest + +import ( + "context" + "database/sql" + "fmt" + "strings" + + "github.com/zeromicro/go-zero/core/stores/builder" + "github.com/zeromicro/go-zero/core/stores/sqlc" + "github.com/zeromicro/go-zero/core/stores/sqlx" + "github.com/zeromicro/go-zero/core/stringx" +) + +var ( + testFieldNames = builder.RawFieldNames(&Test{}, true) + testRows = strings.Join(testFieldNames, ",") + testRowsExpectAutoSet = strings.Join(stringx.Remove(testFieldNames), ",") + testRowsWithPlaceHolder = builder.PostgreSqlJoin(stringx.Remove(testFieldNames, "id")) +) + +type ( + testModel interface { + Insert(ctx context.Context, data *Test) (sql.Result, error) + FindOne(ctx context.Context, id string) (*Test, error) + Update(ctx context.Context, data *Test) error + Delete(ctx context.Context, id string) error + } + + defaultTestModel struct { + conn sqlx.SqlConn + table string + } + + Test struct { + Id string `db:"id"` + Server string `db:"server"` + } +) + +func newTestModel(conn sqlx.SqlConn) *defaultTestModel { + return &defaultTestModel{ + conn: conn, + table: `"public"."test"`, + } +} + +func (m *defaultTestModel) withSession(session sqlx.Session) *defaultTestModel { + return &defaultTestModel{ + conn: sqlx.NewSqlConnFromSession(session), + table: `"public"."test"`, + } +} + +func (m *defaultTestModel) Delete(ctx context.Context, id string) error { + query := fmt.Sprintf("delete from %s where id = $1", m.table) + _, err := m.conn.ExecCtx(ctx, query, id) + return err +} + +func (m *defaultTestModel) FindOne(ctx context.Context, id string) (*Test, error) { + query := fmt.Sprintf("select %s from %s where id = $1 limit 1", testRows, m.table) + var resp Test + err := m.conn.QueryRowCtx(ctx, &resp, query, id) + switch err { + case nil: + return &resp, nil + case sqlc.ErrNotFound: + return nil, ErrNotFound + default: + return nil, err + } +} + +func (m *defaultTestModel) Insert(ctx context.Context, data *Test) (sql.Result, error) { + query := fmt.Sprintf("insert into %s (%s) values ($1, $2)", m.table, testRowsExpectAutoSet) + ret, err := m.conn.ExecCtx(ctx, query, data.Id, data.Server) + return ret, err +} + +func (m *defaultTestModel) Update(ctx context.Context, data *Test) error { + query := fmt.Sprintf("update %s set %s where id = $1", m.table, testRowsWithPlaceHolder) + _, err := m.conn.ExecCtx(ctx, query, data.Id, data.Server) + return err +} + +func (m *defaultTestModel) tableName() string { + return m.table +} diff --git a/model/pgTest/vars.go b/model/pgTest/vars.go new file mode 100644 index 0000000..67ad95f --- /dev/null +++ b/model/pgTest/vars.go @@ -0,0 +1,5 @@ +package pgTest + +import "github.com/zeromicro/go-zero/core/stores/sqlx" + +var ErrNotFound = sqlx.ErrNotFound diff --git a/readme.md b/readme.md index 0b63bc0..7c76b8e 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,6 @@ # 生产model goctl model pg datasource --url="postgres://postgres:123456@10.0.1.36:5432/postgres?sslmode=disable" --table="te_thoroughly_register" -dir ./model # 本机 -goctl model pg datasource --url="postgres://postgres:123456@127.0.0.1:5432/postgres?sslmode=disable" --table="te_thoroughly_register" -dir ./model # api 生成 goctl api go -api demo.api -dir . ## 编写api文件