1、新增自定义用户私人价格2、优化api服务鉴权缓存3、新增管理员端对公充值
This commit is contained in:
@@ -152,3 +152,41 @@ service admin-api {
|
||||
get /list (GetProductListReq) returns (GetProductListResp)
|
||||
}
|
||||
|
||||
type (
|
||||
UserListRequest {
|
||||
Page int64 `json:"page"` // 分页页码
|
||||
PageSize int64 `json:"pageSize"` // 每页大小
|
||||
}
|
||||
UserListResponse {
|
||||
List []UserItem `json:"list"`
|
||||
Total int64 `json:"total"`
|
||||
}
|
||||
UserItem {
|
||||
Id int64 `json:"id"` // 主键ID
|
||||
Username string `json:"username"` // 用户名
|
||||
Phone string `json:"phone"` // 电话
|
||||
Disable int64 `json:"disable"` // 是否禁用状态,1为禁用,0为启用
|
||||
QuotaExceeded int64 `json:"quotaExceeded"` // 是否超出配额,1为超出,0为未超出
|
||||
Balance float64 `json:"balance"` // 余额
|
||||
CreatedAt string `json:"createdAt"` // 创建时间
|
||||
UpdatedAt string `json:"updatedAt"` // 更新时间
|
||||
}
|
||||
rechargeRequest {
|
||||
UserId int64 `json:userId`
|
||||
Amount int64 `json:amount`
|
||||
}
|
||||
)
|
||||
|
||||
@server (
|
||||
group: user
|
||||
prefix: /api/admin/user
|
||||
middleware: AuthInterceptor
|
||||
)
|
||||
service admin-api {
|
||||
@handler getUserList
|
||||
post /user/list (UserListRequest) returns (UserListResponse)
|
||||
|
||||
@handler recharge
|
||||
post /user/recharge (rechargeRequest)
|
||||
}
|
||||
|
||||
|
||||
@@ -93,4 +93,23 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
),
|
||||
rest.WithPrefix("/api/admin/user"),
|
||||
)
|
||||
|
||||
server.AddRoutes(
|
||||
rest.WithMiddlewares(
|
||||
[]rest.Middleware{serverCtx.AuthInterceptor},
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/user/list",
|
||||
Handler: user.GetUserListHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/user/recharge",
|
||||
Handler: user.RechargeHandler(serverCtx),
|
||||
},
|
||||
}...,
|
||||
),
|
||||
rest.WithPrefix("/api/admin/user"),
|
||||
)
|
||||
}
|
||||
|
||||
30
apps/admin/internal/handler/user/getuserlisthandler.go
Normal file
30
apps/admin/internal/handler/user/getuserlisthandler.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tianyuan-api/apps/admin/internal/logic/user"
|
||||
"tianyuan-api/apps/admin/internal/svc"
|
||||
"tianyuan-api/apps/admin/internal/types"
|
||||
|
||||
xhttp "github.com/zeromicro/x/http"
|
||||
)
|
||||
|
||||
func GetUserListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.UserListRequest
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
return
|
||||
}
|
||||
|
||||
l := user.NewGetUserListLogic(r.Context(), svcCtx)
|
||||
resp, err := l.GetUserList(&req)
|
||||
if err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
} else {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
|
||||
}
|
||||
}
|
||||
}
|
||||
30
apps/admin/internal/handler/user/rechargehandler.go
Normal file
30
apps/admin/internal/handler/user/rechargehandler.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
"tianyuan-api/apps/admin/internal/logic/user"
|
||||
"tianyuan-api/apps/admin/internal/svc"
|
||||
"tianyuan-api/apps/admin/internal/types"
|
||||
|
||||
xhttp "github.com/zeromicro/x/http"
|
||||
)
|
||||
|
||||
func RechargeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.RechargeRequest
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
return
|
||||
}
|
||||
|
||||
l := user.NewRechargeLogic(r.Context(), svcCtx)
|
||||
err := l.Recharge(&req)
|
||||
if err != nil {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
|
||||
} else {
|
||||
xhttp.JsonBaseResponseCtx(r.Context(), w, nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
53
apps/admin/internal/logic/user/getuserlistlogic.go
Normal file
53
apps/admin/internal/logic/user/getuserlistlogic.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tianyuan-api/apps/user/user"
|
||||
|
||||
"tianyuan-api/apps/admin/internal/svc"
|
||||
"tianyuan-api/apps/admin/internal/types"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type GetUserListLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewGetUserListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserListLogic {
|
||||
return &GetUserListLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *GetUserListLogic) GetUserList(req *types.UserListRequest) (resp *types.UserListResponse, err error) {
|
||||
list, err := l.svcCtx.UserRpc.GetUserList(l.ctx, &user.UserListRequest{
|
||||
Page: req.Page,
|
||||
PageSize: req.PageSize,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var listResp []types.UserItem
|
||||
for _, item := range list.List {
|
||||
listResp = append(listResp, types.UserItem{
|
||||
Id: item.Id,
|
||||
Username: item.Username,
|
||||
Phone: item.Phone,
|
||||
Disable: item.Disable,
|
||||
Balance: item.Balance,
|
||||
QuotaExceeded: item.QuotaExceeded,
|
||||
CreatedAt: item.CreatedAt,
|
||||
UpdatedAt: item.UpdatedAt,
|
||||
})
|
||||
}
|
||||
return &types.UserListResponse{
|
||||
List: listResp,
|
||||
Total: list.Total,
|
||||
}, nil
|
||||
}
|
||||
39
apps/admin/internal/logic/user/rechargelogic.go
Normal file
39
apps/admin/internal/logic/user/rechargelogic.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"tianyuan-api/apps/admin/internal/svc"
|
||||
"tianyuan-api/apps/admin/internal/types"
|
||||
"tianyuan-api/apps/user/user"
|
||||
"tianyuan-api/pkg/generate"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type RechargeLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewRechargeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RechargeLogic {
|
||||
return &RechargeLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *RechargeLogic) Recharge(req *types.RechargeRequest) error {
|
||||
outTradeNo := generate.GenerateTransactionID()
|
||||
_, err := l.svcCtx.WalletsRpc.RechargeWallet(l.ctx, &user.RechargeWalletRequest{
|
||||
UserId: req.UserId,
|
||||
OutTradeNo: outTradeNo,
|
||||
Amount: req.Amount,
|
||||
PaymentMethod: 2,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -15,6 +15,7 @@ type ServiceContext struct {
|
||||
EntRpc user.EnterpriseClient
|
||||
UserRpc user.UserClient
|
||||
ProductRpc sentinel.ProductClient
|
||||
WalletsRpc user.WalletServiceClient
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
@@ -24,5 +25,6 @@ func NewServiceContext(c config.Config) *ServiceContext {
|
||||
EntRpc: user.NewEnterpriseClient(zrpc.MustNewClient(c.UserRpc).Conn()),
|
||||
UserRpc: user.NewUserClient(zrpc.MustNewClient(c.UserRpc).Conn()),
|
||||
ProductRpc: sentinel.NewProductClient(zrpc.MustNewClient(c.SentinelRpc).Conn()),
|
||||
WalletsRpc: user.NewWalletServiceClient(zrpc.MustNewClient(c.UserRpc).Conn()),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,3 +98,29 @@ type UpdateProductReq struct {
|
||||
type UserInfoResp struct {
|
||||
Username string `json:"username"`
|
||||
}
|
||||
|
||||
type UserItem struct {
|
||||
Id int64 `json:"id"` // 主键ID
|
||||
Username string `json:"username"` // 用户名
|
||||
Phone string `json:"phone"` // 电话
|
||||
Disable int64 `json:"disable"` // 是否禁用状态,1为禁用,0为启用
|
||||
QuotaExceeded int64 `json:"quotaExceeded"` // 是否超出配额,1为超出,0为未超出
|
||||
Balance float64 `json:"balance"` // 余额
|
||||
CreatedAt string `json:"createdAt"` // 创建时间
|
||||
UpdatedAt string `json:"updatedAt"` // 更新时间
|
||||
}
|
||||
|
||||
type UserListRequest struct {
|
||||
Page int64 `json:"page"` // 分页页码
|
||||
PageSize int64 `json:"pageSize"` // 每页大小
|
||||
}
|
||||
|
||||
type UserListResponse struct {
|
||||
List []UserItem `json:"list"`
|
||||
Total int64 `json:"total"`
|
||||
}
|
||||
|
||||
type RechargeRequest struct {
|
||||
UserId int64 `json:userId`
|
||||
Amount int64 `json:amount`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user