cdn.go 1.7 KB

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