mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 04:50:36 +03:00
Backend refactoring: use PrimaryKeyRelatedField
This commit is contained in:
parent
38bbf04de6
commit
a6822e2f2b
|
@ -4,9 +4,6 @@
|
|||
def constituentaNotOwned(title: str):
|
||||
return f'Конституента не принадлежит схеме: {title}'
|
||||
|
||||
def constituentaNotExists():
|
||||
return 'Конституента не существует'
|
||||
|
||||
def renameTrivial(name: str):
|
||||
return f'Имя должно отличаться от текущего: {name}'
|
||||
|
||||
|
|
|
@ -16,12 +16,13 @@ from .data_access import (
|
|||
VersionSerializer,
|
||||
VersionCreateSerializer,
|
||||
ConstituentaSerializer,
|
||||
CstStructuredSerializer,
|
||||
CstTargetSerializer,
|
||||
CstMoveSerializer,
|
||||
CstSubstituteSerializer,
|
||||
CstCreateSerializer,
|
||||
CstRenameSerializer,
|
||||
CstListSerializer
|
||||
CstListSerializer,
|
||||
InlineSynthesisSerializer
|
||||
)
|
||||
from .schema_typing import (
|
||||
NewCstResponse,
|
||||
|
|
|
@ -5,10 +5,6 @@ from rest_framework import serializers
|
|||
from cctext import Resolver, Reference, ReferenceType, EntityReference, SyntacticReference
|
||||
|
||||
|
||||
ConstituentaID = serializers.IntegerField
|
||||
NodeID = serializers.IntegerField
|
||||
|
||||
|
||||
class ExpressionSerializer(serializers.Serializer):
|
||||
''' Serializer: RSLang expression. '''
|
||||
expression = serializers.CharField()
|
||||
|
@ -77,7 +73,7 @@ class NodeDataSerializer(serializers.Serializer):
|
|||
|
||||
class ASTNodeSerializer(serializers.Serializer):
|
||||
''' Serializer: Syntax tree node. '''
|
||||
uid = NodeID()
|
||||
uid = serializers.IntegerField()
|
||||
parent = serializers.IntegerField() # type: ignore
|
||||
typeID = serializers.IntegerField()
|
||||
start = serializers.IntegerField()
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
''' Serializers for persistent data manipulation. '''
|
||||
from typing import Optional, cast
|
||||
from rest_framework import serializers
|
||||
from rest_framework.serializers import PrimaryKeyRelatedField as PKField
|
||||
|
||||
from .basics import ConstituentaID, CstParseSerializer
|
||||
from .basics import CstParseSerializer
|
||||
|
||||
from .io_pyconcept import PyConceptAdapter
|
||||
|
||||
|
@ -10,20 +11,6 @@ from ..models import Constituenta, LibraryItem, RSForm, Version, CstType
|
|||
from .. import messages as msg
|
||||
|
||||
|
||||
def _try_access_constituenta(item_id: str, schema: LibraryItem) -> Constituenta:
|
||||
try:
|
||||
cst = Constituenta.objects.get(pk=item_id)
|
||||
except Constituenta.DoesNotExist as exception:
|
||||
raise serializers.ValidationError({
|
||||
f'{item_id}': msg.constituentaNotExists()
|
||||
}) from exception
|
||||
if cst.schema != schema:
|
||||
raise serializers.ValidationError({
|
||||
f'{item_id}': msg.constituentaNotOwned(schema.title)
|
||||
})
|
||||
return cst
|
||||
|
||||
|
||||
class LibraryItemSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: LibraryItem entry. '''
|
||||
class Meta:
|
||||
|
@ -106,6 +93,16 @@ class ConstituentaSerializer(serializers.ModelSerializer):
|
|||
return result
|
||||
|
||||
|
||||
class CstDetailsSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: Constituenta data including parse. '''
|
||||
parse = CstParseSerializer()
|
||||
|
||||
class Meta:
|
||||
''' serializer metadata. '''
|
||||
model = Constituenta
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class CstCreateSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: Constituenta creation. '''
|
||||
insert_after = serializers.IntegerField(required=False, allow_null=True)
|
||||
|
@ -119,49 +116,6 @@ class CstCreateSerializer(serializers.ModelSerializer):
|
|||
'insert_after', 'term_forms'
|
||||
|
||||
|
||||
class CstStructuredSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: Constituenta structure production. '''
|
||||
class Meta:
|
||||
''' serializer metadata. '''
|
||||
model = Constituenta
|
||||
fields = ('id',)
|
||||
|
||||
def validate(self, attrs):
|
||||
schema = cast(LibraryItem, self.context['schema'])
|
||||
cst = _try_access_constituenta(self.initial_data['id'], schema)
|
||||
if cst.cst_type not in [CstType.FUNCTION, CstType.STRUCTURED, CstType.TERM]:
|
||||
raise serializers.ValidationError({
|
||||
f'{cst.id}': msg.constituentaNoStructure()
|
||||
})
|
||||
self.instance = cst
|
||||
return attrs
|
||||
|
||||
|
||||
class CstRenameSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: Constituenta renaming. '''
|
||||
class Meta:
|
||||
''' serializer metadata. '''
|
||||
model = Constituenta
|
||||
fields = 'id', 'alias', 'cst_type'
|
||||
|
||||
def validate(self, attrs):
|
||||
schema = cast(LibraryItem, self.context['schema'])
|
||||
cst = _try_access_constituenta(self.initial_data['id'], schema)
|
||||
new_alias = self.initial_data['alias']
|
||||
if cst.alias == new_alias:
|
||||
raise serializers.ValidationError({
|
||||
'alias': msg.renameTrivial(new_alias)
|
||||
})
|
||||
if RSForm(schema).constituents().filter(alias=new_alias).exists():
|
||||
raise serializers.ValidationError({
|
||||
'alias': msg.renameTaken(new_alias)
|
||||
})
|
||||
self.instance = cst
|
||||
attrs['schema'] = schema
|
||||
attrs['id'] = self.initial_data['id']
|
||||
return attrs
|
||||
|
||||
|
||||
class RSFormSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: Detailed data for RSForm. '''
|
||||
subscribers = serializers.ListField(
|
||||
|
@ -204,16 +158,6 @@ class RSFormSerializer(serializers.ModelSerializer):
|
|||
return result | data
|
||||
|
||||
|
||||
class CstDetailsSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: Constituenta data including parse. '''
|
||||
parse = CstParseSerializer()
|
||||
|
||||
class Meta:
|
||||
''' serializer metadata. '''
|
||||
model = Constituenta
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class RSFormParseSerializer(serializers.ModelSerializer):
|
||||
''' Serializer: Detailed data for RSForm including parse. '''
|
||||
subscribers = serializers.ListField(
|
||||
|
@ -250,14 +194,14 @@ class RSFormParseSerializer(serializers.ModelSerializer):
|
|||
|
||||
class CstSubstituteSerializer(serializers.Serializer):
|
||||
''' Serializer: Constituenta substitution. '''
|
||||
original = ConstituentaID()
|
||||
substitution = ConstituentaID()
|
||||
original = PKField(many=False, queryset=Constituenta.objects.all())
|
||||
substitution = PKField(many=False, queryset=Constituenta.objects.all())
|
||||
transfer_term = serializers.BooleanField(required=False, default=False)
|
||||
|
||||
def validate(self, attrs):
|
||||
schema = cast(LibraryItem, self.context['schema'])
|
||||
original_cst = Constituenta.objects.get(pk=self.initial_data['original'])
|
||||
substitution_cst = Constituenta.objects.get(pk=self.initial_data['substitution'])
|
||||
original_cst = cast(Constituenta, attrs['original'])
|
||||
substitution_cst = cast(Constituenta, attrs['substitution'])
|
||||
if original_cst.alias == substitution_cst.alias:
|
||||
raise serializers.ValidationError({
|
||||
'alias': msg.substituteTrivial(original_cst.alias)
|
||||
|
@ -276,22 +220,81 @@ class CstSubstituteSerializer(serializers.Serializer):
|
|||
return attrs
|
||||
|
||||
|
||||
class CstListSerializer(serializers.Serializer):
|
||||
''' Serializer: List of constituents from one origin. '''
|
||||
items = serializers.ListField(
|
||||
child=serializers.IntegerField()
|
||||
)
|
||||
class CstTargetSerializer(serializers.Serializer):
|
||||
''' Serializer: Target single Constituenta. '''
|
||||
target = PKField(many=False, queryset=Constituenta.objects.all())
|
||||
|
||||
def validate(self, attrs):
|
||||
schema = cast(LibraryItem, self.context['schema'])
|
||||
cstList = []
|
||||
cst = cast(Constituenta, attrs['target'])
|
||||
if schema and cst.schema != schema:
|
||||
raise serializers.ValidationError({
|
||||
f'{cst.id}': msg.constituentaNotOwned(schema.title)
|
||||
})
|
||||
if cst.cst_type not in [CstType.FUNCTION, CstType.STRUCTURED, CstType.TERM]:
|
||||
raise serializers.ValidationError({
|
||||
f'{cst.id}': msg.constituentaNoStructure()
|
||||
})
|
||||
self.instance = cst
|
||||
return attrs
|
||||
|
||||
|
||||
class CstRenameSerializer(serializers.Serializer):
|
||||
''' Serializer: Constituenta renaming. '''
|
||||
target = PKField(many=False, queryset=Constituenta.objects.all())
|
||||
alias = serializers.CharField()
|
||||
cst_type = serializers.CharField()
|
||||
|
||||
def validate(self, attrs):
|
||||
attrs = super().validate(attrs)
|
||||
schema = cast(LibraryItem, self.context['schema'])
|
||||
cst = cast(Constituenta, attrs['target'])
|
||||
if cst.schema != schema:
|
||||
raise serializers.ValidationError({
|
||||
f'{cst.id}': msg.constituentaNotOwned(schema.title)
|
||||
})
|
||||
new_alias = self.initial_data['alias']
|
||||
if cst.alias == new_alias:
|
||||
raise serializers.ValidationError({
|
||||
'alias': msg.renameTrivial(new_alias)
|
||||
})
|
||||
if RSForm(schema).constituents().filter(alias=new_alias).exists():
|
||||
raise serializers.ValidationError({
|
||||
'alias': msg.renameTaken(new_alias)
|
||||
})
|
||||
return attrs
|
||||
|
||||
|
||||
class CstListSerializer(serializers.Serializer):
|
||||
''' Serializer: List of constituents from one origin. '''
|
||||
items = PKField(many=True, queryset=Constituenta.objects.all())
|
||||
|
||||
def validate(self, attrs):
|
||||
schema = cast(LibraryItem, self.context['schema'])
|
||||
if not schema:
|
||||
return attrs
|
||||
|
||||
for item in attrs['items']:
|
||||
cst = _try_access_constituenta(item, schema)
|
||||
cstList.append(cst)
|
||||
attrs['constituents'] = cstList
|
||||
if item.schema != schema:
|
||||
raise serializers.ValidationError({
|
||||
f'{item.id}': msg.constituentaNotOwned(schema.title)
|
||||
})
|
||||
return attrs
|
||||
|
||||
|
||||
class CstMoveSerializer(CstListSerializer):
|
||||
''' Serializer: Change constituenta position. '''
|
||||
move_to = serializers.IntegerField()
|
||||
|
||||
|
||||
class InlineSynthesisSerializer(serializers.Serializer):
|
||||
''' Serializer: Inline synthesis operation input. '''
|
||||
receiver = PKField(many=False, queryset=LibraryItem.objects.all())
|
||||
source = PKField(many=False, queryset=LibraryItem.objects.all()) # type: ignore
|
||||
items = PKField(many=True, queryset=Constituenta.objects.all())
|
||||
substitutions = serializers.ListField(
|
||||
child=CstSubstituteSerializer()
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
return attrs
|
||||
|
|
|
@ -220,7 +220,7 @@ class TestRSFormViewset(APITestCase):
|
|||
definition_resolved='Test2'
|
||||
)
|
||||
|
||||
data = {'id': cst2.pk, 'alias': 'D2', 'cst_type': 'term'}
|
||||
data = {'target': cst2.pk, 'alias': 'D2', 'cst_type': 'term'}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{self.unowned.item.id}/cst-rename',
|
||||
data=data, format='json'
|
||||
|
@ -233,21 +233,21 @@ class TestRSFormViewset(APITestCase):
|
|||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
data = {'id': cst1.pk, 'alias': cst1.alias, 'cst_type': 'term'}
|
||||
data = {'target': cst1.pk, 'alias': cst1.alias, 'cst_type': 'term'}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{self.owned.item.id}/cst-rename',
|
||||
data=data, format='json'
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
data = {'id': cst1.pk, 'alias': cst3.alias}
|
||||
data = {'target': cst1.pk, 'alias': cst3.alias}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{self.owned.item.id}/cst-rename',
|
||||
data=data, format='json'
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
data = {'alias': 'D2', 'cst_type': 'term', 'id': cst1.pk}
|
||||
data = {'target': cst1.pk, 'alias': 'D2', 'cst_type': 'term'}
|
||||
item = self.owned.item
|
||||
d1 = Constituenta.objects.create(schema=item, alias='D1', cst_type='term', order=4)
|
||||
d1.term_raw = '@{X1|plur}'
|
||||
|
@ -519,21 +519,21 @@ class TestRSFormViewset(APITestCase):
|
|||
a1.save()
|
||||
f1.save()
|
||||
|
||||
data = {'id': invalid_id}
|
||||
data = {'target': invalid_id}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{item.id}/cst-produce-structure',
|
||||
data=data, format='json'
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
data = {'id': x1.id}
|
||||
data = {'target': x1.id}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{item.id}/cst-produce-structure',
|
||||
data=data, format='json'
|
||||
)
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
data = {'id': s2.id}
|
||||
data = {'target': s2.id}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{item.id}/cst-produce-structure',
|
||||
data=data, format='json'
|
||||
|
@ -542,7 +542,7 @@ class TestRSFormViewset(APITestCase):
|
|||
|
||||
# Testing simple structure
|
||||
s1.refresh_from_db()
|
||||
data = {'id': s1.id}
|
||||
data = {'target': s1.id}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{item.id}/cst-produce-structure',
|
||||
data=data, format='json'
|
||||
|
@ -558,7 +558,7 @@ class TestRSFormViewset(APITestCase):
|
|||
|
||||
# Testing complex structure
|
||||
s3.refresh_from_db()
|
||||
data = {'id': s3.id}
|
||||
data = {'target': s3.id}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{item.id}/cst-produce-structure',
|
||||
data=data, format='json'
|
||||
|
@ -572,7 +572,7 @@ class TestRSFormViewset(APITestCase):
|
|||
|
||||
# Testing function
|
||||
f1.refresh_from_db()
|
||||
data = {'id': f1.id}
|
||||
data = {'target': f1.id}
|
||||
response = self.client.patch(
|
||||
f'/api/rsforms/{item.id}/cst-produce-structure',
|
||||
data=data, format='json'
|
||||
|
|
|
@ -19,6 +19,8 @@ urlpatterns = [
|
|||
path('rsforms/<int:pk_item>/versions/create', views.create_version),
|
||||
path('rsforms/<int:pk_item>/versions/<int:pk_version>', views.retrieve_version),
|
||||
|
||||
path('operations/inline-synthesis', views.inline_synthesis),
|
||||
|
||||
path('rslang/parse-expression', views.parse_expression),
|
||||
path('rslang/to-ascii', views.convert_to_ascii),
|
||||
path('rslang/to-math', views.convert_to_math),
|
||||
|
|
|
@ -15,6 +15,7 @@ from .rsforms import (
|
|||
RSFormViewSet, TrsImportView,
|
||||
create_rsform
|
||||
)
|
||||
from .operations import inline_synthesis
|
||||
from .cctext import (
|
||||
parse_text,
|
||||
generate_lexeme,
|
||||
|
|
33
rsconcept/backend/apps/rsform/views/operations.py
Normal file
33
rsconcept/backend/apps/rsform/views/operations.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
''' Endpoints for RSForm. '''
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.request import Request
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework import status as c
|
||||
|
||||
from .. import models as m
|
||||
from .. import serializers as s
|
||||
|
||||
@extend_schema(
|
||||
summary='Inline synthesis: merge one schema into another',
|
||||
tags=['Operations'],
|
||||
request=s.InlineSynthesisSerializer,
|
||||
responses={c.HTTP_200_OK: s.RSFormParseSerializer}
|
||||
)
|
||||
@api_view(['PATCH'])
|
||||
def inline_synthesis(request: Request):
|
||||
''' Endpoint: Inline synthesis. '''
|
||||
serializer = s.InlineSynthesisSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
schema = m.RSForm(serializer.validated_data['receiver'])
|
||||
# schema.substitute(
|
||||
# original=serializer.validated_data['original'],
|
||||
# substitution=serializer.validated_data['substitution'],
|
||||
# transfer_term=serializer.validated_data['transfer_term']
|
||||
# )
|
||||
schema.item.refresh_from_db()
|
||||
return Response(
|
||||
status=c.HTTP_200_OK,
|
||||
data=s.RSFormParseSerializer(schema.item).data
|
||||
)
|
|
@ -68,7 +68,7 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
|||
@extend_schema(
|
||||
summary='produce the structure of a given constituenta',
|
||||
tags=['RSForm'],
|
||||
request=s.CstStructuredSerializer,
|
||||
request=s.CstTargetSerializer,
|
||||
responses={c.HTTP_200_OK: s.NewMultiCstResponse}
|
||||
)
|
||||
@action(detail=True, methods=['patch'], url_path='cst-produce-structure')
|
||||
|
@ -76,9 +76,9 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
|||
''' Produce a term for every element of the target constituenta typification. '''
|
||||
schema = self._get_schema()
|
||||
|
||||
serializer = s.CstStructuredSerializer(data=request.data, context={'schema': schema.item})
|
||||
serializer = s.CstTargetSerializer(data=request.data, context={'schema': schema.item})
|
||||
serializer.is_valid(raise_exception=True)
|
||||
cst = cast(m.Constituenta, serializer.instance)
|
||||
cst = cast(m.Constituenta, serializer.validated_data['target'])
|
||||
|
||||
schema_details = s.RSFormParseSerializer(schema.item).data['items']
|
||||
cst_parse = next(item for item in schema_details if item['id']==cst.id)['parse']
|
||||
|
@ -110,12 +110,19 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
|||
schema = self._get_schema()
|
||||
serializer = s.CstRenameSerializer(data=request.data, context={'schema': schema.item})
|
||||
serializer.is_valid(raise_exception=True)
|
||||
old_alias = m.Constituenta.objects.get(pk=request.data['id']).alias
|
||||
serializer.save()
|
||||
mapping = { old_alias: serializer.validated_data['alias'] }
|
||||
|
||||
cst = cast(m.Constituenta, serializer.validated_data['target'])
|
||||
old_alias = cst.alias
|
||||
|
||||
cst.alias = serializer.validated_data['alias']
|
||||
cst.cst_type = serializer.validated_data['cst_type']
|
||||
cst.save()
|
||||
|
||||
mapping = { old_alias: cst.alias }
|
||||
schema.apply_mapping(mapping, change_aliases=False)
|
||||
schema.item.refresh_from_db()
|
||||
cst = m.Constituenta.objects.get(pk=serializer.validated_data['id'])
|
||||
cst.refresh_from_db()
|
||||
|
||||
return Response(
|
||||
status=c.HTTP_200_OK,
|
||||
data={
|
||||
|
@ -166,7 +173,7 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
|||
context={'schema': schema.item}
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
schema.delete_cst(serializer.validated_data['constituents'])
|
||||
schema.delete_cst(serializer.validated_data['items'])
|
||||
schema.item.refresh_from_db()
|
||||
return Response(
|
||||
status=c.HTTP_200_OK,
|
||||
|
@ -189,7 +196,7 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
|
|||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
schema.move_cst(
|
||||
listCst=serializer.validated_data['constituents'],
|
||||
listCst=serializer.validated_data['items'],
|
||||
target=serializer.validated_data['move_to']
|
||||
)
|
||||
schema.item.refresh_from_db()
|
||||
|
|
|
@ -11,10 +11,10 @@ import {
|
|||
IConstituentaList,
|
||||
IConstituentaMeta,
|
||||
ICstCreateData,
|
||||
ICstID,
|
||||
ICstMovetoData,
|
||||
ICstRenameData,
|
||||
ICstSubstituteData,
|
||||
ICstTarget,
|
||||
ICstUpdateData,
|
||||
IRSForm,
|
||||
IRSFormUploadData
|
||||
|
@ -64,7 +64,7 @@ interface IRSFormContext {
|
|||
upload: (data: IRSFormUploadData, callback: () => void) => void;
|
||||
|
||||
resetAliases: (callback: () => void) => void;
|
||||
produceStructure: (data: ICstID, callback?: DataCallback<ConstituentaID[]>) => void;
|
||||
produceStructure: (data: ICstTarget, callback?: DataCallback<ConstituentaID[]>) => void;
|
||||
|
||||
cstCreate: (data: ICstCreateData, callback?: DataCallback<IConstituentaMeta>) => void;
|
||||
cstRename: (data: ICstRenameData, callback?: DataCallback<IConstituentaMeta>) => void;
|
||||
|
@ -265,7 +265,7 @@ export const RSFormState = ({ schemaID, versionID, children }: RSFormStateProps)
|
|||
);
|
||||
|
||||
const produceStructure = useCallback(
|
||||
(data: ICstID, callback?: DataCallback<ConstituentaID[]>) => {
|
||||
(data: ICstTarget, callback?: DataCallback<ConstituentaID[]>) => {
|
||||
setError(undefined);
|
||||
patchProduceStructure(schemaID, {
|
||||
data: data,
|
||||
|
|
|
@ -83,9 +83,11 @@ export interface IConstituentaMeta {
|
|||
}
|
||||
|
||||
/**
|
||||
* Represents id for {@link IConstituenta}.
|
||||
* Represents target {@link IConstituenta}.
|
||||
*/
|
||||
export interface ICstID extends Pick<IConstituentaMeta, 'id'> {}
|
||||
export interface ICstTarget {
|
||||
target: ConstituentaID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents Constituenta.
|
||||
|
@ -143,7 +145,7 @@ export interface ICstUpdateData
|
|||
/**
|
||||
* Represents data, used in renaming {@link IConstituenta}.
|
||||
*/
|
||||
export interface ICstRenameData extends Pick<IConstituentaMeta, 'id' | 'alias' | 'cst_type'> {}
|
||||
export interface ICstRenameData extends ICstTarget, Pick<IConstituentaMeta, 'alias' | 'cst_type'> {}
|
||||
|
||||
/**
|
||||
* Represents data, used in merging {@link IConstituenta}.
|
||||
|
|
|
@ -33,10 +33,10 @@ import {
|
|||
IConstituenta,
|
||||
IConstituentaMeta,
|
||||
ICstCreateData,
|
||||
ICstID,
|
||||
ICstMovetoData,
|
||||
ICstRenameData,
|
||||
ICstSubstituteData,
|
||||
ICstTarget,
|
||||
ICstUpdateData,
|
||||
IRSForm,
|
||||
TermForm
|
||||
|
@ -351,7 +351,7 @@ export const RSEditState = ({
|
|||
return;
|
||||
}
|
||||
const data: ICstRenameData = {
|
||||
id: activeCst.id,
|
||||
target: activeCst.id,
|
||||
alias: activeCst.alias,
|
||||
cst_type: activeCst.cst_type
|
||||
};
|
||||
|
@ -390,8 +390,8 @@ export const RSEditState = ({
|
|||
if (!activeCst) {
|
||||
return;
|
||||
}
|
||||
const data: ICstID = {
|
||||
id: activeCst.id
|
||||
const data: ICstTarget = {
|
||||
target: activeCst.id
|
||||
};
|
||||
model.produceStructure(data, cstList => {
|
||||
toast.success(`Добавлены конституенты: ${cstList.length}`);
|
||||
|
|
|
@ -27,10 +27,10 @@ import {
|
|||
IConstituentaMeta,
|
||||
ICstCreateData,
|
||||
ICstCreatedResponse,
|
||||
ICstID,
|
||||
ICstMovetoData,
|
||||
ICstRenameData,
|
||||
ICstSubstituteData,
|
||||
ICstTarget,
|
||||
ICstUpdateData,
|
||||
IProduceStructureResponse,
|
||||
IRSFormCreateData,
|
||||
|
@ -319,15 +319,15 @@ export function patchConstituenta(target: string, request: FrontExchange<ICstUpd
|
|||
|
||||
export function patchRenameConstituenta(schema: string, request: FrontExchange<ICstRenameData, ICstCreatedResponse>) {
|
||||
AxiosPatch({
|
||||
title: `Renaming constituenta id=${request.data.id} for schema id=${schema}`,
|
||||
title: `Renaming constituenta id=${request.data.target} for schema id=${schema}`,
|
||||
endpoint: `/api/rsforms/${schema}/cst-rename`,
|
||||
request: request
|
||||
});
|
||||
}
|
||||
|
||||
export function patchProduceStructure(schema: string, request: FrontExchange<ICstID, IProduceStructureResponse>) {
|
||||
export function patchProduceStructure(schema: string, request: FrontExchange<ICstTarget, IProduceStructureResponse>) {
|
||||
AxiosPatch({
|
||||
title: `Producing structure constituenta id=${request.data.id} for schema id=${schema}`,
|
||||
title: `Producing structure constituenta id=${request.data.target} for schema id=${schema}`,
|
||||
endpoint: `/api/rsforms/${schema}/cst-produce-structure`,
|
||||
request: request
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue
Block a user