| 123 | |
| 124 | |
| 125 | class FolderSerializer(serializers.Serializer): |
| 126 | id = serializers.CharField(required=True, label=_('folder id')) |
| 127 | name = serializers.CharField(required=True, label=_('folder name')) |
| 128 | desc = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_('folder description')) |
| 129 | user_id = serializers.CharField(required=True, label=_('folder user id')) |
| 130 | workspace_id = serializers.CharField(required=False, label=_('workspace id')) |
| 131 | parent_id = serializers.CharField(required=False, label=_('parent id')) |
| 132 | |
| 133 | class Create(serializers.Serializer): |
| 134 | workspace_id = serializers.CharField(required=True, label=_('workspace id')) |
| 135 | user_id = serializers.UUIDField(required=True, label=_('user id')) |
| 136 | source = serializers.CharField(required=True, label=_('source')) |
| 137 | |
| 138 | def insert(self, instance, with_valid=True): |
| 139 | if with_valid: |
| 140 | self.is_valid(raise_exception=True) |
| 141 | FolderCreateRequest(data=instance).is_valid(raise_exception=True) |
| 142 | |
| 143 | workspace_id = self.data.get('workspace_id') |
| 144 | if not workspace_id: |
| 145 | workspace_id = 'default' |
| 146 | parent_id = instance.get('parent_id') |
| 147 | if not parent_id: |
| 148 | parent_id = workspace_id |
| 149 | name = instance.get('name') |
| 150 | |
| 151 | Folder = get_folder_type(self.data.get('source')) # noqa |
| 152 | if QuerySet(Folder).filter(name=name, workspace_id=workspace_id, parent_id=parent_id).exists(): |
| 153 | raise AppApiException(500, _('Folder name already exists')) |
| 154 | # Folder 不能超过3层 |
| 155 | check_depth(self.data.get('source'), parent_id, workspace_id) |
| 156 | |
| 157 | folder = Folder( |
| 158 | id=uuid.uuid7(), |
| 159 | name=instance.get('name'), |
| 160 | desc=instance.get('desc'), |
| 161 | user_id=self.data.get('user_id'), |
| 162 | workspace_id=workspace_id, |
| 163 | parent_id=parent_id |
| 164 | ) |
| 165 | folder.save() |
| 166 | |
| 167 | UserResourcePermissionSerializer(data={ |
| 168 | 'workspace_id': self.data.get('workspace_id'), |
| 169 | 'user_id': self.data.get('user_id'), |
| 170 | 'auth_target_type': self.data.get('source') |
| 171 | }).auth_resource(str(folder.id), is_folder=True) |
| 172 | |
| 173 | return FolderSerializer(folder).data |
| 174 | |
| 175 | class Operate(serializers.Serializer): |
| 176 | id = serializers.CharField(required=True, label=_('folder id')) |
| 177 | workspace_id = serializers.CharField(required=True, allow_null=True, allow_blank=True, label=_('workspace id')) |
| 178 | source = serializers.CharField(required=True, label=_('source')) |
| 179 | user_id = serializers.UUIDField(required=True, label=_('user id')) |
| 180 | |
| 181 | @transaction.atomic |
| 182 | def edit(self, instance): |