diff --git a/apps/application/migrations/0008_remove_application_api_key_is_active_and_more.py b/apps/application/migrations/0008_remove_application_api_key_is_active_and_more.py new file mode 100644 index 000000000..b1f2018c9 --- /dev/null +++ b/apps/application/migrations/0008_remove_application_api_key_is_active_and_more.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1.10 on 2023-12-08 05:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('application', '0007_application_api_key_is_active_alter_application_desc_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='application', + name='api_key_is_active', + ), + migrations.RemoveField( + model_name='application', + name='status', + ), + migrations.AddField( + model_name='applicationapikey', + name='is_active', + field=models.BooleanField(default=True, verbose_name='是否开启'), + ), + ] diff --git a/apps/application/models/api_key_model.py b/apps/application/models/api_key_model.py index 9940cef33..672423d13 100644 --- a/apps/application/models/api_key_model.py +++ b/apps/application/models/api_key_model.py @@ -20,7 +20,7 @@ class ApplicationApiKey(AppModelMixin): secret_key = models.CharField(max_length=1024, verbose_name="秘钥", unique=True) user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户id") application = models.ForeignKey(Application, on_delete=models.CASCADE, verbose_name="应用id") - + is_active = models.BooleanField(default=True, verbose_name="是否开启") class Meta: db_table = "application_api_key" diff --git a/apps/application/models/application.py b/apps/application/models/application.py index 4e9c1c1d0..a81b3d70e 100644 --- a/apps/application/models/application.py +++ b/apps/application/models/application.py @@ -25,10 +25,8 @@ class Application(AppModelMixin): prologue = models.CharField(max_length=1024, verbose_name="开场白", default="") example = ArrayField(verbose_name="示例列表", base_field=models.CharField(max_length=256, blank=True)) dialogue_number = models.IntegerField(default=0, verbose_name="会话数量") - status = models.BooleanField(default=True, verbose_name="是否发布") user = models.ForeignKey(User, on_delete=models.DO_NOTHING) model = models.ForeignKey(Model, on_delete=models.DO_NOTHING, db_constraint=False) - api_key_is_active = models.BooleanField(verbose_name="api_key是否可用", default=True) class Meta: db_table = "application" diff --git a/apps/application/serializers/application_serializers.py b/apps/application/serializers/application_serializers.py index 92a528d10..7bff525a2 100644 --- a/apps/application/serializers/application_serializers.py +++ b/apps/application/serializers/application_serializers.py @@ -133,8 +133,6 @@ class ApplicationSerializer(serializers.Serializer): prologue = serializers.CharField(required=False) example = serializers.ListSerializer(required=False, child=serializers.CharField(required=True)) dataset_id_list = serializers.ListSerializer(required=False, child=serializers.UUIDField(required=True)) - status = serializers.BooleanField(required=False) - api_key_is_active = serializers.BooleanField(required=False) def is_valid(self, *, user_id=None, raise_exception=False): super().is_valid(raise_exception=True) @@ -355,6 +353,9 @@ class ApplicationSerializer(serializers.Serializer): application_api_key in QuerySet(ApplicationApiKey).filter(user_id=user_id, application_id=application_id)] + class Edit(serializers.Serializer): + is_active = serializers.BooleanField(required=False) + class Operate(serializers.Serializer): application_id = serializers.UUIDField(required=True) @@ -367,3 +368,19 @@ class ApplicationSerializer(serializers.Serializer): application_id = self.data.get('application_id') QuerySet(ApplicationApiKey).filter(id=api_key_id, application_id=application_id).delete() + + def edit(self, instance, with_valid=True): + if with_valid: + self.is_valid(raise_exception=True) + ApplicationSerializer.Edit(data=instance).is_valid(raise_exception=True) + + if 'is_active' in instance and instance.get('is_active') is not None: + api_key_id = self.data.get("api_key_id") + application_id = self.data.get('application_id') + application_api_key = QuerySet(ApplicationApiKey).filter(id=api_key_id, + application_id=application_id).first() + if application_api_key is None: + raise AppApiException(500, '不存在') + + application_api_key.is_active = instance.get('is_active') + application_api_key.save() diff --git a/apps/application/swagger_api/application_api.py b/apps/application/swagger_api/application_api.py index 13249e1cc..8b53d56bb 100644 --- a/apps/application/swagger_api/application_api.py +++ b/apps/application/swagger_api/application_api.py @@ -91,6 +91,18 @@ class ApplicationApi(ApiMixin): description='应用api_key id') ] + @staticmethod + def get_request_body_api(): + return openapi.Schema( + type=openapi.TYPE_OBJECT, + required=[], + properties={ + 'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否激活", + description="是否激活"), + + } + ) + class AccessToken(ApiMixin): @staticmethod def get_request_params_api(): @@ -134,9 +146,6 @@ class ApplicationApi(ApiMixin): 'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Schema(type=openapi.TYPE_STRING), title="关联数据集Id列表", description="关联数据集Id列表"), - 'status': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='状态', description="状态"), - 'api_key_is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='api_key是否可用', - default=True) } ) diff --git a/apps/application/views/application_views.py b/apps/application/views/application_views.py index 56a90383a..4466d4a9b 100644 --- a/apps/application/views/application_views.py +++ b/apps/application/views/application_views.py @@ -77,6 +77,25 @@ class Application(APIView): class Operate(APIView): authentication_classes = [TokenAuth] + @action(methods=['PUT'], detail=False) + @swagger_auto_schema(operation_summary="修改应用API_KEY", + operation_id="修改应用API_KEY", + tags=['应用/API_KEY'], + manual_parameters=ApplicationApi.ApiKey.Operate.get_request_params_api(), + request_body=ApplicationApi.ApiKey.Operate.get_request_body_api()) + @has_permissions(ViewPermission( + [RoleConstants.ADMIN, RoleConstants.USER], + [lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE, + dynamic_tag=keywords.get('application_id'))], + compare=CompareConstants.AND), lambda r, k: Permission(group=Group.APPLICATION, operate=Operate.DELETE, + dynamic_tag=k.get('application_id')), + compare=CompareConstants.AND) + def put(self, request: Request, application_id: str, api_key_id: str): + return result.success( + ApplicationSerializer.ApplicationKeySerializer.Operate( + data={'application_id': application_id, 'user_id': request.user.id, + 'api_key_id': api_key_id}).edit(request.data)) + @action(methods=['DELETE'], detail=False) @swagger_auto_schema(operation_summary="删除应用API_KEY", operation_id="删除应用API_KEY",