application_version.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎虎
  5. @file: application_version.py
  6. @date:2025/6/3 16:25
  7. @desc:
  8. """
  9. from typing import Dict
  10. from django.db.models import QuerySet
  11. from django.utils.translation import gettext_lazy as _
  12. from rest_framework import serializers
  13. from application.models import Application, ApplicationVersion
  14. from common.db.search import page_search
  15. from common.exception.app_exception import AppApiException
  16. class ApplicationVersionQuerySerializer(serializers.Serializer):
  17. application_id = serializers.UUIDField(required=True, label=_("Application ID"))
  18. name = serializers.CharField(required=False, allow_null=True, allow_blank=True,
  19. label=_("summary"))
  20. class ApplicationVersionModelSerializer(serializers.ModelSerializer):
  21. class Meta:
  22. model = ApplicationVersion
  23. fields = ['id', 'name', 'workspace_id', 'application_id', 'work_flow', 'publish_user_id', 'publish_user_name',
  24. 'create_time',
  25. 'update_time']
  26. class ApplicationVersionEditSerializer(serializers.Serializer):
  27. name = serializers.CharField(required=False, max_length=128, allow_null=True, allow_blank=True,
  28. label=_("Version Name"))
  29. class ApplicationVersionSerializer(serializers.Serializer):
  30. workspace_id = serializers.CharField(required=False, label=_("Workspace ID"))
  31. class Query(serializers.Serializer):
  32. workspace_id = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("Workspace ID"))
  33. def get_query_set(self, query):
  34. query_set = QuerySet(ApplicationVersion).filter(application_id=query.get('application_id'))
  35. if 'name' in query and query.get('name') is not None:
  36. query_set = query_set.filter(name__contains=query.get('name'))
  37. if 'workspace_id' in self.data and self.data.get('workspace_id') is not None:
  38. query_set = query_set.filter(workspace_id=self.data.get('workspace_id'))
  39. return query_set.order_by("-create_time")
  40. def list(self, query, with_valid=True):
  41. if with_valid:
  42. self.is_valid(raise_exception=True)
  43. ApplicationVersionQuerySerializer(data=query).is_valid(raise_exception=True)
  44. query_set = self.get_query_set(query)
  45. return [ApplicationVersionModelSerializer(v).data for v in query_set]
  46. def page(self, query, current_page, page_size, with_valid=True):
  47. if with_valid:
  48. self.is_valid(raise_exception=True)
  49. return page_search(current_page, page_size,
  50. self.get_query_set(query),
  51. post_records_handler=lambda v: ApplicationVersionModelSerializer(v).data)
  52. class Operate(serializers.Serializer):
  53. workspace_id = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_("Workspace ID"))
  54. application_id = serializers.UUIDField(required=True, label=_("Application ID"))
  55. application_version_id = serializers.UUIDField(required=True,
  56. label=_("Application version ID"))
  57. def is_valid(self, *, raise_exception=False):
  58. super().is_valid(raise_exception=True)
  59. workspace_id = self.data.get('workspace_id')
  60. query_set = QuerySet(Application).filter(id=self.data.get('application_id'))
  61. if workspace_id:
  62. query_set = query_set.filter(workspace_id=workspace_id)
  63. if not query_set.exists():
  64. raise AppApiException(500, _('Application id does not exist'))
  65. def one(self, with_valid=True):
  66. if with_valid:
  67. self.is_valid(raise_exception=True)
  68. application_version = QuerySet(ApplicationVersion).filter(application_id=self.data.get('application_id'),
  69. id=self.data.get(
  70. 'application_version_id')).first()
  71. if application_version is not None:
  72. return ApplicationVersionModelSerializer(application_version).data
  73. else:
  74. raise AppApiException(500, _('Workflow version does not exist'))
  75. def edit(self, instance: Dict, with_valid=True):
  76. if with_valid:
  77. self.is_valid(raise_exception=True)
  78. ApplicationVersionEditSerializer(data=instance).is_valid(raise_exception=True)
  79. application_version = QuerySet(ApplicationVersion).filter(application_id=self.data.get('application_id'),
  80. id=self.data.get(
  81. 'application_version_id')).first()
  82. if application_version is not None:
  83. name = instance.get('name', None)
  84. if name is not None and len(name) > 0:
  85. application_version.name = name
  86. application_version.save()
  87. return ApplicationVersionModelSerializer(application_version).data
  88. else:
  89. raise AppApiException(500, _('Workflow version does not exist'))