修复参数
This commit is contained in:
parent
1009d706a6
commit
0ed44a09d7
|
@ -81,3 +81,8 @@ docker build -t <your-docker-image-name> .
|
|||
# run
|
||||
docker run --rm -p 8000:8000 -p 9000:9000 -v </path/to/your/configs>:/data/conf <your-docker-image-name>
|
||||
```
|
||||
---
|
||||
|
||||
```shell
|
||||
swag init -g cmd/manage/main.go
|
||||
```
|
|
@ -54,7 +54,7 @@ func (s *ClassUsecase) Delete(ctx context.Context, req *pb.DeleteClassRequest) (
|
|||
|
||||
if err := s.repo.DeleteClass(req.ClassId); err != nil {
|
||||
reply.Code = 400
|
||||
reply.Msg = fmt.Sprintf("删除失败(%v)", err)
|
||||
reply.Msg = fmt.Sprintf("删除失败:%v", err)
|
||||
}
|
||||
|
||||
return reply, nil
|
||||
|
@ -74,7 +74,7 @@ func (s *ClassUsecase) Update(ctx context.Context, req *pb.UpdateClassRequest) (
|
|||
TeacherID: req.TeacherId,
|
||||
}, req.ClassId); err != nil {
|
||||
reply.Code = 400
|
||||
reply.Msg = fmt.Sprintf("更新失败(%v)", err)
|
||||
reply.Msg = fmt.Sprintf("更新失败:%v", err)
|
||||
}
|
||||
|
||||
return reply, nil
|
||||
|
@ -91,7 +91,7 @@ func (s *ClassUsecase) Get(ctx context.Context, req *pb.GetClassRequest) (*pb.Ge
|
|||
|
||||
if info, err := s.repo.GetClassInfo(req.ClassId); err != nil {
|
||||
reply.Code = 400
|
||||
reply.Msg = fmt.Sprintf("查询失败(%v)", err)
|
||||
reply.Msg = fmt.Sprintf("查询失败:%v", err)
|
||||
} else {
|
||||
reply.ClassInfo = &pb.ClassInfo{
|
||||
TeacherId: info.TeacherID,
|
||||
|
|
|
@ -48,7 +48,7 @@ func (repo *classRepo) CreateClass(request *biz.CreateClassRequest) (*biz.Create
|
|||
result := repo.data.Mysql.Where("class_name = ?", request.ClassName).First(existingClass)
|
||||
|
||||
if result.Error == nil {
|
||||
return nil, fmt.Errorf("班级名称 '%s' 已经存在", request.ClassName)
|
||||
return nil, fmt.Errorf("班级%s已经存在", request.ClassName)
|
||||
} else if result.Error != gorm.ErrRecordNotFound {
|
||||
return nil, result.Error
|
||||
}
|
||||
|
@ -74,10 +74,10 @@ func (repo *classRepo) CreateClass(request *biz.CreateClassRequest) (*biz.Create
|
|||
func (repo *classRepo) DeleteClass(classID string) error {
|
||||
result := repo.data.Mysql.Where("class_id = ?", classID).Delete(&biz.Class{})
|
||||
if result.Error != nil {
|
||||
return fmt.Errorf("删除班级 '%s' 失败:%v", classID, result.Error)
|
||||
return fmt.Errorf("删除失败:%s-%v", classID, result.Error)
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return fmt.Errorf("班级 '%s' 不存在", classID)
|
||||
return fmt.Errorf("班级不存在")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -91,10 +91,10 @@ func (repo *classRepo) UpdateClass(request *biz.CreateClassRequest, classID stri
|
|||
|
||||
result := repo.data.Mysql.Model(tmp).Where("class_id = ?", classID).Updates(tmp)
|
||||
if result.Error != nil {
|
||||
return fmt.Errorf("更新班级 '%s' 失败:%v", classID, result.Error)
|
||||
return fmt.Errorf("更新班级失败-%v", result.Error)
|
||||
}
|
||||
if result.RowsAffected == 0 {
|
||||
return fmt.Errorf("班级 '%s' 不存在", classID)
|
||||
return fmt.Errorf("班级不存在")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ func (repo *classRepo) GetClassInfo(classID string) (*biz.GetClassResponse, erro
|
|||
if result.RowsAffected == 0 {
|
||||
return nil, fmt.Errorf("班级不存在")
|
||||
}
|
||||
|
||||
|
||||
return &biz.GetClassResponse{
|
||||
ClassID: classInfo.ClassId,
|
||||
ClassName: classInfo.ClassName,
|
||||
|
|
|
@ -14,7 +14,7 @@ func NewCourseUse(repo CourseRepo, logger log.Logger) *CourseCase {
|
|||
func (c *CourseCase) Create(ctx context.Context, req *pb.CreateCourseRequest) (*pb.CreateCourseResponse, error) {
|
||||
|
||||
// 初始化
|
||||
reply := &pb.CreateCourseResponse{Code: 200, Msg: "创建成功"}
|
||||
reply := &pb.CreateCourseResponse{Code: 200, Msg: "考试创建成功"}
|
||||
// 构造
|
||||
resp, err := c.repo.CreateCourse(&CreateCourseRequest{
|
||||
CourseName: req.CourseName,
|
||||
|
@ -31,7 +31,7 @@ func (c *CourseCase) Create(ctx context.Context, req *pb.CreateCourseRequest) (*
|
|||
func (c *CourseCase) Delete(ctx context.Context, req *pb.DeleteCourseRequest) (*pb.DeleteCourseResponse, error) {
|
||||
|
||||
// 初始化
|
||||
reply := &pb.DeleteCourseResponse{Code: 200, Msg: "删除成功"}
|
||||
reply := &pb.DeleteCourseResponse{Code: 200, Msg: "考试删除成功"}
|
||||
// 构造
|
||||
err := c.repo.DeleteCourse(req.CourseId)
|
||||
if err != nil {
|
||||
|
@ -43,7 +43,7 @@ func (c *CourseCase) Delete(ctx context.Context, req *pb.DeleteCourseRequest) (*
|
|||
func (c *CourseCase) Update(ctx context.Context, req *pb.UpdateCourseRequest) (*pb.UpdateCourseResponse, error) {
|
||||
|
||||
// 初始化
|
||||
reply := &pb.UpdateCourseResponse{Code: 200, Msg: "更新成功"}
|
||||
reply := &pb.UpdateCourseResponse{Code: 200, Msg: "考试更新成功"}
|
||||
// 构造
|
||||
err := c.repo.UpdateCourse(&CreateCourseRequest{
|
||||
CourseName: req.CourseName,
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
|
||||
// Exam 定义考试结构体
|
||||
type Exam struct {
|
||||
ExamID string `json:"exam_id" gorm:"type:string(11);not null;primaryKey;comment:考试ID"`
|
||||
ExamID string `gorm:"type:string(11);not null;primaryKey;column:exam_id;comment:考试ID" json:"exam_id"`
|
||||
ExamName string `json:"exam_name" gorm:"comment:考试名称"`
|
||||
ExamTime string `json:"exam_time" gorm:"comment:考试时间"`
|
||||
ExamContent string `json:"exam_content" gorm:"comment:考试内容"`
|
||||
|
|
|
@ -28,7 +28,7 @@ func (s *ExamUsecase) Create(ctx context.Context, req *pb.CreateExamRequest) (*p
|
|||
if err != nil {
|
||||
reply.Code = 400
|
||||
reply.Msg = err.Error()
|
||||
echo.Warnf("创建错误: %v", err)
|
||||
echo.Warnf("创建错误:%v", err)
|
||||
} else {
|
||||
reply.ExamId = resp.ExamID
|
||||
reply.Msg = resp.Message
|
||||
|
|
|
@ -28,7 +28,7 @@ data:
|
|||
min_idle_conns: 10
|
||||
max_retries: 3
|
||||
jwt:
|
||||
expiration: 20
|
||||
expiration: 120
|
||||
secretKey: 'online-ceremony'
|
||||
|
||||
# 服务发现
|
||||
|
|
|
@ -51,7 +51,7 @@ const docTemplate = `{
|
|||
"post": {
|
||||
"description": "用户注册接口",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
"application/x-www-form-urlencoded"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
"post": {
|
||||
"description": "用户注册接口",
|
||||
"consumes": [
|
||||
"application/json"
|
||||
"application/x-www-form-urlencoded"
|
||||
],
|
||||
"produces": [
|
||||
"application/json"
|
||||
|
|
|
@ -31,7 +31,7 @@ paths:
|
|||
/register:
|
||||
post:
|
||||
consumes:
|
||||
- application/json
|
||||
- application/x-www-form-urlencoded
|
||||
description: 用户注册接口
|
||||
parameters:
|
||||
- description: 用户名
|
||||
|
|
19
go.mod
19
go.mod
|
@ -3,7 +3,7 @@ module manage
|
|||
go 1.21
|
||||
|
||||
require (
|
||||
github.com/Fromsko/gouitls v1.2.2
|
||||
github.com/Fromsko/gouitls v1.2.7
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||
github.com/duke-git/lancet v1.4.2
|
||||
github.com/gin-contrib/static v0.0.1
|
||||
|
@ -16,6 +16,9 @@ require (
|
|||
github.com/panjf2000/ants/v2 v2.9.0
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/swaggo/files v1.0.1
|
||||
github.com/swaggo/gin-swagger v1.6.0
|
||||
github.com/swaggo/swag v1.16.2
|
||||
go.opentelemetry.io/otel v1.22.0
|
||||
go.uber.org/automaxprocs v1.5.3
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac
|
||||
|
@ -27,18 +30,14 @@ require (
|
|||
|
||||
require (
|
||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||
github.com/PuerkitoBio/purell v1.2.1 // indirect
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
||||
github.com/bytedance/sonic v1.10.2 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
||||
github.com/chenzhuoyu/iasm v0.9.1 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/fatih/color v1.16.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||
github.com/gin-contrib/gzip v0.0.6 // indirect
|
||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||
github.com/go-kratos/aegis v0.2.0 // indirect
|
||||
github.com/go-logr/logr v1.4.1 // indirect
|
||||
|
@ -71,18 +70,10 @@ require (
|
|||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.1.1 // indirect
|
||||
github.com/rogpeppe/go-internal v1.11.0 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
|
||||
github.com/swaggo/files v1.0.1 // indirect
|
||||
github.com/swaggo/gin-swagger v1.6.0 // indirect
|
||||
github.com/swaggo/swag v1.16.2 // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.13 // indirect
|
||||
github.com/tklauser/numcpus v0.7.0 // indirect
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||
github.com/urfave/cli/v2 v2.27.1 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.22.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.22.0 // indirect
|
||||
|
@ -95,7 +86,5 @@ require (
|
|||
golang.org/x/tools v0.17.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
sigs.k8s.io/yaml v1.4.0 // indirect
|
||||
)
|
||||
|
|
102
go.sum
102
go.sum
|
@ -1,16 +1,8 @@
|
|||
github.com/Fromsko/gouitls v1.2.1 h1:daH5eur5NsDoG00NpuLXr38EhUT9DvH2mjiyZnvHWKI=
|
||||
github.com/Fromsko/gouitls v1.2.1/go.mod h1:pnx9wA17MZUcP8T93DL+CH++RPCVX/SVByCJjW5mJO0=
|
||||
github.com/Fromsko/gouitls v1.2.2 h1:YE9k2D1RrJckPd9UPX/wF/OwRqqFySYir2fRFArIl8E=
|
||||
github.com/Fromsko/gouitls v1.2.2/go.mod h1:pnx9wA17MZUcP8T93DL+CH++RPCVX/SVByCJjW5mJO0=
|
||||
github.com/Fromsko/gouitls v1.2.7 h1:clBl9mvELvV0ls6mxhqFPLDhJb5J3Db4+beR5TL93UY=
|
||||
github.com/Fromsko/gouitls v1.2.7/go.mod h1:pnx9wA17MZUcP8T93DL+CH++RPCVX/SVByCJjW5mJO0=
|
||||
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
|
||||
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
|
||||
github.com/PuerkitoBio/purell v1.2.1 h1:QsZ4TjvwiMpat6gBCBxEQI0rcS9ehtkKtSpiUnd9N28=
|
||||
github.com/PuerkitoBio/purell v1.2.1/go.mod h1:ZwHcC/82TOaovDi//J/804umJFFmbOHPngi8iYYv/Eo=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
||||
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
|
||||
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
|
||||
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
|
||||
github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE=
|
||||
github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
|
||||
|
@ -20,7 +12,6 @@ github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
|
|||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
|
||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA=
|
||||
|
@ -32,9 +23,6 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
|
|||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
|
||||
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
|
@ -54,8 +42,6 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
|
|||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
|
||||
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
|
||||
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/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4=
|
||||
|
@ -65,7 +51,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
|
|||
github.com/gin-contrib/static v0.0.1 h1:JVxuvHPuUfkoul12N7dtQw7KRn/pSMq7Ue1Va9Swm1U=
|
||||
github.com/gin-contrib/static v0.0.1/go.mod h1:CSxeF+wep05e0kCOsqWdAWbSszmc31zTIbD8TvWl7Hs=
|
||||
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
|
||||
github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
|
||||
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
|
||||
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
|
||||
github.com/go-kratos/aegis v0.2.0 h1:dObzCDWn3XVjUkgxyBp6ZeWtx/do0DPZ7LY3yNSJLUQ=
|
||||
|
@ -73,13 +58,10 @@ github.com/go-kratos/aegis v0.2.0/go.mod h1:v0R2m73WgEEYB3XYu6aE2WcMwsZkJ/Rzuf5e
|
|||
github.com/go-kratos/kratos/v2 v2.7.2 h1:WVPGFNLKpv+0odMnCPxM4ZHa2hy9I5FOnwpG3Vv4w5c=
|
||||
github.com/go-kratos/kratos/v2 v2.7.2/go.mod h1:rppuc8+pGL2UtXA29bgFHWKqaaF6b6GB2XIYiDvFBRk=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
|
||||
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
|
||||
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
|
||||
|
@ -97,17 +79,12 @@ github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvSc
|
|||
github.com/go-playground/form/v4 v4.2.1 h1:HjdRDKO0fftVMU5epjPW2SOREcZ6/wLUzEobqUGJuPw=
|
||||
github.com/go-playground/form/v4 v4.2.1/go.mod h1:q1a2BY+AQUUzhl6xA/6hBetay6dEIhMHjgvJiGo6K7U=
|
||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
|
||||
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
|
||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
|
||||
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
|
||||
github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
|
||||
github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
||||
github.com/go-playground/validator/v10 v10.17.0 h1:SmVVlfAOtlZncTxRuinDPomC2DkXJ4E5T9gDA0AIH74=
|
||||
github.com/go-playground/validator/v10 v10.17.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
||||
github.com/go-redis/redis/extra/rediscmd/v8 v8.11.5 h1:ftG8tp8SG81xyuL2woNEx5t2RZ8mOJuC2+tumi+/NR8=
|
||||
|
@ -120,7 +97,6 @@ github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9
|
|||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
|
@ -141,14 +117,11 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
|
|||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
|
||||
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
|
||||
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
|
||||
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8=
|
||||
|
@ -171,22 +144,14 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
|
|||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
|
||||
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
|
||||
github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc=
|
||||
github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
|
||||
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||
|
@ -194,7 +159,6 @@ github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ
|
|||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
|
||||
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/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
|
@ -220,26 +184,16 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
|||
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
|
||||
github.com/panjf2000/ants/v2 v2.9.0 h1:SztCLkVxBRigbg+vt0S5QvF5vxAbxbKt09/YfAJ0tEo=
|
||||
github.com/panjf2000/ants/v2 v2.9.0/go.mod h1:7ZxyxsqE4vvW0M7LSD8aI3cKwgFhBHbxnlN8mDqHa1I=
|
||||
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
|
||||
github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI=
|
||||
github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
|
||||
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
|
||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
|
||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/shirou/gopsutil v2.21.11+incompatible h1:lOGOyCG67a5dv2hq5Z1BLDUqqKp3HkbjPcz5j6XMS0U=
|
||||
github.com/shirou/gopsutil v2.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
|
@ -248,7 +202,6 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
|
|||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0/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=
|
||||
|
@ -262,41 +215,24 @@ github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+z
|
|||
github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo=
|
||||
github.com/swaggo/swag v1.16.2 h1:28Pp+8DkQoV+HLzLx8RGJZXNGKbFqnuvSbAAtoxiY04=
|
||||
github.com/swaggo/swag v1.16.2/go.mod h1:6YzXnDcpr0767iOejs318CwYkCQqyGer6BizOg03f+E=
|
||||
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
|
||||
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
|
||||
github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08lq3r4=
|
||||
github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0=
|
||||
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
|
||||
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
|
||||
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
|
||||
github.com/tklauser/numcpus v0.7.0 h1:yjuerZP127QG9m5Zh/mSO4wqurYil27tHrqwRoRjpr4=
|
||||
github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
|
||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
|
||||
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
|
||||
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
||||
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||
github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho=
|
||||
github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
|
||||
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e h1:+SOyEddqYF09QP7vr7CgJ1eti3pY9Fn3LHO1M1r/0sI=
|
||||
github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
||||
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4=
|
||||
go.opentelemetry.io/otel v1.5.0/go.mod h1:Jm/m+rNp/z0eqJc74H7LPwQ3G87qkU/AnnAydAjSAHk=
|
||||
go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
|
||||
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
|
||||
go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y=
|
||||
go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI=
|
||||
go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4=
|
||||
go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
|
||||
go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg=
|
||||
go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY=
|
||||
go.opentelemetry.io/otel/sdk v1.4.1/go.mod h1:NBwHDgDIBYjwK2WNu1OPgsIc2IJzmBXNnvIJxJc8BpE=
|
||||
|
@ -304,28 +240,23 @@ go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiM
|
|||
go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4=
|
||||
go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc=
|
||||
go.opentelemetry.io/otel/trace v1.5.0/go.mod h1:sq55kfhjXYr1zVSyexg0w1mpa03AYXR5eyTkB9NPPdE=
|
||||
go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc=
|
||||
go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
|
||||
go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0=
|
||||
go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo=
|
||||
go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8=
|
||||
go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
|
||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
|
||||
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||
golang.org/x/arch v0.7.0 h1:pskyeJh/3AmoQ8CPE95vxHLqp1G1GfGNXTmcl9NEKTc=
|
||||
golang.org/x/arch v0.7.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
|
||||
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
|
||||
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
|
||||
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
|
@ -336,8 +267,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
|||
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
|
||||
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
|
||||
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
|
||||
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -345,8 +274,6 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/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.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
||||
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
|
||||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
@ -365,21 +292,14 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
|
||||
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
|
@ -405,20 +325,12 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
|
|||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 h1:W12Pwm4urIbRdGhMEg2NM9O3TWKjNcxQhs46V0ypf/k=
|
||||
google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic=
|
||||
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac h1:ZL/Teoy/ZGnzyrqK/Optxxp2pmVh+fmJ97slxSRyzUg=
|
||||
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 h1:ZcOkrmX74HbKFYnpPY8Qsw93fC29TbJXspYKaBkSXDQ=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac h1:OZkkudMUu9LVQMCoRUbI/1p5VCo9BOrlvkqMvWtqa6s=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac h1:nUQEQmH/csSvFECKYRv6HWEyypysidKl2I6Qpsglq/0=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA=
|
||||
google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
|
||||
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
|
||||
google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU=
|
||||
google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
|
@ -429,14 +341,11 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
|
|||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
|
||||
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
|
@ -447,7 +356,6 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs=
|
||||
|
@ -457,5 +365,3 @@ gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
|
|||
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
||||
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
package biz
|
||||
|
||||
import (
|
||||
"github.com/Fromsko/gouitls/logs"
|
||||
"github.com/google/wire"
|
||||
)
|
||||
|
||||
// ProviderSet is biz providers.
|
||||
var (
|
||||
ProviderSet = wire.NewSet(NewAPIUseCase)
|
||||
log = logs.InitLogger()
|
||||
)
|
||||
|
|
|
@ -21,6 +21,14 @@ func (u *APIUseCase) Class() *Method {
|
|||
|
||||
classId := c.Param("class_id")
|
||||
|
||||
getStudents := func() []StudentClass {
|
||||
resp, err := u.Repo.GetStudentByClassID(classId)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return resp
|
||||
}
|
||||
|
||||
remoteClass(func(ctx context.Context, csc class.ClassServiceClient) {
|
||||
resp, err := csc.GetClass(ctx, &class.GetClassRequest{
|
||||
ClassId: classId,
|
||||
|
@ -29,7 +37,10 @@ func (u *APIUseCase) Class() *Method {
|
|||
c.JSON(http.StatusOK, &errors.StandardResponse{
|
||||
Code: resp.Code,
|
||||
Msg: resp.Msg,
|
||||
Data: resp.ClassInfo,
|
||||
Data: gin.H{
|
||||
"class_info": resp.ClassInfo,
|
||||
"student_list": getStudents(),
|
||||
},
|
||||
})
|
||||
}
|
||||
})
|
||||
|
@ -87,6 +98,9 @@ func (u *APIUseCase) Class() *Method {
|
|||
ClassId: classId,
|
||||
})
|
||||
if errors.CheckErr(c, err, remoteName, resp.Code, resp.Msg) {
|
||||
|
||||
_ = u.Repo.RemoveStudentsFromClass(classId) // 移除学生
|
||||
|
||||
c.JSON(http.StatusOK, &errors.StandardResponse{
|
||||
Code: resp.Code,
|
||||
Msg: resp.Msg,
|
||||
|
|
|
@ -48,11 +48,13 @@ type APIUseRepo interface {
|
|||
|
||||
type StudentClassService interface {
|
||||
// 获取学生班级信息
|
||||
GetStudentClass(classID, studentID string) (*StudentClass, error)
|
||||
GetStudentByClassID(classID string) ([]StudentClass, error)
|
||||
// JoinClass 学生加入班级
|
||||
JoinClass(request *JoinClassRequest) (*JoinClassResponse, error)
|
||||
// LeaveClass 学生退出班级
|
||||
LeaveClass(request *LeaveClassRequest) (*LeaveClassResponse, error)
|
||||
// RemoveStudentsFromClass 将学生从学生班级中移除
|
||||
RemoveStudentsFromClass(classID string) error
|
||||
}
|
||||
|
||||
type Operater interface {
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package biz
|
||||
|
||||
import "time"
|
||||
|
||||
// Score 定义成绩
|
||||
type Score struct {
|
||||
ExamID string `gorm:"primaryKey;column:exam_id" json:"exam_id"`
|
||||
StudentID string `gorm:"primaryKey;column:student_id" json:"student_id"`
|
||||
ScoreCalculation float64 `gorm:"column:score_calculation" json:"score_calculation"`
|
||||
Exam Exam `gorm:"foreignKey:ExamID;references:ExamID" json:"exam"`
|
||||
}
|
||||
|
||||
// ExamQuestion 定义试题结构体
|
||||
type ExamQuestion struct {
|
||||
Question string `json:"question"`
|
||||
Options []string `json:"options"`
|
||||
Answer string `json:"answer"`
|
||||
}
|
||||
|
||||
// Exam 定义考试结构体
|
||||
type Exam struct {
|
||||
ExamID string `gorm:"type:string(11);not null;primaryKey;column:exam_id;comment:考试ID" json:"exam_id"`
|
||||
ExamName string `json:"exam_name" gorm:"comment:考试名称"`
|
||||
ExamTime string `json:"exam_time" gorm:"comment:考试时间"`
|
||||
ExamContent string `json:"exam_content" gorm:"comment:考试内容"`
|
||||
CreatedAt time.Time `json:"created_at" gorm:"comment:创建时间"`
|
||||
UpdatedAt time.Time `json:"updated_at" gorm:"comment:更新时间"`
|
||||
TeacherID string `json:"teacher_id" gorm:"comment:教师ID"`
|
||||
}
|
|
@ -1,19 +1,28 @@
|
|||
package biz
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"manage/api/class"
|
||||
"manage/api/user"
|
||||
"strings"
|
||||
|
||||
rp "github.com/Fromsko/gouitls/reply"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// StudentClass 定义学生班级关联结构体
|
||||
type StudentClass struct {
|
||||
StudentID string `gorm:"constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;"` // 学生ID,级联更新和删除约束
|
||||
ClassID string `gorm:"constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;"` // 班级ID,级联更新和删除约束
|
||||
StudentID string `gorm:"column:student_id" json:"student_id"`
|
||||
ClassID string `gorm:"column:class_id" json:"class_id"`
|
||||
UserName string `gorm:"column:username" json:"username"`
|
||||
}
|
||||
|
||||
// JoinClassRequest 请求格式
|
||||
type JoinClassRequest struct {
|
||||
StudentID string `json:"student_id"`
|
||||
ClassID string `json:"class_id"`
|
||||
UserName string `gorm:"column:username" json:"username"`
|
||||
}
|
||||
|
||||
// JoinClassResponse 响应格式
|
||||
|
@ -32,61 +41,68 @@ type LeaveClassResponse struct {
|
|||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func badMsg(err, msg string) gin.H {
|
||||
return gin.H{
|
||||
"err": err,
|
||||
"msg": msg,
|
||||
}
|
||||
}
|
||||
|
||||
func sucdMsg(msg string, data any) gin.H {
|
||||
return gin.H{
|
||||
"code": 200,
|
||||
"msg": msg,
|
||||
"data": data,
|
||||
}
|
||||
}
|
||||
|
||||
func (u *APIUseCase) Student() *Method {
|
||||
return &Method{
|
||||
Get: func(c *gin.Context) {
|
||||
classId := c.Param("class_id")
|
||||
studentId := c.PostForm("student_id")
|
||||
|
||||
if studentId == "" {
|
||||
c.JSON(400, badMsg("获取失败", "参数不正确"))
|
||||
return
|
||||
}
|
||||
|
||||
reply, err := u.Repo.GetStudentClass(classId, studentId)
|
||||
if err != nil {
|
||||
c.JSON(500, badMsg("获取失败", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, sucdMsg("获取成功", reply))
|
||||
},
|
||||
|
||||
Post: func(c *gin.Context) {
|
||||
classId := c.Param("class_id")
|
||||
studentId := c.PostForm("student_id")
|
||||
hasUser := ""
|
||||
username := ""
|
||||
|
||||
if studentId == "" {
|
||||
c.JSON(400, badMsg("加入失败", "参数不正确"))
|
||||
rp.Failed(c, "加入失败", "参数不正确")
|
||||
return
|
||||
}
|
||||
|
||||
reply, err := u.Repo.JoinClass(&JoinClassRequest{
|
||||
StudentID: studentId,
|
||||
ClassID: classId,
|
||||
})
|
||||
checkExistence := func(classId, studentId string, hasUser *string) bool {
|
||||
flag := true
|
||||
|
||||
if err != nil {
|
||||
c.JSON(400, badMsg("加入失败", err.Error()))
|
||||
u.Repo.User(func(ctx context.Context, usc user.UserServiceClient) {
|
||||
req := &user.GetUserRequest{UserId: studentId}
|
||||
if resp, _ := usc.GetUser(ctx, req); resp.Code == 400 {
|
||||
flag = false
|
||||
*hasUser = strings.Split(resp.Msg, ":")[1]
|
||||
} else {
|
||||
username = resp.Data.Username
|
||||
}
|
||||
})
|
||||
|
||||
if !flag {
|
||||
return false
|
||||
}
|
||||
|
||||
u.Repo.Class(func(ctx context.Context, csc class.ClassServiceClient) {
|
||||
req := &class.GetClassRequest{ClassId: classId}
|
||||
if resp, _ := csc.GetClass(ctx, req); resp.Code == 400 {
|
||||
flag = false
|
||||
fmt.Println(resp.Msg, resp.Code, resp.ClassInfo)
|
||||
*hasUser = strings.Split(resp.Msg, ":")[1]
|
||||
}
|
||||
})
|
||||
|
||||
return flag
|
||||
}
|
||||
|
||||
if !checkExistence(classId, studentId, &hasUser) && hasUser != "" {
|
||||
rp.Failed(c, "加入失败", hasUser)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, sucdMsg(reply.Message, ""))
|
||||
// 加入班级
|
||||
{
|
||||
reply, err := u.Repo.JoinClass(&JoinClassRequest{
|
||||
StudentID: studentId,
|
||||
ClassID: classId,
|
||||
UserName: username,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
rp.Failed(c, "加入失败", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
rp.Succeed(c, reply.Message)
|
||||
}
|
||||
},
|
||||
|
||||
Delete: func(c *gin.Context) {
|
||||
|
@ -95,7 +111,7 @@ func (u *APIUseCase) Student() *Method {
|
|||
studentId := c.PostForm("student_id")
|
||||
|
||||
if studentId == "" {
|
||||
c.JSON(400, badMsg("删除失败", "参数不正确"))
|
||||
rp.Failed(c, "删除失败", "参数不正确")
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -105,11 +121,11 @@ func (u *APIUseCase) Student() *Method {
|
|||
})
|
||||
|
||||
if err != nil {
|
||||
c.JSON(400, badMsg("离开失败", err.Error()))
|
||||
rp.Failed(c, "离开失败", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, sucdMsg(reply.Message, ""))
|
||||
rp.Succeed(c, reply.Message)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,9 +31,23 @@ func NewAPIRepo(Data *Data, logger log.Logger) biz.APIUseRepo {
|
|||
|
||||
func (repo *apiRepo) setup() {
|
||||
// 自动迁移数据库表
|
||||
if err := repo.Data.Mysql.AutoMigrate(&biz.StudentClass{}); err != nil {
|
||||
if err := repo.Data.Mysql.AutoMigrate(&biz.StudentClass{}, &biz.Score{}); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
/*
|
||||
// 查询特定成绩及其关联的考试信息
|
||||
var score biz.Score
|
||||
result := repo.Data.Mysql.Preload("Exam").First(&score, "exam_id = ?", "fde39fdd0f60")
|
||||
if result.Error != nil {
|
||||
// 处理查询错误
|
||||
fmt.Println(result.Error)
|
||||
}
|
||||
|
||||
// 打印成绩及其关联的考试信息
|
||||
fmt.Println("Score:", score)
|
||||
fmt.Println("Exam:", score.Exam)
|
||||
*/
|
||||
}
|
||||
|
||||
func (repo *apiRepo) User(CallBack biz.UserCallBack) {
|
||||
|
@ -74,6 +88,7 @@ func (repo *apiRepo) JoinClass(request *biz.JoinClassRequest) (*biz.JoinClassRes
|
|||
studentClass := biz.StudentClass{
|
||||
StudentID: request.StudentID,
|
||||
ClassID: request.ClassID,
|
||||
UserName: request.UserName,
|
||||
}
|
||||
result := repo.Data.Mysql.Create(&studentClass)
|
||||
if result.Error != nil {
|
||||
|
@ -118,16 +133,39 @@ func (repo *apiRepo) LeaveClass(request *biz.LeaveClassRequest) (*biz.LeaveClass
|
|||
return &response, nil
|
||||
}
|
||||
|
||||
func (repo *apiRepo) GetStudentClass(classID, studentID string) (*biz.StudentClass, error) {
|
||||
var studentClass biz.StudentClass
|
||||
result := repo.Data.Mysql.Where("class_id = ? AND student_id = ?", classID, studentID).First(&studentClass)
|
||||
// GetStudentByClassID 查询学生信息通过ID
|
||||
func (repo *apiRepo) GetStudentByClassID(classID string) ([]biz.StudentClass, error) {
|
||||
var studentClass []biz.StudentClass
|
||||
result := repo.Data.Mysql.Where("class_id = ?", classID).Find(&studentClass)
|
||||
if result.Error != nil {
|
||||
if result.Error == gorm.ErrRecordNotFound {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, result.Error
|
||||
}
|
||||
return &studentClass, nil
|
||||
return studentClass, nil
|
||||
}
|
||||
|
||||
// RemoveStudentsFromClass 将学生从学生班级中移除
|
||||
func (repo *apiRepo) RemoveStudentsFromClass(classID string) error {
|
||||
// 查询班级中的所有学生
|
||||
studentClassList, err := repo.GetStudentByClassID(classID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 逐个移除学生
|
||||
for _, studentClass := range studentClassList {
|
||||
_, err := repo.LeaveClass(&biz.LeaveClassRequest{
|
||||
StudentID: studentClass.StudentID,
|
||||
ClassID: studentClass.ClassID,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type Operat struct {
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
package common
|
||||
|
||||
type StatusCPU struct {
|
||||
Type string `json:"type"`
|
||||
Usage float64 `json:"useage"`
|
||||
}
|
||||
|
||||
type StatusService struct {
|
||||
Type string `json:"type"`
|
||||
ServiceList Service `json:"server"`
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
Name string `json:"name"` // IP 地址
|
||||
Status string `josn:"status"` // 状态
|
||||
}
|
||||
|
||||
type StatusNotify struct {
|
||||
Type string `json:"type"`
|
||||
NotifyInfo string `json:"info"`
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
package guard
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"manage/api/user"
|
||||
"manage/internal/biz"
|
||||
"manage/internal/service"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
var AuthType = struct {
|
||||
Teacher string
|
||||
Student string
|
||||
Admin string
|
||||
}{
|
||||
Teacher: "老师",
|
||||
Student: "学生",
|
||||
Admin: "管理员",
|
||||
}
|
||||
|
||||
func ClassPermission(srv *service.GatewayService) gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
|
||||
id := ctx.PostForm("teacher_id")
|
||||
if id == "" {
|
||||
ctx.JSON(400, gin.H{"msg": "鉴权失败", "err": "参数不正确"})
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
searchAuth := func(_ context.Context, usc user.UserServiceClient) {
|
||||
reply, err := usc.GetUser(ctx, &user.GetUserRequest{UserId: id})
|
||||
if err != nil || reply.Code != 200 || reply.Data == nil || reply.Data.Role == "" {
|
||||
ctx.JSON(400, gin.H{
|
||||
"msg": "鉴权失败",
|
||||
"err": fmt.Sprintf("参数不正确(%s)", err),
|
||||
})
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
role := reply.Data.Role
|
||||
|
||||
if role != AuthType.Teacher && role != AuthType.Admin {
|
||||
ctx.JSON(400, gin.H{"msg": "无权操作", "err": role})
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
srv.Remote.CallGrpc(func(call *biz.APIUseCase) {
|
||||
call.Repo.User(searchAuth)
|
||||
})
|
||||
|
||||
ctx.Next()
|
||||
}
|
||||
}
|
|
@ -2,22 +2,22 @@ package handler
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"manage/api/user"
|
||||
"manage/internal/biz"
|
||||
"manage/internal/routes/middleware"
|
||||
"manage/internal/routes/middleware/guard"
|
||||
"manage/internal/routes/model"
|
||||
"manage/internal/service"
|
||||
"strings"
|
||||
|
||||
"github.com/Fromsko/gouitls/auth"
|
||||
rp "github.com/Fromsko/gouitls/reply"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// @Summary 用户注册
|
||||
// @Description 用户注册接口
|
||||
// @Tags Auth
|
||||
// @Accept json
|
||||
// @Accept x-www-form-urlencoded
|
||||
// @Produce json
|
||||
// @Param username formData string true "用户名"
|
||||
// @Param password formData string true "密码"
|
||||
|
@ -74,9 +74,9 @@ func Login(srv *service.GatewayService) gin.HandlerFunc {
|
|||
return func(ctx *gin.Context) {
|
||||
us := ctx.PostForm("username")
|
||||
pwd := ctx.PostForm("password")
|
||||
|
||||
|
||||
if us == "" || pwd == "" {
|
||||
ctx.JSON(400, gin.H{"msg": "登录失败", "err": "参数不正确"})
|
||||
rp.Failed(ctx, "登录失败", "参数不正确")
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
@ -86,19 +86,13 @@ func Login(srv *service.GatewayService) gin.HandlerFunc {
|
|||
UserId: strings.Split(auth.GenUUID(us), "-")[0],
|
||||
})
|
||||
if err != nil || reply.Code != 200 || reply.Data == nil || reply.Data.Role == "" {
|
||||
ctx.JSON(400, gin.H{
|
||||
"msg": "登录失败",
|
||||
"err": fmt.Sprintf("参数不正确(%s)", err),
|
||||
})
|
||||
rp.Failed(ctx, "登录失败", "账号密码错误")
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
if reply.Data.Password != auth.HashString(pwd) {
|
||||
ctx.JSON(400, gin.H{
|
||||
"msg": "登录失败",
|
||||
"err": "账号密码错误",
|
||||
})
|
||||
rp.Failed(ctx, "登录失败", "账号密码错误")
|
||||
ctx.Abort()
|
||||
return
|
||||
} else {
|
||||
|
@ -106,10 +100,11 @@ func Login(srv *service.GatewayService) gin.HandlerFunc {
|
|||
if err != nil {
|
||||
middleware.Log.Errorf("Token 生成失败(%s)", err)
|
||||
}
|
||||
ctx.JSON(200, gin.H{
|
||||
"msg": "登录成功",
|
||||
"token": token,
|
||||
})
|
||||
rp.Succeed(ctx, "登陆成功",
|
||||
gin.H{
|
||||
"token": token,
|
||||
},
|
||||
)
|
||||
ctx.Next()
|
||||
return
|
||||
}
|
||||
|
@ -121,11 +116,15 @@ func Login(srv *service.GatewayService) gin.HandlerFunc {
|
|||
}
|
||||
}
|
||||
|
||||
func ProxyAuth(srv *service.GatewayService, cRole ...string) gin.HandlerFunc {
|
||||
func ProxyAuth(srv *service.GatewayService, cRole ...model.AuthType) gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
token := ctx.GetHeader("Authorization")
|
||||
if token == "" {
|
||||
ctx.JSON(403, gin.H{"msg": "鉴权失败", "err": "未携带Token"})
|
||||
rp.Failed(ctx, "鉴权失败", "未携带Token",
|
||||
gin.H{
|
||||
"code": 403,
|
||||
},
|
||||
)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
@ -133,7 +132,11 @@ func ProxyAuth(srv *service.GatewayService, cRole ...string) gin.HandlerFunc {
|
|||
token = strings.Replace(token, "Bearer ", "", 1)
|
||||
userId, ok := srv.Remote.Repo.TokenOperat().CheckTokenInfo(token)
|
||||
if !ok {
|
||||
ctx.JSON(403, gin.H{"msg": "鉴权失败", "err": "Token已过期"})
|
||||
rp.Failed(ctx, "鉴权失败", "Token已过期",
|
||||
gin.H{
|
||||
"code": 403,
|
||||
},
|
||||
)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
@ -141,30 +144,35 @@ func ProxyAuth(srv *service.GatewayService, cRole ...string) gin.HandlerFunc {
|
|||
searchAuth := func(_ context.Context, usc user.UserServiceClient) {
|
||||
reply, err := usc.GetUser(ctx, &user.GetUserRequest{UserId: userId})
|
||||
if err != nil || reply.Code != 200 || reply.Data == nil || reply.Data.Role == "" {
|
||||
ctx.JSON(400, gin.H{
|
||||
"msg": "鉴权失败",
|
||||
"err": "用户不存在",
|
||||
})
|
||||
rp.Failed(ctx, "鉴权失败", "用户不存在",
|
||||
gin.H{
|
||||
"code": 403,
|
||||
},
|
||||
)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
isRole := false
|
||||
role := reply.Data.Role
|
||||
roleFlag := false
|
||||
|
||||
switch len(cRole) {
|
||||
case 1:
|
||||
roleFlag = role != cRole[0]
|
||||
case 2:
|
||||
if len(cRole) != 0 {
|
||||
for _, r := range cRole {
|
||||
roleFlag = role != r
|
||||
if r.String() == role {
|
||||
isRole = true
|
||||
break
|
||||
}
|
||||
}
|
||||
default:
|
||||
roleFlag = role != guard.AuthType.Admin
|
||||
} else {
|
||||
isRole = (model.Admin.String() == role)
|
||||
}
|
||||
|
||||
if roleFlag {
|
||||
ctx.JSON(400, gin.H{"msg": "无权操作", "err": role})
|
||||
if !isRole {
|
||||
rp.Failed(ctx, "无权操作", "当前角色: "+role,
|
||||
gin.H{
|
||||
"code": 400,
|
||||
},
|
||||
)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package model
|
||||
|
||||
type AuthType int
|
||||
|
||||
const (
|
||||
Teacher AuthType = iota
|
||||
Student
|
||||
Admin
|
||||
)
|
||||
|
||||
var authTypeNames = [...]string{
|
||||
"老师",
|
||||
"学生",
|
||||
"管理员",
|
||||
}
|
||||
|
||||
// String 用户鉴权
|
||||
func (at AuthType) String() string {
|
||||
if at < 0 || int(at) >= len(authTypeNames) {
|
||||
return "未知角色"
|
||||
}
|
||||
return authTypeNames[at]
|
||||
}
|
|
@ -1,9 +1,8 @@
|
|||
package routes
|
||||
|
||||
import (
|
||||
"manage/internal/routes/common"
|
||||
"manage/internal/routes/middleware"
|
||||
"manage/internal/routes/middleware/handler"
|
||||
"manage/internal/routes/model"
|
||||
"manage/internal/service"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
@ -19,7 +18,7 @@ import (
|
|||
func RegisterHttpServer(s *khttp.Server, srv *service.GatewayService) {
|
||||
router := gin.New()
|
||||
InitConfig(router)
|
||||
common.TaskRuner(common.CpuTask)
|
||||
// common.TaskRuner(common.CpuTask)
|
||||
// 添加Swagger路由
|
||||
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
|
||||
|
||||
|
@ -33,44 +32,50 @@ func RegisterHttpServer(s *khttp.Server, srv *service.GatewayService) {
|
|||
// 用户组
|
||||
userGrp := rootGrp.Group("/user")
|
||||
{
|
||||
userGrp.Use(handler.ProxyAuth(srv))
|
||||
userGrp.POST("/", srv.Remote.User().Post)
|
||||
userGrp.Use(handler.ProxyAuth(srv, model.Admin, model.Teacher)) // [管理员|老师]
|
||||
userGrp.POST("/", handler.ProxyAuth(srv, model.Admin), srv.Remote.User().Post)
|
||||
userGrp.GET("/user_list", srv.Remote.User().Get)
|
||||
userGrp.GET("/:user_id", srv.Remote.User().Get)
|
||||
userGrp.PUT("/:user_id", srv.Remote.User().Put)
|
||||
userGrp.DELETE("/:user_id", srv.Remote.User().Delete)
|
||||
userGrp.DELETE("/:user_id", handler.ProxyAuth(srv, model.Admin), srv.Remote.User().Delete)
|
||||
}
|
||||
// 考试组
|
||||
examGrp := rootGrp.Group("/exam")
|
||||
{
|
||||
examGrp.POST("/", srv.Remote.Exam().Post)
|
||||
examGrp.GET("/:exam_id", handler.ProxyAuth(srv), srv.Remote.Exam().Get)
|
||||
examGrp.DELETE("/:exam_id", srv.Remote.Exam().Delete)
|
||||
examGrp.PUT("/:exam_id", srv.Remote.Exam().Put)
|
||||
examGrp.POST("/", handler.ProxyAuth(srv, model.Admin, model.Teacher), srv.Remote.Exam().Post)
|
||||
examGrp.GET("/:exam_id", srv.Remote.Exam().Get)
|
||||
examGrp.DELETE("/:exam_id", handler.ProxyAuth(srv, model.Admin, model.Teacher), srv.Remote.Exam().Delete)
|
||||
examGrp.PUT("/:exam_id", handler.ProxyAuth(srv, model.Admin, model.Teacher), srv.Remote.Exam().Put)
|
||||
}
|
||||
// 课程组
|
||||
// 课程组 [管理员]
|
||||
courseGrp := rootGrp.Group("/course")
|
||||
{
|
||||
courseGrp.Use(handler.ProxyAuth(srv, model.Admin)) // [管理员]
|
||||
courseGrp.POST("/", srv.Remote.Course().Post)
|
||||
courseGrp.GET("/:course_id", srv.Remote.Course().Get)
|
||||
courseGrp.DELETE("/:course_id", srv.Remote.Course().Delete)
|
||||
courseGrp.PUT("/:course_id", srv.Remote.Course().Put)
|
||||
}
|
||||
// 班级组
|
||||
// 班级组 [管理员]
|
||||
classGrp := rootGrp.Group("/class")
|
||||
{
|
||||
classGrp.POST("/", srv.Remote.Class().Post)
|
||||
classGrp.GET("/:class_id", srv.Remote.Class().Get)
|
||||
classGrp.DELETE("/:class_id", srv.Remote.Class().Delete)
|
||||
classGrp.PUT("/:class_id", srv.Remote.Class().Put)
|
||||
// 学生班级
|
||||
classGrp.POST("/", handler.ProxyAuth(srv, model.Admin), srv.Remote.Class().Post)
|
||||
classGrp.GET("/:class_id", handler.ProxyAuth(srv, model.Admin), srv.Remote.Class().Get)
|
||||
classGrp.DELETE("/:class_id", handler.ProxyAuth(srv, model.Admin), srv.Remote.Class().Delete)
|
||||
classGrp.PUT("/:class_id", handler.ProxyAuth(srv, model.Admin), srv.Remote.Class().Put)
|
||||
// 学生班级 [老师 | 管理员]
|
||||
classJLGrp := classGrp.Group("/:class_id")
|
||||
{
|
||||
classGrp.POST("/:class_id/join", srv.Remote.Student().Post)
|
||||
classGrp.DELETE("/:class_id/leave", srv.Remote.Student().Delete)
|
||||
classJLGrp.Use(handler.ProxyAuth(
|
||||
srv,
|
||||
model.Admin, model.Teacher,
|
||||
))
|
||||
classJLGrp.POST("/join", srv.Remote.Student().Post)
|
||||
classJLGrp.DELETE("/leave", srv.Remote.Student().Delete)
|
||||
}
|
||||
}
|
||||
// 服务状态
|
||||
rootGrp.GET("/ws", middleware.MonitorWS)
|
||||
// rootGrp.GET("/ws", middleware.MonitorWS)
|
||||
}
|
||||
s.HandlePrefix("/", router)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue