Parcourir la source

feat(cdn): 添加 CDN 相关的模型、处理器和存储库

- 新增 Cdn 模型以表示 CDN 数据
- 实现 CdnHandler 以处理 CDN 相关的 HTTP 请求
- 创建 CdnRepository 接口和实现,用于管理 CDN 数据和 token
- 在 Globallimit 模型中移除与 CDN 无关的字段
fusu il y a 1 mois
Parent
commit
4b567a2b94
4 fichiers modifiés avec 97 ajouts et 5 suppressions
  1. 25 0
      internal/handler/cdn.go
  2. 11 0
      internal/model/cdn.go
  3. 1 5
      internal/model/globallimit.go
  4. 60 0
      internal/repository/cdn.go

+ 25 - 0
internal/handler/cdn.go

@@ -0,0 +1,25 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/go-nunu/nunu-layout-advanced/internal/service"
+)
+
+type CdnHandler struct {
+	*Handler
+	cdnService service.CdnService
+}
+
+func NewCdnHandler(
+    handler *Handler,
+    cdnService service.CdnService,
+) *CdnHandler {
+	return &CdnHandler{
+		Handler:      handler,
+		cdnService: cdnService,
+	}
+}
+
+func (h *CdnHandler) GetCdn(ctx *gin.Context) {
+
+}

+ 11 - 0
internal/model/cdn.go

@@ -0,0 +1,11 @@
+package model
+
+import "gorm.io/gorm"
+
+type Cdn struct {
+	gorm.Model
+}
+
+func (m *Cdn) TableName() string {
+    return "cdn"
+}

+ 1 - 5
internal/model/globallimit.go

@@ -7,11 +7,7 @@ type GlobalLimit struct {
 	HostId          int
 	RuleId          int
 	Uid             int
-	TcpLimitRuleId  int
-	UdpLimitRuleId  int
-	WebLimitRuleId  int
-	GatewayGroupId  int
-	GlobalLimitName string
+	CdnUid          int
 	Comment         string
 	ExpiredAt       int64
 	createdAt       time.Time

+ 60 - 0
internal/repository/cdn.go

@@ -0,0 +1,60 @@
+package repository
+
+import (
+	"context"
+	"github.com/go-nunu/nunu-layout-advanced/internal/model"
+	"github.com/redis/go-redis/v9"
+	"time"
+)
+
+type CdnRepository interface {
+	GetCdn(ctx context.Context, id int64) (*model.Cdn, error)
+	PutToken(ctx context.Context, token string) error
+	GetToken(ctx context.Context) (string, error)
+}
+
+func NewCdnRepository(
+	repository *Repository,
+) CdnRepository {
+	return &cdnRepository{
+		Repository: repository,
+	}
+}
+
+type cdnRepository struct {
+	*Repository
+}
+
+func (r *cdnRepository) GetCdn(ctx context.Context, id int64) (*model.Cdn, error) {
+	var cdn model.Cdn
+
+	return &cdn, nil
+}
+
+const cdnTokenKey = "cdn:token"
+
+func (r *cdnRepository) PutToken(ctx context.Context, token string) error {
+	// 设置 token 的过期时间,例如 2 小时
+	const expiration = 2 * time.Hour
+
+	// 使用 Set 方法将 token 存入 Redis
+	err := r.rdb.Set(ctx, cdnTokenKey, token, expiration).Err()
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+// GetToken 从 Redis 中获取 CDN token
+func (r *cdnRepository) GetToken(ctx context.Context) (string, error) {
+	token, err := r.rdb.Get(ctx, cdnTokenKey).Result()
+	if err != nil {
+		// 如果 token 不存在,redis.Nil 会被返回
+		if err == redis.Nil {
+			return "", nil // 或者返回一个特定的错误表示 token 不存在
+		}
+		return "", err
+	}
+
+	return token, nil
+}