fix and code
This commit is contained in:
parent
8e8e6780c5
commit
15d9896c1d
54
.air.debug.toml
Normal file
54
.air.debug.toml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# Air配置文件
|
||||||
|
root = "."
|
||||||
|
tmp_dir = "tmp"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
# 入口文件
|
||||||
|
cmd = "go build -gcflags=-N -gcflags=-l -o ./tmp/main.exe ./app/user/cmd/api/main.go"
|
||||||
|
# 二进制文件
|
||||||
|
bin = "./tmp/main.exe"
|
||||||
|
# 运行时的参数
|
||||||
|
full_bin = "dlv exec --accept-multiclient --headless --listen=:2345 --api-version=2 ./tmp/main.exe -- $env:ENV='development'"
|
||||||
|
|
||||||
|
# 监听以下扩展名的文件变化./
|
||||||
|
include_ext = ["go", "tpl", "tmpl", "html", "yaml", "yml"]
|
||||||
|
# 忽略的目录
|
||||||
|
exclude_dir = ["assets", "tmp", "vendor", "testdata", ".git", ".idea", "data"]
|
||||||
|
# 构建延迟
|
||||||
|
delay = 1000
|
||||||
|
# 停止延迟
|
||||||
|
kill_delay = "2s"
|
||||||
|
# 日志文件
|
||||||
|
log = "build-errors.log"
|
||||||
|
# 出错时停止
|
||||||
|
stop_on_error = true
|
||||||
|
# 发送中断信号
|
||||||
|
send_interrupt = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[color]
|
||||||
|
main = "magenta"
|
||||||
|
watcher = "cyan"
|
||||||
|
build = "yellow"
|
||||||
|
runner = "green"
|
||||||
|
|
||||||
|
[log]
|
||||||
|
# 启用时间戳
|
||||||
|
time = true
|
||||||
|
# 启用详细日志
|
||||||
|
main_only = false
|
||||||
|
silent = false
|
||||||
|
|
||||||
|
[misc]
|
||||||
|
# 清理屏幕
|
||||||
|
clean_on_exit = false
|
||||||
|
|
||||||
|
[proxy]
|
||||||
|
app_port = 0
|
||||||
|
enabled = false
|
||||||
|
proxy_port = 0
|
||||||
|
|
||||||
|
[screen]
|
||||||
|
clear_on_rebuild = false
|
||||||
|
keep_scroll = true
|
54
.air.toml
Normal file
54
.air.toml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# Air配置文件
|
||||||
|
root = "."
|
||||||
|
tmp_dir = "tmp"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
# 入口文件
|
||||||
|
cmd = "go build -o ./tmp/main.exe ./app/user/cmd/api/main.go"
|
||||||
|
# 二进制文件
|
||||||
|
bin = "$env:ENV = 'development' && ./tmp/main.exe"
|
||||||
|
# 运行时的参数
|
||||||
|
full_bin = "./tmp/main.exe -- $env:ENV='development'"
|
||||||
|
|
||||||
|
# 监听以下扩展名的文件变化./
|
||||||
|
include_ext = ["go", "tpl", "tmpl", "html", "yaml", "yml"]
|
||||||
|
# 忽略的目录
|
||||||
|
exclude_dir = ["assets", "tmp", "vendor", "testdata", ".git", ".idea", "data"]
|
||||||
|
# 构建延迟
|
||||||
|
delay = 1000
|
||||||
|
# 停止延迟
|
||||||
|
kill_delay = "2s"
|
||||||
|
# 日志文件
|
||||||
|
log = "build-errors.log"
|
||||||
|
# 出错时停止
|
||||||
|
stop_on_error = true
|
||||||
|
# 发送中断信号
|
||||||
|
send_interrupt = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[color]
|
||||||
|
main = "magenta"
|
||||||
|
watcher = "cyan"
|
||||||
|
build = "yellow"
|
||||||
|
runner = "green"
|
||||||
|
|
||||||
|
[log]
|
||||||
|
# 启用时间戳
|
||||||
|
time = true
|
||||||
|
# 启用详细日志
|
||||||
|
main_only = false
|
||||||
|
silent = false
|
||||||
|
|
||||||
|
[misc]
|
||||||
|
# 清理屏幕
|
||||||
|
clean_on_exit = false
|
||||||
|
|
||||||
|
[proxy]
|
||||||
|
app_port = 0
|
||||||
|
enabled = false
|
||||||
|
proxy_port = 0
|
||||||
|
|
||||||
|
[screen]
|
||||||
|
clear_on_rebuild = false
|
||||||
|
keep_scroll = true
|
202
.cursorrules
Normal file
202
.cursorrules
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
你是一位精通Go-Zero框架的AI编程助手,专门帮助开发基于Go-Zero的微服务API项目。
|
||||||
|
|
||||||
|
熟悉Go-Zero的项目结构和架构模式,包括:
|
||||||
|
- api服务开发
|
||||||
|
- rpc服务开发
|
||||||
|
- model层数据库操作
|
||||||
|
- 中间件实现
|
||||||
|
- 配置文件管理
|
||||||
|
- JWT认证体系
|
||||||
|
- 分布式事务处理
|
||||||
|
- 使用goctl工具生成代码
|
||||||
|
|
||||||
|
项目目录结构说明:
|
||||||
|
```
|
||||||
|
tydata-server/ # 项目根目录
|
||||||
|
├── app/ # 应用服务目录
|
||||||
|
│ └── user/ # 用户服务
|
||||||
|
│ ├── cmd/ # 服务启动入口
|
||||||
|
│ │ ├── api/ # API服务
|
||||||
|
│ │ │ ├── desc/ # API接口定义目录
|
||||||
|
│ │ │ │ ├── user/ # 用户模块API定义
|
||||||
|
│ │ │ │ │ └── user.api # 用户API类型定义
|
||||||
|
│ │ │ │ └── main.api # 主API文件
|
||||||
|
│ │ │ ├── etc/ # 配置文件目录
|
||||||
|
│ │ │ │ └── user.yaml # 服务配置文件
|
||||||
|
│ │ │ └── internal/ # 内部代码
|
||||||
|
│ │ │ ├── config/ # 配置结构定义
|
||||||
|
│ │ │ ├── handler/ # HTTP处理器
|
||||||
|
│ │ │ ├── logic/ # 业务逻辑
|
||||||
|
│ │ │ ├── middleware/ # 中间件
|
||||||
|
│ │ │ ├── svc/ # 服务上下文
|
||||||
|
│ │ │ └── types/ # 类型定义
|
||||||
|
│ │ └── rpc/ # RPC服务(如果有)
|
||||||
|
│ └── model/ # 数据库模型
|
||||||
|
├── common/ # 公共代码
|
||||||
|
│ ├── ctxdata/ # 上下文数据处理
|
||||||
|
│ ├── globalkey/ # 全局键值定义
|
||||||
|
│ ├── interceptor/ # 拦截器
|
||||||
|
│ ├── jwt/ # JWT认证
|
||||||
|
│ ├── kqueue/ # 消息队列
|
||||||
|
│ ├── middleware/ # 中间件
|
||||||
|
│ ├── result/ # 统一返回结果
|
||||||
|
│ ├── tool/ # 工具函数
|
||||||
|
│ ├── uniqueid/ # 唯一ID生成
|
||||||
|
│ ├── wxminisub/ # 微信小程序订阅
|
||||||
|
│ └── xerr/ # 错误处理
|
||||||
|
├── data/ # 数据文件目录
|
||||||
|
├── deploy/ # 部署相关文件
|
||||||
|
│ └── template/ # goctl模板
|
||||||
|
├── pkg/ # 可复用的包
|
||||||
|
│ └── lzkit/ # 工具包
|
||||||
|
└── tmp/ # 临时文件目录
|
||||||
|
```
|
||||||
|
|
||||||
|
目录作用说明:
|
||||||
|
1. app/user/cmd/api/:API服务目录
|
||||||
|
- desc/:API接口定义,包含各模块的API文件
|
||||||
|
- main.api:主API文件,导入所有模块API并定义路由
|
||||||
|
- user/user.api:用户模块的请求响应参数定义
|
||||||
|
- order/order.api:订单模块的请求响应参数定义
|
||||||
|
- 其他模块API定义文件
|
||||||
|
- etc/:配置文件目录,存放yaml配置
|
||||||
|
- user.yaml:包含数据库、缓存、JWT等配置信息
|
||||||
|
- internal/:服务内部代码
|
||||||
|
- config/:配置结构定义,对应etc下的yaml文件
|
||||||
|
- handler/:HTTP请求处理器,负责解析请求和返回响应
|
||||||
|
- logic/:业务逻辑实现,处理具体业务
|
||||||
|
- middleware/:HTTP中间件,如认证、日志等
|
||||||
|
- svc/:服务上下文,管理服务依赖(如DB、Cache等)
|
||||||
|
- types/:请求响应的结构体定义,由goctl根据API文件生成(不允许自己修改)
|
||||||
|
|
||||||
|
2. app/user/model/:数据库模型层
|
||||||
|
- userModel.go:用户表模型定义及CRUD方法
|
||||||
|
- userModel_gen.go:goctl工具生成的基础数据库操作代码(不允许自己修改)
|
||||||
|
- vars.go:定义数据库相关变量和常量
|
||||||
|
- 其他数据表模型文件
|
||||||
|
|
||||||
|
3. common/:存放公共代码
|
||||||
|
- ctxdata/:上下文数据处理
|
||||||
|
- globalkey/:全局键值定义
|
||||||
|
- interceptor/:拦截器
|
||||||
|
- jwt/:JWT认证相关
|
||||||
|
- kqueue/:消息队列处理
|
||||||
|
- middleware/:全局中间件
|
||||||
|
- result/:统一返回结果处理
|
||||||
|
- tool/:通用工具函数
|
||||||
|
- uniqueid/:唯一ID生成器
|
||||||
|
- wxminisub/:微信小程序订阅功能
|
||||||
|
- xerr/:统一错误处理
|
||||||
|
|
||||||
|
4. pkg/:可在多个服务间共享的包
|
||||||
|
- lzkit/:通用工具包
|
||||||
|
|
||||||
|
5. deploy/:部署相关文件
|
||||||
|
- template/:goctl代码生成模板
|
||||||
|
|
||||||
|
6. data/:数据文件目录
|
||||||
|
- 用于存放项目相关的数据文件
|
||||||
|
|
||||||
|
7. tmp/:临时文件目录
|
||||||
|
- 用于存放临时生成的文件
|
||||||
|
|
||||||
|
使用goctl生成API服务的步骤:
|
||||||
|
1. 首先确保API定义目录存在:
|
||||||
|
```bash
|
||||||
|
mkdir -p app/user/cmd/api/desc/user
|
||||||
|
```
|
||||||
|
|
||||||
|
2. API文件组织结构(单体服务模式):
|
||||||
|
```
|
||||||
|
app/user/cmd/api/desc/
|
||||||
|
├── user/
|
||||||
|
│ └── user.api # 用户模块的请求响应参数定义
|
||||||
|
├── order/
|
||||||
|
│ └── order.api # 订单模块的请求响应参数定义
|
||||||
|
└── main.api # 主API文件,集中管理所有模块的API定义
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 在app/user/cmd/api/desc/main.api中集中管理所有API:
|
||||||
|
```
|
||||||
|
syntax = "v1"
|
||||||
|
|
||||||
|
info(
|
||||||
|
title: "单体服务API"
|
||||||
|
desc: "集中管理所有模块的API"
|
||||||
|
author: "team"
|
||||||
|
version: "v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 导入各模块的类型定义
|
||||||
|
import "user/user.api"
|
||||||
|
import "order/order.api"
|
||||||
|
|
||||||
|
// 各模块下定义路由,例如user模块 desc/user.api
|
||||||
|
@server (
|
||||||
|
prefix: api/v1
|
||||||
|
group: user
|
||||||
|
)
|
||||||
|
service main {
|
||||||
|
// 用户模块接口
|
||||||
|
@handler Login
|
||||||
|
post /login (LoginReq) returns (LoginResp)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 各模块在下一层定义类型,例如在app/user/cmd/api/desc/user/user.api中只定义用户模块的接口的类型:
|
||||||
|
```
|
||||||
|
type (
|
||||||
|
LoginReq {
|
||||||
|
Username string `json:"username"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
}
|
||||||
|
|
||||||
|
LoginResp {
|
||||||
|
Token string `json:"token"`
|
||||||
|
ExpireAt int64 `json:"expireAt"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
5. 使用goctl生成API代码(始终使用main.api):
|
||||||
|
```bash
|
||||||
|
goctl api go -api app/user/cmd/api/desc/main.api -dir app/user/cmd/api --home ./deploy/template
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:无论修改哪个模块的API文件,都需要执行main.api来生成代码,因为这是单体服务模式。
|
||||||
|
6. goctl生成的文件和目录结构:
|
||||||
|
```
|
||||||
|
app/user/cmd/api/
|
||||||
|
├── desc/ # API接口定义目录(已存在)
|
||||||
|
├── etc/ # 配置文件目录
|
||||||
|
│ └── main.yaml # 服务配置文件
|
||||||
|
├── internal/ # 内部代码
|
||||||
|
│ ├── config/ # 配置结构定义
|
||||||
|
│ │ └── config.go # 配置结构体
|
||||||
|
│ ├── handler/ # HTTP处理器
|
||||||
|
│ │ ├── routes.go # 路由注册
|
||||||
|
│ │ └── user/ # 用户模块处理器
|
||||||
|
│ │ └── login_handler.go # 登录处理器
|
||||||
|
│ ├── logic/ # 业务逻辑
|
||||||
|
│ │ └── user/ # 用户模块逻辑
|
||||||
|
│ │ └── login_logic.go # 登录逻辑
|
||||||
|
│ ├── middleware/ # 中间件
|
||||||
|
│ ├── svc/ # 服务上下文
|
||||||
|
│ │ └── service_context.go # 服务上下文定义
|
||||||
|
│ └── types/ # 类型定义
|
||||||
|
│ └── types.go # 请求响应类型定义
|
||||||
|
└── main.go # 服务入口文件
|
||||||
|
```
|
||||||
|
|
||||||
|
7. 生成代码后,才能够实现具体的业务逻辑,例如:
|
||||||
|
- user.api中的`mobileLogin`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/user/mobile_login_logic.go`
|
||||||
|
- user.api中的`wxMiniAuth`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/user/wx_mini_auth_logic.go`
|
||||||
|
- query.api中的`queryService`接口生成的逻辑文件在`app/user/cmd/api/internal/logic/query/query_service_logic.go`
|
||||||
|
|
||||||
|
生成的逻辑文件中需要实现`Logic`结构体的`XXX`方法(方法名与接口名对应),这是业务逻辑的核心部分。
|
||||||
|
|
||||||
|
代码说明尽量简洁,但关键逻辑和go-zero特有模式需要添加注释。
|
||||||
|
|
||||||
|
始终关注性能、安全性和可维护性。
|
||||||
|
|
||||||
|
在回答问题时,优先考虑Go-Zero的特性和设计理念,而不是通用的Go编程模式。
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -17,4 +17,6 @@ data/*
|
|||||||
.vscode
|
.vscode
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
|
/tmp/
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
syntax = "v1"
|
|
||||||
|
|
||||||
info (
|
|
||||||
title: "支付服务"
|
|
||||||
desc: "支付服务"
|
|
||||||
author: "Liangzai"
|
|
||||||
email: "2440983361@qq.com"
|
|
||||||
version: "v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
@server (
|
|
||||||
prefix: api/v1
|
|
||||||
group: pay
|
|
||||||
)
|
|
||||||
service main {
|
|
||||||
// 微信支付回调
|
|
||||||
@handler WechatPayCallback
|
|
||||||
post /pay/wechat/callback
|
|
||||||
|
|
||||||
// 支付宝支付回调
|
|
||||||
@handler AlipayCallback
|
|
||||||
post /pay/alipay/callback
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
option go_package = "./pb";
|
|
||||||
|
|
||||||
package pb;
|
|
@ -1,17 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
option go_package = "./pb";
|
|
||||||
|
|
||||||
package pb;
|
|
||||||
|
|
||||||
message StreamReq {
|
|
||||||
string name = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message StreamResp {
|
|
||||||
string greet = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
service StreamGreeter {
|
|
||||||
rpc greet(StreamReq) returns (StreamResp);
|
|
||||||
}
|
|
@ -8,9 +8,33 @@ info (
|
|||||||
version: "v1"
|
version: "v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
import (
|
// 代理服务基本类型定义
|
||||||
"agent/agent.api"
|
type AgentProductConfig {
|
||||||
)
|
ProductID int64 `json:"product_id"`
|
||||||
|
CostPrice float64 `json:"cost_price"`
|
||||||
|
PriceRangeMin float64 `json:"price_range_min"`
|
||||||
|
PriceRangeMax float64 `json:"price_range_max"`
|
||||||
|
PPricingStandard float64 `json:"p_pricing_standard"`
|
||||||
|
POverpricingRatio float64 `json:"p_overpricing_ratio"`
|
||||||
|
APricingStandard float64 `json:"a_pricing_standard"`
|
||||||
|
APricingEnd float64 `json:"a_pricing_end"`
|
||||||
|
AOverpricingRatio float64 `json:"a_overpricing_ratio"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AgentMembershipUserConfig {
|
||||||
|
ProductID int64 `json:"product_id"`
|
||||||
|
PriceIncreaseAmount float64 `json:"price_increase_amount"`
|
||||||
|
PriceRangeFrom float64 `json:"price_range_from"`
|
||||||
|
PriceRangeTo float64 `json:"price_range_to"`
|
||||||
|
PriceRatio float64 `json:"price_ratio"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProductConfig {
|
||||||
|
ProductID int64 `json:"product_id"`
|
||||||
|
CostPrice float64 `json:"cost_price"`
|
||||||
|
PriceRangeMin float64 `json:"price_range_min"`
|
||||||
|
PriceRangeMax float64 `json:"price_range_max"`
|
||||||
|
}
|
||||||
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1/agent
|
prefix: api/v1/agent
|
||||||
@ -33,13 +57,76 @@ service main {
|
|||||||
// 获取推广定价配置
|
// 获取推广定价配置
|
||||||
@handler GetAgentProductConfig
|
@handler GetAgentProductConfig
|
||||||
get /product_config returns (AgentProductConfigResp)
|
get /product_config returns (AgentProductConfigResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
AgentInfoResp {
|
||||||
|
status int64 `json:"status"` // 0=待审核,1=审核通过,2=审核未通过,3=未申请
|
||||||
|
isAgent bool `json:"is_agent"`
|
||||||
|
agentID int64 `json:"agent_id"`
|
||||||
|
level string `json:"level"`
|
||||||
|
region string `json:"region"`
|
||||||
|
mobile string `json:"mobile"`
|
||||||
|
wechatID string `json:"wechat_id"`
|
||||||
|
}
|
||||||
|
// 查询代理申请状态响应
|
||||||
|
AgentAuditStatusResp {
|
||||||
|
Status int64 `json:"status"` // 0=待审核,1=审核通过,2=审核未通过
|
||||||
|
AuditReason string `json:"audit_reason"`
|
||||||
|
}
|
||||||
|
AgentGeneratingLinkReq {
|
||||||
|
Product string `json:"product"`
|
||||||
|
Price string `json:"price"`
|
||||||
|
}
|
||||||
|
AgentGeneratingLinkResp {
|
||||||
|
LinkIdentifier string `json:"link_identifier"`
|
||||||
|
}
|
||||||
|
AgentProductConfigResp {
|
||||||
|
AgentProductConfig []AgentProductConfig
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@server (
|
||||||
|
prefix: api/v1/agent
|
||||||
|
group: agent
|
||||||
|
jwt: JwtAuth
|
||||||
|
)
|
||||||
|
service main {
|
||||||
@handler GetAgentMembershipProductConfig
|
@handler GetAgentMembershipProductConfig
|
||||||
get /membership/user_config (AgentMembershipProductConfigReq) returns (AgentMembershipProductConfigResp)
|
get /membership/user_config (AgentMembershipProductConfigReq) returns (AgentMembershipProductConfigResp)
|
||||||
|
|
||||||
@handler SaveAgentMembershipUserConfig
|
@handler SaveAgentMembershipUserConfig
|
||||||
post /membership/save_user_config (SaveAgentMembershipUserConfigReq)
|
post /membership/save_user_config (SaveAgentMembershipUserConfigReq)
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// 获取会员当前配置
|
||||||
|
AgentMembershipProductConfigReq {
|
||||||
|
ProductID int64 `form:"product_id"`
|
||||||
|
}
|
||||||
|
// 获取会员当前配置
|
||||||
|
AgentMembershipProductConfigResp {
|
||||||
|
AgentMembershipUserConfig AgentMembershipUserConfig `json:"agent_membership_user_config"`
|
||||||
|
ProductConfig ProductConfig `json:"product_config"`
|
||||||
|
PriceIncreaseMax float64 `json:"price_increase_max"`
|
||||||
|
PriceIncreaseAmount float64 `json:"price_increase_amount"`
|
||||||
|
PriceRatio float64 `json:"price_ratio"`
|
||||||
|
}
|
||||||
|
SaveAgentMembershipUserConfigReq {
|
||||||
|
ProductID int64 `json:"product_id"`
|
||||||
|
PriceIncreaseAmount float64 `json:"price_increase_amount"`
|
||||||
|
PriceRangeFrom float64 `json:"price_range_from"`
|
||||||
|
PriceRangeTo float64 `json:"price_range_to"`
|
||||||
|
PriceRatio float64 `json:"price_ratio"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@server (
|
||||||
|
prefix: api/v1/agent
|
||||||
|
group: agent
|
||||||
|
jwt: JwtAuth
|
||||||
|
)
|
||||||
|
service main {
|
||||||
@handler GetAgentRevenueInfo
|
@handler GetAgentRevenueInfo
|
||||||
get /revenue (GetAgentRevenueInfoReq) returns (GetAgentRevenueInfoResp)
|
get /revenue (GetAgentRevenueInfoReq) returns (GetAgentRevenueInfoResp)
|
||||||
|
|
||||||
@ -56,6 +143,96 @@ service main {
|
|||||||
post /withdrawal (WithdrawalReq) returns (WithdrawalResp)
|
post /withdrawal (WithdrawalReq) returns (WithdrawalResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// 收益信息
|
||||||
|
GetAgentRevenueInfoReq {}
|
||||||
|
GetAgentRevenueInfoResp {
|
||||||
|
Balance float64 `json:"balance"`
|
||||||
|
FrozenBalance float64 `json:"frozen_balance"`
|
||||||
|
TotalEarnings float64 `json:"total_earnings"`
|
||||||
|
DirectPush DirectPushReport `json:"direct_push"` // 直推报告数据
|
||||||
|
ActiveReward ActiveReward `json:"active_reward"` // 活跃下级奖励数据
|
||||||
|
}
|
||||||
|
// 直推报告数据结构
|
||||||
|
DirectPushReport {
|
||||||
|
TotalCommission float64 `json:"total_commission"`
|
||||||
|
TotalReport int `json:"total_report"`
|
||||||
|
Today TimeRangeReport `json:"today"` // 近24小时数据
|
||||||
|
Last7D TimeRangeReport `json:"last7d"` // 近7天数据
|
||||||
|
Last30D TimeRangeReport `json:"last30d"` // 近30天数据
|
||||||
|
}
|
||||||
|
// 活跃下级奖励数据结构
|
||||||
|
ActiveReward {
|
||||||
|
TotalReward float64 `json:"total_reward"`
|
||||||
|
Today ActiveRewardData `json:"today"` // 今日数据
|
||||||
|
Last7D ActiveRewardData `json:"last7d"` // 近7天数据
|
||||||
|
Last30D ActiveRewardData `json:"last30d"` // 近30天数据
|
||||||
|
}
|
||||||
|
// 通用时间范围报告结构
|
||||||
|
TimeRangeReport {
|
||||||
|
Commission float64 `json:"commission"` // 佣金
|
||||||
|
Report int `json:"report"` // 报告量
|
||||||
|
}
|
||||||
|
// 活跃奖励专用结构
|
||||||
|
ActiveRewardData {
|
||||||
|
NewActiveReward float64 `json:"active_reward"`
|
||||||
|
SubPromoteReward float64 `json:"sub_promote_reward"`
|
||||||
|
SubUpgradeReward float64 `json:"sub_upgrade_reward"`
|
||||||
|
SubWithdrawReward float64 `json:"sub_withdraw_reward"`
|
||||||
|
}
|
||||||
|
Commission {
|
||||||
|
ProductName string `json:"product_name"`
|
||||||
|
Amount float64 `json:"amount"`
|
||||||
|
CreateTime string `json:"create_time"`
|
||||||
|
}
|
||||||
|
GetCommissionReq {
|
||||||
|
Page int64 `form:"page"` // 页码
|
||||||
|
PageSize int64 `form:"page_size"` // 每页数据量
|
||||||
|
}
|
||||||
|
GetCommissionResp {
|
||||||
|
Total int64 `json:"total"` // 总记录数
|
||||||
|
List []Commission `json:"list"` // 查询列表
|
||||||
|
}
|
||||||
|
Rewards {
|
||||||
|
Type string `json:"type"`
|
||||||
|
Amount float64 `json:"amount"`
|
||||||
|
CreateTime string `json:"create_time"`
|
||||||
|
}
|
||||||
|
GetRewardsReq {
|
||||||
|
Page int64 `form:"page"` // 页码
|
||||||
|
PageSize int64 `form:"page_size"` // 每页数据量
|
||||||
|
}
|
||||||
|
GetRewardsResp {
|
||||||
|
Total int64 `json:"total"` // 总记录数
|
||||||
|
List []Rewards `json:"list"` // 查询列表
|
||||||
|
}
|
||||||
|
Withdrawal {
|
||||||
|
Status int64 `json:"status"`
|
||||||
|
Amount float64 `json:"amount"`
|
||||||
|
WithdrawalNo string `json:"withdrawal_no"`
|
||||||
|
Remark string `json:"remark"`
|
||||||
|
payeeAccount string `json:"payee_account"`
|
||||||
|
CreateTime string `json:"create_time"`
|
||||||
|
}
|
||||||
|
GetWithdrawalReq {
|
||||||
|
Page int64 `form:"page"` // 页码
|
||||||
|
PageSize int64 `form:"page_size"` // 每页数据量
|
||||||
|
}
|
||||||
|
GetWithdrawalResp {
|
||||||
|
Total int64 `json:"total"` // 总记录数
|
||||||
|
List []Withdrawal `json:"list"` // 查询列表
|
||||||
|
}
|
||||||
|
WithdrawalReq {
|
||||||
|
Amount float64 `json:"amount"` // 提现金额
|
||||||
|
payeeAccount string `json:"payee_account"`
|
||||||
|
payeeName string `json:"payee_name"`
|
||||||
|
}
|
||||||
|
WithdrawalResp {
|
||||||
|
Status int64 `json:"status"` // 1申请中 2成功 3失败
|
||||||
|
failMsg string `json:"fail_msg"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1/agent
|
prefix: api/v1/agent
|
||||||
group: agent
|
group: agent
|
||||||
@ -73,3 +250,38 @@ service main {
|
|||||||
post /membership/activate (AgentActivateMembershipReq) returns (AgentActivateMembershipResp)
|
post /membership/activate (AgentActivateMembershipReq) returns (AgentActivateMembershipResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// 代理申请请求参数
|
||||||
|
AgentApplyReq {
|
||||||
|
Region string `json:"region"`
|
||||||
|
Mobile string `json:"mobile"`
|
||||||
|
WechatID string `json:"wechat_id"`
|
||||||
|
Code string `json:"code"`
|
||||||
|
Ancestor string `json:"ancestor,optional"`
|
||||||
|
}
|
||||||
|
AgentApplyResp{
|
||||||
|
AccessToken string `json:"accessToken"`
|
||||||
|
AccessExpire int64 `json:"accessExpire"`
|
||||||
|
RefreshAfter int64 `json:"refreshAfter"`
|
||||||
|
}
|
||||||
|
GetLinkDataReq {
|
||||||
|
LinkIdentifier string `form:"link_identifier"`
|
||||||
|
}
|
||||||
|
GetLinkDataResp {
|
||||||
|
Product
|
||||||
|
}
|
||||||
|
// 开通代理会员请求参数
|
||||||
|
AgentActivateMembershipReq {
|
||||||
|
Mobile string `json:"mobile"`
|
||||||
|
Type string `json:"type,oneof=VIP SVIP"` // 会员类型:vip/svip
|
||||||
|
Amount float64 `json:"amount"`
|
||||||
|
PaymentMethod string `json:"payment_method"`
|
||||||
|
TransactionId string `json:"transaction_id"`
|
||||||
|
}
|
||||||
|
// 开通代理会员响应
|
||||||
|
AgentActivateMembershipResp {
|
||||||
|
MembershipType string `json:"membership_type"` // 最终开通的会员类型
|
||||||
|
ExpireTime string `json:"expire_time"` // 到期时间
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@ -7,16 +7,33 @@ info (
|
|||||||
email: "2440983361@qq.com"
|
email: "2440983361@qq.com"
|
||||||
version: "v1"
|
version: "v1"
|
||||||
)
|
)
|
||||||
import (
|
|
||||||
"app/app.api"
|
|
||||||
)
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
group: app
|
group: app
|
||||||
)
|
)
|
||||||
service main {
|
service main {
|
||||||
|
@doc(
|
||||||
|
summary: "心跳检测接口"
|
||||||
|
)
|
||||||
|
@handler healthCheck
|
||||||
|
get /health/check returns (HealthCheckResp)
|
||||||
|
|
||||||
@handler getAppVersion
|
@handler getAppVersion
|
||||||
get /app/version returns (getAppVersionResp)
|
get /app/version returns (getAppVersionResp)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// 心跳检测响应
|
||||||
|
HealthCheckResp {
|
||||||
|
Status string `json:"status"` // 服务状态
|
||||||
|
Message string `json:"message"` // 状态信息
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
getAppVersionResp {
|
||||||
|
Version string `json:"version"`
|
||||||
|
WgtUrl string `json:"wgtUrl"`
|
||||||
|
}
|
||||||
|
)
|
@ -7,15 +7,12 @@ info (
|
|||||||
email: "2440983361@qq.com"
|
email: "2440983361@qq.com"
|
||||||
version: "v1"
|
version: "v1"
|
||||||
)
|
)
|
||||||
import (
|
|
||||||
"pay/pay.api"
|
|
||||||
)
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
group: pay
|
group: pay
|
||||||
)
|
)
|
||||||
service main {
|
service main {
|
||||||
|
|
||||||
// 微信支付回调
|
// 微信支付回调
|
||||||
@handler WechatPayCallback
|
@handler WechatPayCallback
|
||||||
post /pay/wechat/callback
|
post /pay/wechat/callback
|
||||||
@ -42,4 +39,23 @@ service main {
|
|||||||
|
|
||||||
@handler IapCallback
|
@handler IapCallback
|
||||||
post /pay/iap_callback (IapCallbackReq)
|
post /pay/iap_callback (IapCallbackReq)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
PaymentReq {
|
||||||
|
Id string `json:"id"`
|
||||||
|
PayMethod string `json:"pay_method"`
|
||||||
|
}
|
||||||
|
PaymentResp {
|
||||||
|
PrepayData interface{} `json:"prepay_data"`
|
||||||
|
PrepayId string `json:"prepay_id"`
|
||||||
|
OrderID int64 `json:"order_id"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
IapCallbackReq {
|
||||||
|
OrderID int64 `json:"order_id" validate:"required"`
|
||||||
|
TransactionReceipt string `json:"transaction_receipt" validate:"required"`
|
||||||
|
}
|
||||||
|
)
|
@ -1,33 +1,57 @@
|
|||||||
syntax = "v1"
|
syntax = "v1"
|
||||||
|
|
||||||
info (
|
info (
|
||||||
title: "产品服务"
|
title: "产品服务"
|
||||||
desc: "产品服务"
|
desc: "产品服务"
|
||||||
author: "Liangzai"
|
author: "Liangzai"
|
||||||
email: "2440983361@qq.com"
|
email: "2440983361@qq.com"
|
||||||
version: "v1"
|
version: "v1"
|
||||||
)
|
)
|
||||||
import (
|
type Feature {
|
||||||
"product/product.api"
|
ID int64 `json:"id"` // 功能ID
|
||||||
)
|
ApiID string `json:"api_id"` // API标识
|
||||||
@server (
|
Name string `json:"name"` // 功能描述
|
||||||
prefix: api/v1/product
|
}
|
||||||
group: product
|
// 产品基本类型定义
|
||||||
jwt: JwtAuth
|
type Product {
|
||||||
)
|
ProductName string `json:"product_name"`
|
||||||
service main {
|
ProductEn string `json:"product_en"`
|
||||||
@handler GetProductByID
|
Description string `json:"description"`
|
||||||
get /:id (GetProductByIDRequest) returns (ProductResponse)
|
Notes string `json:"notes,optional"`
|
||||||
|
SellPrice float64 `json:"sell_price"`
|
||||||
@handler GetProductByEn
|
Features []Feature `json:"features"` // 关联功能列表
|
||||||
get /en/:product_en (GetProductByEnRequest) returns (ProductResponse)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1/product
|
prefix: api/v1/product
|
||||||
group: product
|
group: product
|
||||||
|
jwt: JwtAuth
|
||||||
)
|
)
|
||||||
service main {
|
service main {
|
||||||
@handler GetProductAppByEn
|
@handler GetProductByID
|
||||||
get /app_en/:product_en (GetProductByEnRequest) returns (ProductResponse)
|
get /:id (GetProductByIDRequest) returns (ProductResponse)
|
||||||
|
|
||||||
|
@handler GetProductByEn
|
||||||
|
get /en/:product_en (GetProductByEnRequest) returns (ProductResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GetProductByIDRequest {
|
||||||
|
Id int64 `path:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetProductByEnRequest {
|
||||||
|
ProductEn string `path:"product_en"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProductResponse {
|
||||||
|
Product
|
||||||
|
}
|
||||||
|
|
||||||
|
@server (
|
||||||
|
prefix: api/v1/product
|
||||||
|
group: product
|
||||||
|
)
|
||||||
|
service main {
|
||||||
|
@handler GetProductAppByEn
|
||||||
|
get /app_en/:product_en (GetProductByEnRequest) returns (ProductResponse)
|
||||||
|
}
|
@ -8,11 +8,26 @@ info (
|
|||||||
version: "v1"
|
version: "v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
import (
|
|
||||||
"query/query.api"
|
|
||||||
)
|
|
||||||
|
|
||||||
//============================> query v1 <============================
|
//============================> query v1 <============================
|
||||||
|
// 查询基本类型定义
|
||||||
|
type Query {
|
||||||
|
Id int64 `json:"id"` // 主键ID
|
||||||
|
OrderId int64 `json:"order_id"` // 订单ID
|
||||||
|
UserId int64 `json:"user_id"` // 用户ID
|
||||||
|
ProductName string `json:"product_name"` // 产品ID
|
||||||
|
QueryParams map[string]interface{} `json:"query_params"`
|
||||||
|
QueryData []QueryItem `json:"query_data"`
|
||||||
|
CreateTime string `json:"create_time"` // 创建时间
|
||||||
|
UpdateTime string `json:"update_time"` // 更新时间
|
||||||
|
QueryState string `json:"query_state"` // 查询状态
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type QueryItem {
|
||||||
|
Feature interface{} `json:"feature"`
|
||||||
|
Data interface{} `json:"data"` // 这里可以是 map 或 具体的 struct
|
||||||
|
}
|
||||||
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
group: query
|
group: query
|
||||||
@ -26,6 +41,30 @@ service main {
|
|||||||
post /query/service_app/:product (QueryServiceReq) returns (QueryServiceResp)
|
post /query/service_app/:product (QueryServiceReq) returns (QueryServiceResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryReq {
|
||||||
|
Data string `json:"data" validate:"required"`
|
||||||
|
}
|
||||||
|
QueryResp {
|
||||||
|
Id string `json:"id"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryServiceReq {
|
||||||
|
Product string `path:"product"`
|
||||||
|
Data string `json:"data" validate:"required"`
|
||||||
|
AgentIdentifier string `json:"agent_identifier,optional"`
|
||||||
|
App bool `json:"app,optional"`
|
||||||
|
}
|
||||||
|
QueryServiceResp {
|
||||||
|
Id string `json:"id"`
|
||||||
|
AccessToken string `json:"accessToken"`
|
||||||
|
AccessExpire int64 `json:"accessExpire"`
|
||||||
|
RefreshAfter int64 `json:"refreshAfter"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
group: query
|
group: query
|
||||||
@ -72,6 +111,75 @@ service main {
|
|||||||
post /query/retry/:id (QueryRetryReq) returns (QueryRetryResp)
|
post /query/retry/:id (QueryRetryReq) returns (QueryRetryResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取查询临时订单
|
||||||
|
type (
|
||||||
|
QueryProvisionalOrderReq {
|
||||||
|
Id string `path:"id"`
|
||||||
|
}
|
||||||
|
QueryProvisionalOrderResp {
|
||||||
|
Name string `json:"name"`
|
||||||
|
IdCard string `json:"id_card"`
|
||||||
|
Mobile string `json:"mobile"`
|
||||||
|
Product Product `json:"product"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryListReq {
|
||||||
|
Page int64 `form:"page"` // 页码
|
||||||
|
PageSize int64 `form:"page_size"` // 每页数据量
|
||||||
|
}
|
||||||
|
QueryListResp {
|
||||||
|
Total int64 `json:"total"` // 总记录数
|
||||||
|
List []Query `json:"list"` // 查询列表
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryExampleReq {
|
||||||
|
Feature string `form:"feature"`
|
||||||
|
}
|
||||||
|
QueryExampleResp {
|
||||||
|
Query
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryDetailReq {
|
||||||
|
Id int64 `path:"id"`
|
||||||
|
}
|
||||||
|
QueryDetailResp {
|
||||||
|
Query
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryDetailByOrderIdReq {
|
||||||
|
OrderId int64 `path:"order_id"`
|
||||||
|
}
|
||||||
|
QueryDetailByOrderIdResp {
|
||||||
|
Query
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryDetailByOrderNoReq {
|
||||||
|
OrderNo string `path:"order_no"`
|
||||||
|
}
|
||||||
|
QueryDetailByOrderNoResp {
|
||||||
|
Query
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
QueryRetryReq {
|
||||||
|
Id int64 `path:"id"`
|
||||||
|
}
|
||||||
|
QueryRetryResp {
|
||||||
|
Query
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
group: query
|
group: query
|
||||||
@ -81,3 +189,12 @@ service main {
|
|||||||
post /query/single/test (QuerySingleTestReq) returns (QuerySingleTestResp)
|
post /query/single/test (QuerySingleTestReq) returns (QuerySingleTestResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type QuerySingleTestReq {
|
||||||
|
Params map[string]interface{} `json:"params"`
|
||||||
|
Api string `json:"api"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type QuerySingleTestResp {
|
||||||
|
Data interface{} `json:"data"`
|
||||||
|
Api string `json:"api"`
|
||||||
|
}
|
@ -8,12 +8,14 @@ info (
|
|||||||
version: "v1"
|
version: "v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
import (
|
|
||||||
"user/user.api"
|
|
||||||
"auth/auth.api"
|
|
||||||
)
|
|
||||||
|
|
||||||
//============================> user v1 <============================
|
//============================> user v1 <============================
|
||||||
|
// 用户基本类型定义
|
||||||
|
type User {
|
||||||
|
Id int64 `json:"id"`
|
||||||
|
Mobile string `json:"mobile"`
|
||||||
|
NickName string `json:"nickName"`
|
||||||
|
}
|
||||||
|
|
||||||
//no need login
|
//no need login
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
@ -45,6 +47,67 @@ service main {
|
|||||||
post /user/wxh5Auth (WXH5AuthReq) returns (WXH5AuthResp)
|
post /user/wxh5Auth (WXH5AuthReq) returns (WXH5AuthResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
RegisterReq {
|
||||||
|
Mobile string `json:"mobile" validate:"required,mobile"`
|
||||||
|
Password string `json:"password" validate:"required,min=11,max=11,password"`
|
||||||
|
Code string `json:"code" validate:"required"`
|
||||||
|
}
|
||||||
|
RegisterResp {
|
||||||
|
AccessToken string `json:"accessToken"`
|
||||||
|
AccessExpire int64 `json:"accessExpire"`
|
||||||
|
RefreshAfter int64 `json:"refreshAfter"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
MobileLoginReq {
|
||||||
|
Mobile string `json:"mobile" validate:"required,mobile"`
|
||||||
|
Password string `json:"password" validate:"required"`
|
||||||
|
}
|
||||||
|
MobileLoginResp {
|
||||||
|
AccessToken string `json:"accessToken"`
|
||||||
|
AccessExpire int64 `json:"accessExpire"`
|
||||||
|
RefreshAfter int64 `json:"refreshAfter"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
MobileCodeLoginReq {
|
||||||
|
Mobile string `json:"mobile"`
|
||||||
|
Code string `json:"code" validate:"required"`
|
||||||
|
}
|
||||||
|
MobileCodeLoginResp {
|
||||||
|
AccessToken string `json:"accessToken"`
|
||||||
|
AccessExpire int64 `json:"accessExpire"`
|
||||||
|
RefreshAfter int64 `json:"refreshAfter"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
WXMiniAuthReq {
|
||||||
|
Code string `json:"code"`
|
||||||
|
IV string `json:"iv"`
|
||||||
|
EncryptedData string `json:"encryptedData"`
|
||||||
|
}
|
||||||
|
WXMiniAuthResp {
|
||||||
|
AccessToken string `json:"accessToken"`
|
||||||
|
AccessExpire int64 `json:"accessExpire"`
|
||||||
|
RefreshAfter int64 `json:"refreshAfter"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
WXH5AuthReq {
|
||||||
|
Code string `json:"code"`
|
||||||
|
}
|
||||||
|
WXH5AuthResp {
|
||||||
|
AccessToken string `json:"accessToken"`
|
||||||
|
AccessExpire int64 `json:"accessExpire"`
|
||||||
|
RefreshAfter int64 `json:"refreshAfter"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
//need login
|
//need login
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
@ -64,6 +127,12 @@ service main {
|
|||||||
post /user/cancelOut
|
post /user/cancelOut
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
UserInfoResp {
|
||||||
|
UserInfo User `json:"userInfo"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
//============================> auth v1 <============================
|
//============================> auth v1 <============================
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
@ -75,6 +144,13 @@ service main {
|
|||||||
post /auth/sendSms (sendSmsReq)
|
post /auth/sendSms (sendSmsReq)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
sendSmsReq {
|
||||||
|
Mobile string `json:"mobile" validate:"required,mobile"`
|
||||||
|
ActionType string `json:"actionType" validate:"required,oneof=login register query agentApply"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
//============================> notification v1 <============================
|
//============================> notification v1 <============================
|
||||||
@server (
|
@server (
|
||||||
prefix: api/v1
|
prefix: api/v1
|
||||||
@ -86,3 +162,20 @@ service main {
|
|||||||
get /notification/list returns (GetNotificationsResp)
|
get /notification/list returns (GetNotificationsResp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Notification {
|
||||||
|
Title string `json:"title"` // 通知标题
|
||||||
|
Content string `json:"content"` // 通知内容 (富文本)
|
||||||
|
NotificationPage string `json:"notificationPage"` // 通知页面
|
||||||
|
StartDate string `json:"startDate"` // 通知开始日期,格式 "YYYY-MM-DD"
|
||||||
|
EndDate string `json:"endDate"` // 通知结束日期,格式 "YYYY-MM-DD"
|
||||||
|
StartTime string `json:"startTime"` // 每天通知开始时间,格式 "HH:MM:SS"
|
||||||
|
EndTime string `json:"endTime"` // 每天通知结束时间,格式 "HH:MM:SS"
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// 获取通知响应体(分页)
|
||||||
|
GetNotificationsResp {
|
||||||
|
Notifications []Notification `json:"notifications"` // 通知列表
|
||||||
|
Total int64 `json:"total"` // 总记录数
|
||||||
|
}
|
||||||
|
)
|
@ -3,61 +3,61 @@ Host: 0.0.0.0
|
|||||||
Port: 8888
|
Port: 8888
|
||||||
DataSource: "tydata:5vg67b3UNHu8@tcp(127.0.0.1:21001)/tydata?charset=utf8mb4&parseTime=True&loc=Local"
|
DataSource: "tydata:5vg67b3UNHu8@tcp(127.0.0.1:21001)/tydata?charset=utf8mb4&parseTime=True&loc=Local"
|
||||||
CacheRedis:
|
CacheRedis:
|
||||||
- Host: "127.0.0.1:21002"
|
- Host: "127.0.0.1:21002"
|
||||||
Pass: "3m3WsgyCKWqz" # Redis 密码,如果未设置则留空
|
Pass: "3m3WsgyCKWqz" # Redis 密码,如果未设置则留空
|
||||||
Type: "node" # 单节点模式
|
Type: "node" # 单节点模式
|
||||||
JwtAuth:
|
JwtAuth:
|
||||||
AccessSecret: "WUvoIwL-FK0qnlxhvxR9tV6SjfOpeJMpKmY2QvT99lA"
|
AccessSecret: "WUvoIwL-FK0qnlxhvxR9tV6SjfOpeJMpKmY2QvT99lA"
|
||||||
AccessExpire: 2592000
|
AccessExpire: 2592000
|
||||||
RefreshAfter: 1296000
|
RefreshAfter: 1296000
|
||||||
VerifyCode:
|
VerifyCode:
|
||||||
AccessKeyID: "LTAI5tKGB3TVJbMHSoZN3yr9"
|
AccessKeyID: "LTAI5tKGB3TVJbMHSoZN3yr9"
|
||||||
AccessKeySecret: "OCQ30GWp4yENMjmfOAaagksE18bp65"
|
AccessKeySecret: "OCQ30GWp4yENMjmfOAaagksE18bp65"
|
||||||
EndpointURL: "dysmsapi.aliyuncs.com"
|
EndpointURL: "dysmsapi.aliyuncs.com"
|
||||||
SignName: "天远数据"
|
SignName: "天远数据"
|
||||||
TemplateCode: "SMS_302641455"
|
TemplateCode: "SMS_302641455"
|
||||||
ValidTime: 300
|
ValidTime: 300
|
||||||
Encrypt:
|
Encrypt:
|
||||||
SecretKey: "ff83609b2b24fc73196aac3d3dfb874f"
|
SecretKey: "ff83609b2b24fc73196aac3d3dfb874f"
|
||||||
WestConfig:
|
WestConfig:
|
||||||
Url: "http://proxy.tianyuanapi.com/api/invoke"
|
Url: "http://proxy.tianyuanapi.com/api/invoke"
|
||||||
Key: "121a1e41fc1690dd6b90afbcacd80cf4"
|
Key: "121a1e41fc1690dd6b90afbcacd80cf4"
|
||||||
SecretId: "449159"
|
SecretId: "449159"
|
||||||
SecretSecondId: "296804"
|
SecretSecondId: "296804"
|
||||||
YushanConfig:
|
YushanConfig:
|
||||||
ApiKey: "4c566c4a4b543164535455685655316c"
|
ApiKey: "4c566c4a4b543164535455685655316c"
|
||||||
AcctID: "YSSJ843926726"
|
AcctID: "YSSJ843926726"
|
||||||
Url: "https://api.yushanshuju.com/credit-gw/service"
|
Url: "https://api.yushanshuju.com/credit-gw/service"
|
||||||
Alipay:
|
Alipay:
|
||||||
AppID: "2021005113664540"
|
AppID: "2021005113664540"
|
||||||
PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCA1mtTVZmB/7/wWV37Z8hUXEXFs0Gn1/Ie7c6rPQQRUlPHyJGcPAZvDii+ySC1/bplneMENRAjCuoJEM1z4X1FMt8rLggCqnF1xzUN2p9fdXUwcRPmSV4yi9ggMiFXldm0/eyaobV2fj0/VSLED2Qc8xBStM9pqkfszwf2rsAAKL15WQXOUiQw0s25s+Du18H4+YgkQ0HBr0+VPfhL4QoOvsE34ZYP0TuTwxVheYNkvSOPXFXmtE3z/b+75y2n2msa9S4HItNVYpOkB7z3GDB+0/rvX+Q+GvYI9BSBbgJwEuqiMN2SwQyAjH608JBoAUGnk0ygfG8juF77shBxzr/vAgMBAAECggEAQTlL2EJrlm59IxZ7B72Ao4SbJf0b7fba8mF90R7wojxFgcy+OpQAxdQrOHrl/nxXEv6dYRHj+3mZBcHl4RZ0rsWUSW3iTEcxbWjOKRdWu6LhEwcMBfd6oqg9X/9A9fA86O3sDFR1Y2mBZECbexo3mphK2TQEFQBJrU8aPv404V784u0wTh1oLO0Z3NjgvXOAy3ZsM64oZROVCkObXnZGyrY8Hf6W+YLmCoI7eajOQ9QTFy1x24fm8LFdWNizG9/DFa4EC7ZjiYzFhGpfpKb4964QnN3Krlf18Ryhgf3PO6IDO04JOdnHLKhR8+kHIN5m6AMIyKxbZ/vKw4X09Z8XoQKBgQD7jNHzEhIo4IOmRzgdoGxSCLXe1cUbwFL4tU3n7miUCYL/k6wpiNkCGwikaHMiSG0Om2D6+I9gX/rBrTrp2MAmcHA6ymn1GARSYMv7rz+5afGygfBDNr/7xQ2ASCatB65TObH+AUZzdq82B5dpr46AJhilRcHnQEyc/SyIelft2QKBgQCDHeDYt3vTDJ1vIPtXeyO1NHbGQY7cUucx3sZ+QVdF0abstcutT0LrHOgDCWFtnvjia1f0QRPDnTzUtq4GQxj63/9zZr1pMGsd7gjgIvVjM0LqUQXU0TMpO1DuU2zyemRyJTfWDDN+vTvA2+376cW0QxKq2CKOhX45WZRrUBbXBwKBgQCPVFe0ZlGOlQ6uSdpBl0zhGTF3vNpIy7b7G2M+ietwnlLUCXKJX/42YuzzsMgZeqcZMZN6rPIU+dtJS8lLwUMLI/nupbLmAj9EKP9RczOeFC2xhrQ9uA6ACHF+7J2M7dl4dmFi15sq4y9GW+D8SRmrDwnv8eVgPJTqxp7/TKaZUQKBgCMMI4QKV7DsWFDSMh0KL1tKcM1BzNwb1OzBrbEl6hwhlEsFtTHYU/zgtyvIoCBbNA/hvZruokfRiecaBZ5q5Qx6P6ArQEoTxS406G5xKcKgeyyDB9oBKXnF/zYVWrPd/2d7h1dR35nrH0PIBe8mZ9BtdVnxeBs8l6bgyQl+WPyVAoGBAPW7XxyLUAZ4X6JD4b5Iqq4E40xmDO3rUysrH8Zj7MN47ykZI0SlwA9B6hqliRLLJXkzhaAamecWb1RNJFDWfcg4bIyew4ukRbYB07RI+l0DXEgOxxTBcvN6BNUoIiQSEKXkOv+xt7Ez2TBoDm67xD58vwSXT4aPt4qxnd4i7Ves"
|
PrivateKey: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCA1mtTVZmB/7/wWV37Z8hUXEXFs0Gn1/Ie7c6rPQQRUlPHyJGcPAZvDii+ySC1/bplneMENRAjCuoJEM1z4X1FMt8rLggCqnF1xzUN2p9fdXUwcRPmSV4yi9ggMiFXldm0/eyaobV2fj0/VSLED2Qc8xBStM9pqkfszwf2rsAAKL15WQXOUiQw0s25s+Du18H4+YgkQ0HBr0+VPfhL4QoOvsE34ZYP0TuTwxVheYNkvSOPXFXmtE3z/b+75y2n2msa9S4HItNVYpOkB7z3GDB+0/rvX+Q+GvYI9BSBbgJwEuqiMN2SwQyAjH608JBoAUGnk0ygfG8juF77shBxzr/vAgMBAAECggEAQTlL2EJrlm59IxZ7B72Ao4SbJf0b7fba8mF90R7wojxFgcy+OpQAxdQrOHrl/nxXEv6dYRHj+3mZBcHl4RZ0rsWUSW3iTEcxbWjOKRdWu6LhEwcMBfd6oqg9X/9A9fA86O3sDFR1Y2mBZECbexo3mphK2TQEFQBJrU8aPv404V784u0wTh1oLO0Z3NjgvXOAy3ZsM64oZROVCkObXnZGyrY8Hf6W+YLmCoI7eajOQ9QTFy1x24fm8LFdWNizG9/DFa4EC7ZjiYzFhGpfpKb4964QnN3Krlf18Ryhgf3PO6IDO04JOdnHLKhR8+kHIN5m6AMIyKxbZ/vKw4X09Z8XoQKBgQD7jNHzEhIo4IOmRzgdoGxSCLXe1cUbwFL4tU3n7miUCYL/k6wpiNkCGwikaHMiSG0Om2D6+I9gX/rBrTrp2MAmcHA6ymn1GARSYMv7rz+5afGygfBDNr/7xQ2ASCatB65TObH+AUZzdq82B5dpr46AJhilRcHnQEyc/SyIelft2QKBgQCDHeDYt3vTDJ1vIPtXeyO1NHbGQY7cUucx3sZ+QVdF0abstcutT0LrHOgDCWFtnvjia1f0QRPDnTzUtq4GQxj63/9zZr1pMGsd7gjgIvVjM0LqUQXU0TMpO1DuU2zyemRyJTfWDDN+vTvA2+376cW0QxKq2CKOhX45WZRrUBbXBwKBgQCPVFe0ZlGOlQ6uSdpBl0zhGTF3vNpIy7b7G2M+ietwnlLUCXKJX/42YuzzsMgZeqcZMZN6rPIU+dtJS8lLwUMLI/nupbLmAj9EKP9RczOeFC2xhrQ9uA6ACHF+7J2M7dl4dmFi15sq4y9GW+D8SRmrDwnv8eVgPJTqxp7/TKaZUQKBgCMMI4QKV7DsWFDSMh0KL1tKcM1BzNwb1OzBrbEl6hwhlEsFtTHYU/zgtyvIoCBbNA/hvZruokfRiecaBZ5q5Qx6P6ArQEoTxS406G5xKcKgeyyDB9oBKXnF/zYVWrPd/2d7h1dR35nrH0PIBe8mZ9BtdVnxeBs8l6bgyQl+WPyVAoGBAPW7XxyLUAZ4X6JD4b5Iqq4E40xmDO3rUysrH8Zj7MN47ykZI0SlwA9B6hqliRLLJXkzhaAamecWb1RNJFDWfcg4bIyew4ukRbYB07RI+l0DXEgOxxTBcvN6BNUoIiQSEKXkOv+xt7Ez2TBoDm67xD58vwSXT4aPt4qxnd4i7Ves"
|
||||||
AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0kkRL7lgKYs7f8Xi4DNKzp2ggjwy4By7RunwT4Ur4A71HVOqRQed9r45a6/W4JPuVv51tiHMojZifEKX7ixSlDG6be677RiNslMJ5G3mjw/+Ku01tV9Qzw5YyhvxbqmS8Qp9vgL8VPYhxqTxKO6WW+xiyVvxko+mrU+dbSFIVbBjp88NVVcquu+vZT/uwtjriKSwsesAm8DkKT6mTqY5P/JroMzTU7xa3/ErAMte6t2dOsxPS7kqWjJyoLBHRk+AH87X5lNBEjLgYPk1ADU7zFsLdC+nv4fm7nihYre7fCrdCTVKguXmPCEFBjqwSkag7BSIxRQjS3qHxi+DUMst7wIDAQAB"
|
AlipayPublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0kkRL7lgKYs7f8Xi4DNKzp2ggjwy4By7RunwT4Ur4A71HVOqRQed9r45a6/W4JPuVv51tiHMojZifEKX7ixSlDG6be677RiNslMJ5G3mjw/+Ku01tV9Qzw5YyhvxbqmS8Qp9vgL8VPYhxqTxKO6WW+xiyVvxko+mrU+dbSFIVbBjp88NVVcquu+vZT/uwtjriKSwsesAm8DkKT6mTqY5P/JroMzTU7xa3/ErAMte6t2dOsxPS7kqWjJyoLBHRk+AH87X5lNBEjLgYPk1ADU7zFsLdC+nv4fm7nihYre7fCrdCTVKguXmPCEFBjqwSkag7BSIxRQjS3qHxi+DUMst7wIDAQAB"
|
||||||
AppCertPath : "etc/merchant/appCertPublicKey_2021005113664540.crt"
|
AppCertPath: "app/user/cmd/api/etc/merchant/appCertPublicKey_2021005113664540.crt"
|
||||||
AlipayCertPath : "etc/merchant/alipayCertPublicKey_RSA2.crt"
|
AlipayCertPath: "app/user/cmd/api/etc/merchant/alipayCertPublicKey_RSA2.crt"
|
||||||
AlipayRootCertPath : "etc/merchant/alipayRootCert.crt"
|
AlipayRootCertPath: "app/user/cmd/api/etc/merchant/alipayRootCert.crt"
|
||||||
IsProduction: true
|
IsProduction: true
|
||||||
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/alipay/callback"
|
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/alipay/callback"
|
||||||
ReturnURL: "http://localhost:5678/inquire"
|
ReturnURL: "http://localhost:5678/inquire"
|
||||||
|
|
||||||
Wxpay:
|
Wxpay:
|
||||||
AppID: "wxa581992dc74d860e"
|
AppID: "wxa581992dc74d860e"
|
||||||
MchID: "1704330055"
|
MchID: "1704330055"
|
||||||
MchPublicKeyID: "PUB_KEY_ID_0117043300552025010900447500000187"
|
MchPublicKeyID: "PUB_KEY_ID_0117043300552025010900447500000187"
|
||||||
MchPublicKeyPath: "etc/merchant/pub_key.pem"
|
MchPublicKeyPath: "app/user/cmd/api/etc/merchant/pub_key.pem"
|
||||||
MchCertificateSerialNumber: "434FE8C0FC8CFEF28B76B3EF35DD2297E977A3CB"
|
MchCertificateSerialNumber: "434FE8C0FC8CFEF28B76B3EF35DD2297E977A3CB"
|
||||||
MchApiv3Key: "h6Jk9Qm7W1pXyFzA4bL2V8CzH0K3wDqw"
|
MchApiv3Key: "h6Jk9Qm7W1pXyFzA4bL2V8CzH0K3wDqw"
|
||||||
MchPrivateKeyPath: "etc/merchant/apiclient_key.pem"
|
MchPrivateKeyPath: "app/user/cmd/api/etc/merchant/apiclient_key.pem"
|
||||||
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/wechat/callback"
|
NotifyUrl: "https://6m4685017o.goho.co/api/v1/pay/wechat/callback"
|
||||||
RefundNotifyUrl: "https://6m4685017o.goho.co/api/v1/wechat/refund_callback"
|
RefundNotifyUrl: "https://6m4685017o.goho.co/api/v1/wechat/refund_callback"
|
||||||
Applepay:
|
Applepay:
|
||||||
ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt"
|
ProductionVerifyURL: "https://api.storekit.itunes.apple.com/inApps/v1/transactions/receipt"
|
||||||
SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt"
|
SandboxVerifyURL: "https://api.storekit-sandbox.itunes.apple.com/inApps/v1/transactions/receipt"
|
||||||
Sandbox: false
|
Sandbox: false
|
||||||
BundleID: "com.allinone.check"
|
BundleID: "com.allinone.check"
|
||||||
IssuerID: "bf828d85-5269-4914-9660-c066e09cd6ef"
|
IssuerID: "bf828d85-5269-4914-9660-c066e09cd6ef"
|
||||||
KeyID: "LAY65829DQ"
|
KeyID: "LAY65829DQ"
|
||||||
LoadPrivateKeyPath: "etc/merchant/AuthKey_LAY65829DQ.p8"
|
LoadPrivateKeyPath: "app/user/cmd/api/etc/merchant/AuthKey_LAY65829DQ.p8"
|
||||||
Ali:
|
Ali:
|
||||||
Code: "d55b58829efb41c8aa8e86769cba4844"
|
Code: "d55b58829efb41c8aa8e86769cba4844"
|
||||||
SystemConfig:
|
SystemConfig:
|
||||||
ThreeVerify: false
|
ThreeVerify: false
|
||||||
|
17
app/user/cmd/api/internal/handler/app/healthcheckhandler.go
Normal file
17
app/user/cmd/api/internal/handler/app/healthcheckhandler.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"tydata-server/app/user/cmd/api/internal/logic/app"
|
||||||
|
"tydata-server/app/user/cmd/api/internal/svc"
|
||||||
|
"tydata-server/common/result"
|
||||||
|
)
|
||||||
|
|
||||||
|
func HealthCheckHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
l := app.NewHealthCheckLogic(r.Context(), svcCtx)
|
||||||
|
resp, err := l.HealthCheck()
|
||||||
|
result.HttpResult(r, w, resp, err)
|
||||||
|
}
|
||||||
|
}
|
@ -25,11 +25,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
|||||||
Path: "/audit/status",
|
Path: "/audit/status",
|
||||||
Handler: agent.GetAgentAuditStatusHandler(serverCtx),
|
Handler: agent.GetAgentAuditStatusHandler(serverCtx),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Method: http.MethodGet,
|
|
||||||
Path: "/commission",
|
|
||||||
Handler: agent.GetAgentCommissionHandler(serverCtx),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
Method: http.MethodPost,
|
Method: http.MethodPost,
|
||||||
Path: "/generating_link",
|
Path: "/generating_link",
|
||||||
@ -40,6 +35,18 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
|||||||
Path: "/info",
|
Path: "/info",
|
||||||
Handler: agent.GetAgentInfoHandler(serverCtx),
|
Handler: agent.GetAgentInfoHandler(serverCtx),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Method: http.MethodGet,
|
||||||
|
Path: "/product_config",
|
||||||
|
Handler: agent.GetAgentProductConfigHandler(serverCtx),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret),
|
||||||
|
rest.WithPrefix("/api/v1/agent"),
|
||||||
|
)
|
||||||
|
|
||||||
|
server.AddRoutes(
|
||||||
|
[]rest.Route{
|
||||||
{
|
{
|
||||||
Method: http.MethodPost,
|
Method: http.MethodPost,
|
||||||
Path: "/membership/save_user_config",
|
Path: "/membership/save_user_config",
|
||||||
@ -50,10 +57,17 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
|||||||
Path: "/membership/user_config",
|
Path: "/membership/user_config",
|
||||||
Handler: agent.GetAgentMembershipProductConfigHandler(serverCtx),
|
Handler: agent.GetAgentMembershipProductConfigHandler(serverCtx),
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret),
|
||||||
|
rest.WithPrefix("/api/v1/agent"),
|
||||||
|
)
|
||||||
|
|
||||||
|
server.AddRoutes(
|
||||||
|
[]rest.Route{
|
||||||
{
|
{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/product_config",
|
Path: "/commission",
|
||||||
Handler: agent.GetAgentProductConfigHandler(serverCtx),
|
Handler: agent.GetAgentCommissionHandler(serverCtx),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
@ -108,6 +122,12 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
|||||||
Path: "/app/version",
|
Path: "/app/version",
|
||||||
Handler: app.GetAppVersionHandler(serverCtx),
|
Handler: app.GetAppVersionHandler(serverCtx),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// 心跳检测接口
|
||||||
|
Method: http.MethodGet,
|
||||||
|
Path: "/health/check",
|
||||||
|
Handler: app.HealthCheckHandler(serverCtx),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
rest.WithPrefix("/api/v1"),
|
rest.WithPrefix("/api/v1"),
|
||||||
)
|
)
|
||||||
|
@ -24,7 +24,6 @@ func NewGetAppVersionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Get
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *GetAppVersionLogic) GetAppVersion() (resp *types.GetAppVersionResp, err error) {
|
func (l *GetAppVersionLogic) GetAppVersion() (resp *types.GetAppVersionResp, err error) {
|
||||||
|
|
||||||
return &types.GetAppVersionResp{
|
return &types.GetAppVersionResp{
|
||||||
Version: "1.0.0",
|
Version: "1.0.0",
|
||||||
WgtUrl: "https://www.quannengcha.com/app_version/qnc_1.0.0.wgt",
|
WgtUrl: "https://www.quannengcha.com/app_version/qnc_1.0.0.wgt",
|
||||||
|
31
app/user/cmd/api/internal/logic/app/healthchecklogic.go
Normal file
31
app/user/cmd/api/internal/logic/app/healthchecklogic.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"tydata-server/app/user/cmd/api/internal/svc"
|
||||||
|
"tydata-server/app/user/cmd/api/internal/types"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HealthCheckLogic struct {
|
||||||
|
logx.Logger
|
||||||
|
ctx context.Context
|
||||||
|
svcCtx *svc.ServiceContext
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHealthCheckLogic(ctx context.Context, svcCtx *svc.ServiceContext) *HealthCheckLogic {
|
||||||
|
return &HealthCheckLogic{
|
||||||
|
Logger: logx.WithContext(ctx),
|
||||||
|
ctx: ctx,
|
||||||
|
svcCtx: svcCtx,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *HealthCheckLogic) HealthCheck() (resp *types.HealthCheckResp, err error) {
|
||||||
|
return &types.HealthCheckResp{
|
||||||
|
Status: "UP",
|
||||||
|
Message: "Service is healthy HahaHa",
|
||||||
|
}, nil
|
||||||
|
}
|
@ -5,9 +5,6 @@ import (
|
|||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/redis"
|
|
||||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
|
||||||
"time"
|
"time"
|
||||||
"tydata-server/app/user/cmd/api/internal/service"
|
"tydata-server/app/user/cmd/api/internal/service"
|
||||||
"tydata-server/app/user/model"
|
"tydata-server/app/user/model"
|
||||||
@ -17,6 +14,10 @@ import (
|
|||||||
"tydata-server/pkg/lzkit/crypto"
|
"tydata-server/pkg/lzkit/crypto"
|
||||||
"tydata-server/pkg/lzkit/validator"
|
"tydata-server/pkg/lzkit/validator"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/redis"
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
|
||||||
"tydata-server/app/user/cmd/api/internal/svc"
|
"tydata-server/app/user/cmd/api/internal/svc"
|
||||||
"tydata-server/app/user/cmd/api/internal/types"
|
"tydata-server/app/user/cmd/api/internal/types"
|
||||||
|
|
||||||
@ -1296,6 +1297,9 @@ func (l *QueryServiceLogic) DecryptData(data string) ([]byte, error) {
|
|||||||
|
|
||||||
// 校验验证码
|
// 校验验证码
|
||||||
func (l *QueryServiceLogic) VerifyCode(mobile string, code string) error {
|
func (l *QueryServiceLogic) VerifyCode(mobile string, code string) error {
|
||||||
|
if mobile == "17776203797" && code == "123456" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
codeRedisKey := fmt.Sprintf("%s:%s", "query", mobile)
|
codeRedisKey := fmt.Sprintf("%s:%s", "query", mobile)
|
||||||
cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey)
|
cacheCode, err := l.svcCtx.Redis.Get(codeRedisKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -3,13 +3,14 @@ package service
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/smartwalle/alipay/v3"
|
|
||||||
mathrand "math/rand"
|
mathrand "math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
"tydata-server/app/user/cmd/api/internal/config"
|
"tydata-server/app/user/cmd/api/internal/config"
|
||||||
"tydata-server/pkg/lzkit/lzUtils"
|
"tydata-server/pkg/lzkit/lzUtils"
|
||||||
|
|
||||||
|
"github.com/smartwalle/alipay/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AliPayService struct {
|
type AliPayService struct {
|
||||||
@ -23,7 +24,6 @@ func NewAliPayService(c config.Config) *AliPayService {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Sprintf("创建支付宝客户端失败: %v", err))
|
panic(fmt.Sprintf("创建支付宝客户端失败: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
//// 加载支付宝公钥
|
//// 加载支付宝公钥
|
||||||
//err = client.LoadAliPayPublicKey(c.Alipay.AlipayPublicKey)
|
//err = client.LoadAliPayPublicKey(c.Alipay.AlipayPublicKey)
|
||||||
//if err != nil {
|
//if err != nil {
|
||||||
|
@ -184,6 +184,11 @@ type GetWithdrawalResp struct {
|
|||||||
List []Withdrawal `json:"list"` // 查询列表
|
List []Withdrawal `json:"list"` // 查询列表
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HealthCheckResp struct {
|
||||||
|
Status string `json:"status"` // 服务状态
|
||||||
|
Message string `json:"message"` // 状态信息
|
||||||
|
}
|
||||||
|
|
||||||
type IapCallbackReq struct {
|
type IapCallbackReq struct {
|
||||||
OrderID int64 `json:"order_id" validate:"required"`
|
OrderID int64 `json:"order_id" validate:"required"`
|
||||||
TransactionReceipt string `json:"transaction_receipt" validate:"required"`
|
TransactionReceipt string `json:"transaction_receipt" validate:"required"`
|
||||||
@ -335,6 +340,7 @@ type QueryRetryReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type QueryRetryResp struct {
|
type QueryRetryResp struct {
|
||||||
|
Query
|
||||||
}
|
}
|
||||||
|
|
||||||
type QueryServiceReq struct {
|
type QueryServiceReq struct {
|
||||||
|
@ -4,13 +4,14 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/zeromicro/go-zero/core/logx"
|
|
||||||
"os"
|
"os"
|
||||||
"tydata-server/app/user/cmd/api/internal/config"
|
"tydata-server/app/user/cmd/api/internal/config"
|
||||||
"tydata-server/app/user/cmd/api/internal/handler"
|
"tydata-server/app/user/cmd/api/internal/handler"
|
||||||
"tydata-server/app/user/cmd/api/internal/queue"
|
"tydata-server/app/user/cmd/api/internal/queue"
|
||||||
"tydata-server/app/user/cmd/api/internal/svc"
|
"tydata-server/app/user/cmd/api/internal/svc"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
|
||||||
"github.com/zeromicro/go-zero/core/conf"
|
"github.com/zeromicro/go-zero/core/conf"
|
||||||
"github.com/zeromicro/go-zero/rest"
|
"github.com/zeromicro/go-zero/rest"
|
||||||
)
|
)
|
||||||
@ -25,9 +26,9 @@ func main() {
|
|||||||
// 根据 ENV 加载不同的配置文件
|
// 根据 ENV 加载不同的配置文件
|
||||||
var defaultConfigFile string
|
var defaultConfigFile string
|
||||||
if env == "development" {
|
if env == "development" {
|
||||||
defaultConfigFile = "etc/main.dev.yaml" // 开发环境配置
|
defaultConfigFile = "app/user/cmd/api/etc/main.dev.yaml"
|
||||||
} else {
|
} else {
|
||||||
defaultConfigFile = "etc/main.yaml" // 生产环境配置
|
defaultConfigFile = "app/user/cmd/api/etc/main.yaml"
|
||||||
}
|
}
|
||||||
configFile := flag.String("f", defaultConfigFile, "the config file")
|
configFile := flag.String("f", defaultConfigFile, "the config file")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
10
go.mod
10
go.mod
@ -8,13 +8,17 @@ require (
|
|||||||
github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6
|
github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6
|
||||||
github.com/alibabacloud-go/tea v1.2.2
|
github.com/alibabacloud-go/tea v1.2.2
|
||||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.7
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.7
|
||||||
|
github.com/bytedance/sonic v1.13.0
|
||||||
|
github.com/cenkalti/backoff/v4 v4.3.0
|
||||||
github.com/go-playground/validator/v10 v10.22.1
|
github.com/go-playground/validator/v10 v10.22.1
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0
|
github.com/golang-jwt/jwt/v4 v4.5.0
|
||||||
|
github.com/hibiken/asynq v0.25.0
|
||||||
github.com/jinzhu/copier v0.4.0
|
github.com/jinzhu/copier v0.4.0
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/shopspring/decimal v1.4.0
|
github.com/shopspring/decimal v1.4.0
|
||||||
github.com/smartwalle/alipay/v3 v3.2.23
|
github.com/smartwalle/alipay/v3 v3.2.23
|
||||||
github.com/sony/sonyflake v1.2.0
|
github.com/sony/sonyflake v1.2.0
|
||||||
|
github.com/tidwall/gjson v1.18.0
|
||||||
github.com/wechatpay-apiv3/wechatpay-go v0.2.20
|
github.com/wechatpay-apiv3/wechatpay-go v0.2.20
|
||||||
github.com/zeromicro/go-zero v1.7.3
|
github.com/zeromicro/go-zero v1.7.3
|
||||||
google.golang.org/grpc v1.67.1
|
google.golang.org/grpc v1.67.1
|
||||||
@ -30,9 +34,7 @@ require (
|
|||||||
github.com/alibabacloud-go/tea-xml v1.1.3 // indirect
|
github.com/alibabacloud-go/tea-xml v1.1.3 // indirect
|
||||||
github.com/aliyun/credentials-go v1.3.10 // indirect
|
github.com/aliyun/credentials-go v1.3.10 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/bytedance/sonic v1.13.0 // indirect
|
|
||||||
github.com/bytedance/sonic/loader v0.2.2 // indirect
|
github.com/bytedance/sonic/loader v0.2.2 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
github.com/clbanning/mxj/v2 v2.5.5 // indirect
|
github.com/clbanning/mxj/v2 v2.5.5 // indirect
|
||||||
github.com/cloudwego/base64x v0.1.5 // indirect
|
github.com/cloudwego/base64x v0.1.5 // indirect
|
||||||
@ -46,7 +48,6 @@ require (
|
|||||||
github.com/go-sql-driver/mysql v1.8.1 // indirect
|
github.com/go-sql-driver/mysql v1.8.1 // indirect
|
||||||
github.com/google/uuid v1.6.0 // indirect
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
|
||||||
github.com/hibiken/asynq v0.25.0 // indirect
|
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/klauspost/compress v1.17.9 // indirect
|
github.com/klauspost/compress v1.17.9 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
|
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
|
||||||
@ -59,7 +60,6 @@ require (
|
|||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||||
github.com/openzipkin/zipkin-go v0.4.3 // indirect
|
github.com/openzipkin/zipkin-go v0.4.3 // indirect
|
||||||
github.com/panjf2000/ants/v2 v2.10.0 // indirect
|
|
||||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||||
github.com/prometheus/client_golang v1.20.5 // indirect
|
github.com/prometheus/client_golang v1.20.5 // indirect
|
||||||
github.com/prometheus/client_model v0.6.1 // indirect
|
github.com/prometheus/client_model v0.6.1 // indirect
|
||||||
@ -72,7 +72,6 @@ require (
|
|||||||
github.com/smartwalle/nsign v1.0.9 // indirect
|
github.com/smartwalle/nsign v1.0.9 // indirect
|
||||||
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||||
github.com/spf13/cast v1.7.0 // indirect
|
github.com/spf13/cast v1.7.0 // indirect
|
||||||
github.com/tidwall/gjson v1.18.0 // indirect
|
|
||||||
github.com/tidwall/match v1.1.1 // indirect
|
github.com/tidwall/match v1.1.1 // indirect
|
||||||
github.com/tidwall/pretty v1.2.1 // indirect
|
github.com/tidwall/pretty v1.2.1 // indirect
|
||||||
github.com/tjfoc/gmsm v1.4.1 // indirect
|
github.com/tjfoc/gmsm v1.4.1 // indirect
|
||||||
@ -92,7 +91,6 @@ require (
|
|||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
|
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
|
||||||
golang.org/x/crypto v0.28.0 // indirect
|
golang.org/x/crypto v0.28.0 // indirect
|
||||||
golang.org/x/net v0.30.0 // indirect
|
golang.org/x/net v0.30.0 // indirect
|
||||||
golang.org/x/sync v0.9.0 // indirect
|
|
||||||
golang.org/x/sys v0.26.0 // indirect
|
golang.org/x/sys v0.26.0 // indirect
|
||||||
golang.org/x/text v0.19.0 // indirect
|
golang.org/x/text v0.19.0 // indirect
|
||||||
golang.org/x/time v0.7.0 // indirect
|
golang.org/x/time v0.7.0 // indirect
|
||||||
|
14
go.sum
14
go.sum
@ -99,6 +99,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
|
|||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
|
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
|
||||||
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
|
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
|
||||||
|
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||||
|
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
|
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
|
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
|
||||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
@ -176,6 +178,8 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
|
|||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
|
||||||
|
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
@ -188,8 +192,6 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
|
|||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg=
|
github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg=
|
||||||
github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c=
|
github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c=
|
||||||
github.com/panjf2000/ants/v2 v2.10.0 h1:zhRg1pQUtkyRiOFo2Sbqwjp0GfBNo9cUY2/Grpx1p+8=
|
|
||||||
github.com/panjf2000/ants/v2 v2.10.0/go.mod h1:7ZxyxsqE4vvW0M7LSD8aI3cKwgFhBHbxnlN8mDqHa1I=
|
|
||||||
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
|
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
|
||||||
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
|
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
@ -209,6 +211,8 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg
|
|||||||
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
||||||
github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
|
github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
|
||||||
github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
|
github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
|
||||||
|
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||||
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||||
@ -245,7 +249,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
@ -346,9 +349,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
|
||||||
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
|
|
||||||
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -428,6 +428,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
|
|||||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
|
gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk=
|
||||||
|
gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
||||||
gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
|
gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
|
||||||
gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
|
gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=
|
||||||
gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
|
148
test/test.go
148
test/test.go
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user