database.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package models
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "log"
  6. "os"
  7. "gorm.io/driver/sqlite"
  8. "gorm.io/gorm"
  9. )
  10. // AuthCode 表示授权码数据表
  11. type AuthCode struct {
  12. ID uint `gorm:"primaryKey"` // 自增主键
  13. UUID string `gorm:"unique"` // 授权码唯一标识
  14. DeviceID string // 设备唯一标识
  15. }
  16. // License 表示单个授权码的 JSON 数据
  17. type License struct {
  18. UUID string `json:"uuid"` // 授权码
  19. LicenseFile string `json:"license_file"` // 授权文件路径
  20. }
  21. // LicenseImportData 表示整个 JSON 导入文件的数据结构
  22. type LicenseImportData struct {
  23. Name string `json:"name"` // 授权组名称
  24. AppID string `json:"app_id"` // 应用 ID
  25. ExpireTime string `json:"expire_time"` // 授权码过期时间
  26. Licenses []License `json:"licenses"` // 授权码列表
  27. }
  28. // DB 数据库实例
  29. var DB *gorm.DB
  30. // InitDatabase 初始化数据库
  31. func InitDatabase(dbPath string) {
  32. var err error
  33. DB, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
  34. if err != nil {
  35. log.Fatal("Failed to connect to database:", err)
  36. }
  37. // 自动迁移数据库表
  38. err = DB.AutoMigrate(&AuthCode{})
  39. if err != nil {
  40. log.Fatal("Failed to migrate database:", err)
  41. }
  42. }
  43. // FindAuthCode 根据 UUID 查询授权码
  44. func FindAuthCode(uuid string) (*AuthCode, error) {
  45. var authCode AuthCode
  46. result := DB.Where("uuid = ?", uuid).First(&authCode)
  47. if result.Error != nil {
  48. return nil, result.Error
  49. }
  50. return &authCode, nil
  51. }
  52. // SaveAuthCode 保存授权码
  53. func SaveAuthCode(authCode *AuthCode) error {
  54. return DB.Save(authCode).Error
  55. }
  56. // ImportLicenses 从 JSON 文件导入授权码到数据库
  57. func ImportLicenses(filePath string) error {
  58. // 1. 读取 JSON 文件
  59. data, err := os.ReadFile(filePath)
  60. if err != nil {
  61. return errors.New("failed to read JSON file: " + err.Error())
  62. }
  63. // 2. 解析 JSON 数据
  64. var importData LicenseImportData
  65. if err := json.Unmarshal(data, &importData); err != nil {
  66. return errors.New("failed to parse JSON: " + err.Error())
  67. }
  68. // 3. 打印导入信息
  69. log.Printf("Importing licenses for app: %s, name: %s, expire_time: %s",
  70. importData.AppID, importData.Name, importData.ExpireTime)
  71. // 4. 遍历授权码并写入数据库
  72. for _, license := range importData.Licenses {
  73. authCode := &AuthCode{
  74. UUID: license.UUID,
  75. DeviceID: license.LicenseFile, // 假设 LicenseFile 存储为 DeviceID
  76. }
  77. // 保存到数据库
  78. if err := SaveAuthCode(authCode); err != nil {
  79. log.Printf("Failed to save license with UUID %s: %v", license.UUID, err)
  80. } else {
  81. log.Printf("Successfully imported license: %s", license.UUID)
  82. }
  83. }
  84. log.Println("All licenses imported successfully!")
  85. return nil
  86. }