feat: 抽象View Mapping Serializer架构设计; 重构工单View、Serializer模块 (#5371)

* perf: 优化工单模块(修改迁移文件->Model assignees_display 字段类型为list)

* ignore: try `view` `serializer jsonfields` Map design (1)

* ignore: try `view` `serializer jsonfields` Map design (2)

* ignore: try `view` `serializer jsonfields` Map design (3)

* ignore: try `view` `serializer jsonfields` Map design (4)

* ignore: try `view` `serializer jsonfields` Map design (5)

* ignore: try `view` `serializer.DynamicMappingField` Mapping design (6)

* feat: 抽象view_mapping_serializer逻辑架构; 重构工单View、Serializer模块

* feat: 抽象view_mapping_serializer逻辑架构; 重构工单View、Serializer模块(2)

* feat: 抽象view_mapping_serializer逻辑架构; 重构工单View、Serializer模块(3)

* feat: 抽象view_mapping_serializer逻辑架构; 重构工单View、Serializer模块(4)

Co-authored-by: Bai <bugatti_it@163.com>
This commit is contained in:
fit2bot
2021-01-02 07:25:23 +08:00
committed by GitHub
parent 5c483084b7
commit cef93abb2f
48 changed files with 1137 additions and 795 deletions

View File

@@ -1,32 +0,0 @@
from tickets import const, serializers
__all__ = ['TicketJSONFieldsModelSerializerViewMixin']
class TicketJSONFieldsModelSerializerViewMixin:
json_fields_category_mapping = {
'meta': {
'type': const.TicketTypeChoices.values,
},
}
json_fields_serializer_classes = {
'meta': {
'type': {
const.TicketTypeChoices.apply_asset.value: {
'default': serializers.TicketMetaApplyAssetSerializer,
'open': serializers.TicketMetaApplyAssetApplySerializer,
'approve': serializers.TicketMetaApplyAssetApproveSerializer
},
const.TicketTypeChoices.apply_application.value: {
'default': serializers.TicketMetaApplyApplicationSerializer,
'open': serializers.TicketMetaApplyApplicationApplySerializer,
'approve': serializers.TicketMetaApplyApplicationApproveSerializer,
},
const.TicketTypeChoices.login_confirm.value: {
'default': serializers.TicketMetaLoginConfirmSerializer,
'open': serializers.TicketMetaLoginConfirmApplySerializer
}
}
}
}

View File

@@ -8,16 +8,15 @@ from rest_framework.exceptions import MethodNotAllowed
from common.mixins.api import CommonApiMixin
from common.permissions import IsValidUser, IsOrgAdmin
from common.const.http import POST, PUT
from tickets import serializers
from tickets import serializers, const
from tickets.permissions.ticket import IsAssignee, NotClosed
from tickets.models import Ticket
from tickets.api.ticket.mixin import TicketJSONFieldsModelSerializerViewMixin
__all__ = ['TicketViewSet']
class TicketViewSet(TicketJSONFieldsModelSerializerViewMixin, CommonApiMixin, viewsets.ModelViewSet):
class TicketViewSet(CommonApiMixin, viewsets.ModelViewSet):
permission_classes = (IsValidUser,)
serializer_class = serializers.TicketSerializer
serializer_classes = {
@@ -64,3 +63,11 @@ class TicketViewSet(TicketJSONFieldsModelSerializerViewMixin, CommonApiMixin, vi
@action(detail=True, methods=[PUT], permission_classes=[IsOrgAdmin, IsAssignee, NotClosed])
def close(self, request, *args, **kwargs):
return super().update(request, *args, **kwargs)
def get_dynamic_mapping_fields_mapping_rule(self):
from tickets.serializers.ticket.meta import get_meta_field_mapping_rule_by_view
meta_field_mapping_rule = get_meta_field_mapping_rule_by_view(self)
fields_mapping_rule = {
'meta': meta_field_mapping_rule,
}
return fields_mapping_rule