cdn.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package flexCdn
  2. import (
  3. "context"
  4. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  5. "github.com/go-nunu/nunu-layout-advanced/internal/repository"
  6. "github.com/redis/go-redis/v9"
  7. "time"
  8. )
  9. type CdnRepository interface {
  10. GetCdn(ctx context.Context, id int64) (*model.Cdn, error)
  11. PutToken(ctx context.Context, token string) error
  12. GetToken(ctx context.Context) (string, error)
  13. GetUserId(ctx context.Context, username string) (int64, error)
  14. GetNodeClusterId(ctx context.Context, name string) (int64, error)
  15. }
  16. func NewCdnRepository(
  17. repository *repository.Repository,
  18. ) CdnRepository {
  19. return &cdnRepository{
  20. Repository: repository,
  21. }
  22. }
  23. type cdnRepository struct {
  24. *repository.Repository
  25. }
  26. func (r *cdnRepository) GetCdn(ctx context.Context, id int64) (*model.Cdn, error) {
  27. var cdn model.Cdn
  28. return &cdn, nil
  29. }
  30. const cdnTokenKey = "cdn:token"
  31. func (r *cdnRepository) PutToken(ctx context.Context, token string) error {
  32. // 设置 token 的过期时间,例如 2 小时
  33. const expiration = 2 * time.Hour
  34. // 使用 Set 方法将 token 存入 Redis
  35. err := r.Rdb.Set(ctx, cdnTokenKey, token, expiration).Err()
  36. if err != nil {
  37. return err
  38. }
  39. return nil
  40. }
  41. // GetToken 从 Redis 中获取 CDN token
  42. func (r *cdnRepository) GetToken(ctx context.Context) (string, error) {
  43. token, err := r.Rdb.Get(ctx, cdnTokenKey).Result()
  44. if err != nil {
  45. // 如果 token 不存在,redis.Nil 会被返回
  46. if err == redis.Nil {
  47. return "", nil // 或者返回一个特定的错误表示 token 不存在
  48. }
  49. return "", err
  50. }
  51. return token, nil
  52. }
  53. func (r *cdnRepository) GetUserId(ctx context.Context, username string) (int64, error) {
  54. var id int64
  55. if err := r.DBWithName(ctx,"cdn").Table("cloud_users").
  56. Where("username = ?", username).
  57. Select("id").
  58. Find(&id).Error; err != nil {
  59. return 0, err
  60. }
  61. return id, nil
  62. }
  63. func (r *cdnRepository) GetNodeClusterId(ctx context.Context, name string) (int64, error) {
  64. var id int64
  65. return id, r.DBWithName(ctx,"cdn").Table("cloud_node_clusters").
  66. Where("name = ?", name).
  67. Select("id").
  68. Find(&id).Error
  69. }