1、新增自定义用户私人价格2、优化api服务鉴权缓存3、新增管理员端对公充值

This commit is contained in:
2024-10-21 16:01:20 +08:00
parent 8896fd6b30
commit 2292d25d74
37 changed files with 1903 additions and 907 deletions

View File

@@ -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)
}

View File

@@ -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"),
)
}

View 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)
}
}
}

View 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)
}
}
}

View 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
}

View 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
}

View File

@@ -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()),
}
}

View File

@@ -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`
}