# coding=utf-8 """ 插件版本模型 存储插件的版本历史 """ import uuid_utils.compat as uuid from django.db import models from common.mixins.app_model_mixin import AppModelMixin class PluginVersionStatus(models.TextChoices): """版本状态""" PENDING = 'PENDING', '待发布' ACTIVE = 'ACTIVE', '已发布' DEPRECATED = 'DEPRECATED', '已废弃' class PluginVersion(AppModelMixin): """插件版本""" id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id") plugin = models.ForeignKey( 'plugin.Plugin', on_delete=models.CASCADE, db_constraint=False, verbose_name="插件", db_index=True ) version = models.CharField(max_length=32, verbose_name="版本号") status = models.CharField( max_length=20, choices=PluginVersionStatus.choices, default=PluginVersionStatus.PENDING, verbose_name="版本状态" ) changelog = models.TextField(verbose_name="更新日志", default="") schema = models.JSONField(verbose_name="版本 Schema", default=dict) config = models.JSONField(verbose_name="版本配置", default=dict) file_path = models.CharField(max_length=512, verbose_name="版本文件路径", default="") file_hash = models.CharField(max_length=64, verbose_name="文件哈希", default="") is_rollback = models.BooleanField(verbose_name="是否回滚版本", default=False) class Meta: db_table = "plugin_version" ordering = ['-create_time'] def __str__(self): return f"{self.plugin_id} v{self.version}"