plugin_version.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # coding=utf-8
  2. """
  3. 插件版本模型
  4. 存储插件的版本历史
  5. """
  6. import uuid_utils.compat as uuid
  7. from django.db import models
  8. from common.mixins.app_model_mixin import AppModelMixin
  9. class PluginVersionStatus(models.TextChoices):
  10. """版本状态"""
  11. PENDING = 'PENDING', '待发布'
  12. ACTIVE = 'ACTIVE', '已发布'
  13. DEPRECATED = 'DEPRECATED', '已废弃'
  14. class PluginVersion(AppModelMixin):
  15. """插件版本"""
  16. id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
  17. plugin = models.ForeignKey(
  18. 'plugin.Plugin',
  19. on_delete=models.CASCADE,
  20. db_constraint=False,
  21. verbose_name="插件",
  22. db_index=True
  23. )
  24. version = models.CharField(max_length=32, verbose_name="版本号")
  25. status = models.CharField(
  26. max_length=20,
  27. choices=PluginVersionStatus.choices,
  28. default=PluginVersionStatus.PENDING,
  29. verbose_name="版本状态"
  30. )
  31. changelog = models.TextField(verbose_name="更新日志", default="")
  32. schema = models.JSONField(verbose_name="版本 Schema", default=dict)
  33. config = models.JSONField(verbose_name="版本配置", default=dict)
  34. file_path = models.CharField(max_length=512, verbose_name="版本文件路径", default="")
  35. file_hash = models.CharField(max_length=64, verbose_name="文件哈希", default="")
  36. is_rollback = models.BooleanField(verbose_name="是否回滚版本", default=False)
  37. class Meta:
  38. db_table = "plugin_version"
  39. ordering = ['-create_time']
  40. def __str__(self):
  41. return f"{self.plugin_id} v{self.version}"