This commit is contained in:
Rogee
2025-02-10 19:57:54 +08:00
parent 6214f9cbee
commit 94d08aacc2

View File

@@ -169,8 +169,9 @@ func (c *PayController) Prepare() error {
// actions ... // actions ...
} }
``` ```
- controller 文件定义完成后运行 `atomctl gen provider` 来生成 provider
- 一个 action 方法的定义 - 一个 action 方法的定义 **@Router**不再使用swago的定义方式替换为下面的定义方式参数做用@Bind来进行声明会自动注入不需要业务内获取参数
```go ```go
// Orders show user orders // Orders show user orders
// @swagger definitions // @swagger definitions
@@ -206,6 +207,7 @@ func (c *OrderController) List(ctx fiber.Ctx, claim *jwt.Claims,channel string,
- 你需要把第二行的 `@swagger definitions` 替换成你的swagger定义 - 你需要把第二行的 `@swagger definitions` 替换成你的swagger定义
- @Bind 参数会有几个位置 path/query/body/header/cookie/local/file 会分别从 url/get query/post body/header/cookie/fiber.Local/file/中取出所需要的数据绑定到方法的请求参数中去。 - @Bind 参数会有几个位置 path/query/body/header/cookie/local/file 会分别从 url/get query/post body/header/cookie/fiber.Local/file/中取出所需要的数据绑定到方法的请求参数中去。
- controller 只负责数据的接收返回及相关数据装饰具体的复杂逻辑实现需要在service文件中定义。 - controller 只负责数据的接收返回及相关数据装饰具体的复杂逻辑实现需要在service文件中定义。
- action 文件内容完成运行 `atomctl gen route` 来生成路由
## service ## service
@@ -223,11 +225,12 @@ func (svc *Service) Prepare() error {
return nil return nil
} }
``` ```
- service 文件定义完成后运行 `atomctl gen provider` 来生成 provider
- service 中 model 数据查询的示例需要注意table需要定义为一个短小的tblXXX以便代码展示简洁 - service 中 model 数据查询的示例需要注意table需要定义为一个短小的tblXXX以便代码展示简洁
```go ```go
// GetUserOrderByOrderID // GetUserOrderByOrderID
func (svc *Service) GetUserOrderByOrderID(ctx context.Context, orderID string, userID int64) (*model.Orders, error) { func (svc *Service) Get(ctx context.Context, orderID string, userID int64) (*model.Orders, error) {
_, span := otel.Start(ctx, "users.service.GetUserOrderByOrderID") _, span := otel.Start(ctx, "users.service.GetUserOrderByOrderID")
defer span.End() defer span.End()
span.SetAttributes( span.SetAttributes(
@@ -248,7 +251,7 @@ span.RecordError(err)
} }
// UpdateStage // UpdateStage
func (svc *Service) UpdateStage(ctx context.Context, tenantID, userID, postID int64, stage fields.PostStage) error { func (svc *Service) Update(ctx context.Context, tenantID, userID, postID int64, stage fields.PostStage) error {
_, span := otel.Start(ctx, "users.service.UpdateStage") _, span := otel.Start(ctx, "users.service.UpdateStage")
defer span.End() defer span.End()
span.SetAttributes( span.SetAttributes(
@@ -257,14 +260,6 @@ func (svc *Service) UpdateStage(ctx context.Context, tenantID, userID, postID in
attribute.Int64("post.id", postID), attribute.Int64("post.id", postID),
) )
post, err := svc.ForceGetPostByID(ctx, postID)
if err != nil {
span.RecordError(err)
return err
}
post.Stage = stage
tbl := table.Posts tbl := table.Posts
stmt := tbl. stmt := tbl.
UPDATE(tbl.UpdatedAt, tbl.Stage). UPDATE(tbl.UpdatedAt, tbl.Stage).
@@ -290,76 +285,6 @@ func (svc *Service) UpdateStage(ctx context.Context, tenantID, userID, postID in
} }
``` ```
- 一个service_test定义需要使用goconvey来对不同的case进行区分。如果需要注入其它模型你需要在 With() 方法中进行添加。
```go
package auth
import (
"testing"
"backend/app/service/testx"
. "github.com/smartystreets/goconvey/convey"
"github.com/stretchr/testify/suite"
"go.uber.org/dig"
)
type ServiceInjectParams struct {
dig.In
Svc *Service
}
type ServiceTestSuite struct {
suite.Suite
ServiceInjectParams
}
func Test_DiscoverMedias(t *testing.T) {
providers := testx.Default().With(
Provide,
)
testx.Serve(providers, t, func(params ServiceInjectParams) {
suite.Run(t, &ServiceTestSuite{ServiceInjectParams: params})
})
}
func (s *ServiceTestSuite) Test_Service() {
Convey("Test Service", s.T(), func() {
So(s.Svc, ShouldNotBeNil)
})
}
```
## grpc
- 一个 handler 的示例
```
import (
userv1 "go.ipao.vip/project/test01/pkg/proto/user/v1"
)
// @provider(grpc) userv1.RegisterUserServiceServer
type Users struct {
userv1.UnimplementedUserServiceServer
}
func (u *Users) ListUsers(ctx context.Context, in *userv1.ListUsersRequest) (*userv1.ListUsersResponse, error) {
// userv1.UserServiceServer
return &userv1.ListUsersResponse{}, nil
}
// GetUser implements userv1.UserServiceServer
func (u *Users) GetUser(ctx context.Context, in *userv1.GetUserRequest) (*userv1.GetUserResponse, error) {
return &userv1.GetUserResponse{
User: &userv1.User{
Id: in.Id,
},
}, nil
}
```
# 本项目说明 # 本项目说明
- 设计一个支持多租户的用户系统,一个用户可以同时属于多个租户 - 设计一个支持多租户的用户系统,一个用户可以同时属于多个租户