Backend refactoring: use PrimaryKeyRelatedField

This commit is contained in:
IRBorisov 2024-03-21 21:05:12 +03:00
parent 38bbf04de6
commit a6822e2f2b
13 changed files with 166 additions and 124 deletions

View File

@ -4,9 +4,6 @@
def constituentaNotOwned(title: str): def constituentaNotOwned(title: str):
return f'Конституента не принадлежит схеме: {title}' return f'Конституента не принадлежит схеме: {title}'
def constituentaNotExists():
return 'Конституента не существует'
def renameTrivial(name: str): def renameTrivial(name: str):
return f'Имя должно отличаться от текущего: {name}' return f'Имя должно отличаться от текущего: {name}'

View File

@ -16,12 +16,13 @@ from .data_access import (
VersionSerializer, VersionSerializer,
VersionCreateSerializer, VersionCreateSerializer,
ConstituentaSerializer, ConstituentaSerializer,
CstStructuredSerializer, CstTargetSerializer,
CstMoveSerializer, CstMoveSerializer,
CstSubstituteSerializer, CstSubstituteSerializer,
CstCreateSerializer, CstCreateSerializer,
CstRenameSerializer, CstRenameSerializer,
CstListSerializer CstListSerializer,
InlineSynthesisSerializer
) )
from .schema_typing import ( from .schema_typing import (
NewCstResponse, NewCstResponse,

View File

@ -5,10 +5,6 @@ from rest_framework import serializers
from cctext import Resolver, Reference, ReferenceType, EntityReference, SyntacticReference from cctext import Resolver, Reference, ReferenceType, EntityReference, SyntacticReference
ConstituentaID = serializers.IntegerField
NodeID = serializers.IntegerField
class ExpressionSerializer(serializers.Serializer): class ExpressionSerializer(serializers.Serializer):
''' Serializer: RSLang expression. ''' ''' Serializer: RSLang expression. '''
expression = serializers.CharField() expression = serializers.CharField()
@ -77,7 +73,7 @@ class NodeDataSerializer(serializers.Serializer):
class ASTNodeSerializer(serializers.Serializer): class ASTNodeSerializer(serializers.Serializer):
''' Serializer: Syntax tree node. ''' ''' Serializer: Syntax tree node. '''
uid = NodeID() uid = serializers.IntegerField()
parent = serializers.IntegerField() # type: ignore parent = serializers.IntegerField() # type: ignore
typeID = serializers.IntegerField() typeID = serializers.IntegerField()
start = serializers.IntegerField() start = serializers.IntegerField()

View File

@ -1,8 +1,9 @@
''' Serializers for persistent data manipulation. ''' ''' Serializers for persistent data manipulation. '''
from typing import Optional, cast from typing import Optional, cast
from rest_framework import serializers 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 from .io_pyconcept import PyConceptAdapter
@ -10,20 +11,6 @@ from ..models import Constituenta, LibraryItem, RSForm, Version, CstType
from .. import messages as msg 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): class LibraryItemSerializer(serializers.ModelSerializer):
''' Serializer: LibraryItem entry. ''' ''' Serializer: LibraryItem entry. '''
class Meta: class Meta:
@ -106,6 +93,16 @@ class ConstituentaSerializer(serializers.ModelSerializer):
return result 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): class CstCreateSerializer(serializers.ModelSerializer):
''' Serializer: Constituenta creation. ''' ''' Serializer: Constituenta creation. '''
insert_after = serializers.IntegerField(required=False, allow_null=True) insert_after = serializers.IntegerField(required=False, allow_null=True)
@ -119,49 +116,6 @@ class CstCreateSerializer(serializers.ModelSerializer):
'insert_after', 'term_forms' '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): class RSFormSerializer(serializers.ModelSerializer):
''' Serializer: Detailed data for RSForm. ''' ''' Serializer: Detailed data for RSForm. '''
subscribers = serializers.ListField( subscribers = serializers.ListField(
@ -204,16 +158,6 @@ class RSFormSerializer(serializers.ModelSerializer):
return result | data 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): class RSFormParseSerializer(serializers.ModelSerializer):
''' Serializer: Detailed data for RSForm including parse. ''' ''' Serializer: Detailed data for RSForm including parse. '''
subscribers = serializers.ListField( subscribers = serializers.ListField(
@ -250,14 +194,14 @@ class RSFormParseSerializer(serializers.ModelSerializer):
class CstSubstituteSerializer(serializers.Serializer): class CstSubstituteSerializer(serializers.Serializer):
''' Serializer: Constituenta substitution. ''' ''' Serializer: Constituenta substitution. '''
original = ConstituentaID() original = PKField(many=False, queryset=Constituenta.objects.all())
substitution = ConstituentaID() substitution = PKField(many=False, queryset=Constituenta.objects.all())
transfer_term = serializers.BooleanField(required=False, default=False) transfer_term = serializers.BooleanField(required=False, default=False)
def validate(self, attrs): def validate(self, attrs):
schema = cast(LibraryItem, self.context['schema']) schema = cast(LibraryItem, self.context['schema'])
original_cst = Constituenta.objects.get(pk=self.initial_data['original']) original_cst = cast(Constituenta, attrs['original'])
substitution_cst = Constituenta.objects.get(pk=self.initial_data['substitution']) substitution_cst = cast(Constituenta, attrs['substitution'])
if original_cst.alias == substitution_cst.alias: if original_cst.alias == substitution_cst.alias:
raise serializers.ValidationError({ raise serializers.ValidationError({
'alias': msg.substituteTrivial(original_cst.alias) 'alias': msg.substituteTrivial(original_cst.alias)
@ -276,22 +220,81 @@ class CstSubstituteSerializer(serializers.Serializer):
return attrs return attrs
class CstListSerializer(serializers.Serializer): class CstTargetSerializer(serializers.Serializer):
''' Serializer: List of constituents from one origin. ''' ''' Serializer: Target single Constituenta. '''
items = serializers.ListField( target = PKField(many=False, queryset=Constituenta.objects.all())
child=serializers.IntegerField()
)
def validate(self, attrs): def validate(self, attrs):
schema = cast(LibraryItem, self.context['schema']) 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']: for item in attrs['items']:
cst = _try_access_constituenta(item, schema) if item.schema != schema:
cstList.append(cst) raise serializers.ValidationError({
attrs['constituents'] = cstList f'{item.id}': msg.constituentaNotOwned(schema.title)
})
return attrs return attrs
class CstMoveSerializer(CstListSerializer): class CstMoveSerializer(CstListSerializer):
''' Serializer: Change constituenta position. ''' ''' Serializer: Change constituenta position. '''
move_to = serializers.IntegerField() 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

View File

@ -220,7 +220,7 @@ class TestRSFormViewset(APITestCase):
definition_resolved='Test2' 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( response = self.client.patch(
f'/api/rsforms/{self.unowned.item.id}/cst-rename', f'/api/rsforms/{self.unowned.item.id}/cst-rename',
data=data, format='json' data=data, format='json'
@ -233,21 +233,21 @@ class TestRSFormViewset(APITestCase):
) )
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) 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( response = self.client.patch(
f'/api/rsforms/{self.owned.item.id}/cst-rename', f'/api/rsforms/{self.owned.item.id}/cst-rename',
data=data, format='json' data=data, format='json'
) )
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) 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( response = self.client.patch(
f'/api/rsforms/{self.owned.item.id}/cst-rename', f'/api/rsforms/{self.owned.item.id}/cst-rename',
data=data, format='json' data=data, format='json'
) )
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) 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 item = self.owned.item
d1 = Constituenta.objects.create(schema=item, alias='D1', cst_type='term', order=4) d1 = Constituenta.objects.create(schema=item, alias='D1', cst_type='term', order=4)
d1.term_raw = '@{X1|plur}' d1.term_raw = '@{X1|plur}'
@ -519,21 +519,21 @@ class TestRSFormViewset(APITestCase):
a1.save() a1.save()
f1.save() f1.save()
data = {'id': invalid_id} data = {'target': invalid_id}
response = self.client.patch( response = self.client.patch(
f'/api/rsforms/{item.id}/cst-produce-structure', f'/api/rsforms/{item.id}/cst-produce-structure',
data=data, format='json' data=data, format='json'
) )
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
data = {'id': x1.id} data = {'target': x1.id}
response = self.client.patch( response = self.client.patch(
f'/api/rsforms/{item.id}/cst-produce-structure', f'/api/rsforms/{item.id}/cst-produce-structure',
data=data, format='json' data=data, format='json'
) )
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
data = {'id': s2.id} data = {'target': s2.id}
response = self.client.patch( response = self.client.patch(
f'/api/rsforms/{item.id}/cst-produce-structure', f'/api/rsforms/{item.id}/cst-produce-structure',
data=data, format='json' data=data, format='json'
@ -542,7 +542,7 @@ class TestRSFormViewset(APITestCase):
# Testing simple structure # Testing simple structure
s1.refresh_from_db() s1.refresh_from_db()
data = {'id': s1.id} data = {'target': s1.id}
response = self.client.patch( response = self.client.patch(
f'/api/rsforms/{item.id}/cst-produce-structure', f'/api/rsforms/{item.id}/cst-produce-structure',
data=data, format='json' data=data, format='json'
@ -558,7 +558,7 @@ class TestRSFormViewset(APITestCase):
# Testing complex structure # Testing complex structure
s3.refresh_from_db() s3.refresh_from_db()
data = {'id': s3.id} data = {'target': s3.id}
response = self.client.patch( response = self.client.patch(
f'/api/rsforms/{item.id}/cst-produce-structure', f'/api/rsforms/{item.id}/cst-produce-structure',
data=data, format='json' data=data, format='json'
@ -572,7 +572,7 @@ class TestRSFormViewset(APITestCase):
# Testing function # Testing function
f1.refresh_from_db() f1.refresh_from_db()
data = {'id': f1.id} data = {'target': f1.id}
response = self.client.patch( response = self.client.patch(
f'/api/rsforms/{item.id}/cst-produce-structure', f'/api/rsforms/{item.id}/cst-produce-structure',
data=data, format='json' data=data, format='json'

View File

@ -19,6 +19,8 @@ urlpatterns = [
path('rsforms/<int:pk_item>/versions/create', views.create_version), path('rsforms/<int:pk_item>/versions/create', views.create_version),
path('rsforms/<int:pk_item>/versions/<int:pk_version>', views.retrieve_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/parse-expression', views.parse_expression),
path('rslang/to-ascii', views.convert_to_ascii), path('rslang/to-ascii', views.convert_to_ascii),
path('rslang/to-math', views.convert_to_math), path('rslang/to-math', views.convert_to_math),

View File

@ -15,6 +15,7 @@ from .rsforms import (
RSFormViewSet, TrsImportView, RSFormViewSet, TrsImportView,
create_rsform create_rsform
) )
from .operations import inline_synthesis
from .cctext import ( from .cctext import (
parse_text, parse_text,
generate_lexeme, generate_lexeme,

View 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
)

View File

@ -68,7 +68,7 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
@extend_schema( @extend_schema(
summary='produce the structure of a given constituenta', summary='produce the structure of a given constituenta',
tags=['RSForm'], tags=['RSForm'],
request=s.CstStructuredSerializer, request=s.CstTargetSerializer,
responses={c.HTTP_200_OK: s.NewMultiCstResponse} responses={c.HTTP_200_OK: s.NewMultiCstResponse}
) )
@action(detail=True, methods=['patch'], url_path='cst-produce-structure') @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. ''' ''' Produce a term for every element of the target constituenta typification. '''
schema = self._get_schema() 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) 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'] schema_details = s.RSFormParseSerializer(schema.item).data['items']
cst_parse = next(item for item in schema_details if item['id']==cst.id)['parse'] 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() schema = self._get_schema()
serializer = s.CstRenameSerializer(data=request.data, context={'schema': schema.item}) serializer = s.CstRenameSerializer(data=request.data, context={'schema': schema.item})
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
old_alias = m.Constituenta.objects.get(pk=request.data['id']).alias
serializer.save() cst = cast(m.Constituenta, serializer.validated_data['target'])
mapping = { old_alias: serializer.validated_data['alias'] } 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.apply_mapping(mapping, change_aliases=False)
schema.item.refresh_from_db() schema.item.refresh_from_db()
cst = m.Constituenta.objects.get(pk=serializer.validated_data['id']) cst.refresh_from_db()
return Response( return Response(
status=c.HTTP_200_OK, status=c.HTTP_200_OK,
data={ data={
@ -166,7 +173,7 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
context={'schema': schema.item} context={'schema': schema.item}
) )
serializer.is_valid(raise_exception=True) 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() schema.item.refresh_from_db()
return Response( return Response(
status=c.HTTP_200_OK, status=c.HTTP_200_OK,
@ -189,7 +196,7 @@ class RSFormViewSet(viewsets.GenericViewSet, generics.ListAPIView, generics.Retr
) )
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
schema.move_cst( schema.move_cst(
listCst=serializer.validated_data['constituents'], listCst=serializer.validated_data['items'],
target=serializer.validated_data['move_to'] target=serializer.validated_data['move_to']
) )
schema.item.refresh_from_db() schema.item.refresh_from_db()

View File

@ -11,10 +11,10 @@ import {
IConstituentaList, IConstituentaList,
IConstituentaMeta, IConstituentaMeta,
ICstCreateData, ICstCreateData,
ICstID,
ICstMovetoData, ICstMovetoData,
ICstRenameData, ICstRenameData,
ICstSubstituteData, ICstSubstituteData,
ICstTarget,
ICstUpdateData, ICstUpdateData,
IRSForm, IRSForm,
IRSFormUploadData IRSFormUploadData
@ -64,7 +64,7 @@ interface IRSFormContext {
upload: (data: IRSFormUploadData, callback: () => void) => void; upload: (data: IRSFormUploadData, callback: () => void) => void;
resetAliases: (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; cstCreate: (data: ICstCreateData, callback?: DataCallback<IConstituentaMeta>) => void;
cstRename: (data: ICstRenameData, 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( const produceStructure = useCallback(
(data: ICstID, callback?: DataCallback<ConstituentaID[]>) => { (data: ICstTarget, callback?: DataCallback<ConstituentaID[]>) => {
setError(undefined); setError(undefined);
patchProduceStructure(schemaID, { patchProduceStructure(schemaID, {
data: data, data: data,

View File

@ -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. * Represents Constituenta.
@ -143,7 +145,7 @@ export interface ICstUpdateData
/** /**
* Represents data, used in renaming {@link IConstituenta}. * 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}. * Represents data, used in merging {@link IConstituenta}.

View File

@ -33,10 +33,10 @@ import {
IConstituenta, IConstituenta,
IConstituentaMeta, IConstituentaMeta,
ICstCreateData, ICstCreateData,
ICstID,
ICstMovetoData, ICstMovetoData,
ICstRenameData, ICstRenameData,
ICstSubstituteData, ICstSubstituteData,
ICstTarget,
ICstUpdateData, ICstUpdateData,
IRSForm, IRSForm,
TermForm TermForm
@ -351,7 +351,7 @@ export const RSEditState = ({
return; return;
} }
const data: ICstRenameData = { const data: ICstRenameData = {
id: activeCst.id, target: activeCst.id,
alias: activeCst.alias, alias: activeCst.alias,
cst_type: activeCst.cst_type cst_type: activeCst.cst_type
}; };
@ -390,8 +390,8 @@ export const RSEditState = ({
if (!activeCst) { if (!activeCst) {
return; return;
} }
const data: ICstID = { const data: ICstTarget = {
id: activeCst.id target: activeCst.id
}; };
model.produceStructure(data, cstList => { model.produceStructure(data, cstList => {
toast.success(`Добавлены конституенты: ${cstList.length}`); toast.success(`Добавлены конституенты: ${cstList.length}`);

View File

@ -27,10 +27,10 @@ import {
IConstituentaMeta, IConstituentaMeta,
ICstCreateData, ICstCreateData,
ICstCreatedResponse, ICstCreatedResponse,
ICstID,
ICstMovetoData, ICstMovetoData,
ICstRenameData, ICstRenameData,
ICstSubstituteData, ICstSubstituteData,
ICstTarget,
ICstUpdateData, ICstUpdateData,
IProduceStructureResponse, IProduceStructureResponse,
IRSFormCreateData, IRSFormCreateData,
@ -319,15 +319,15 @@ export function patchConstituenta(target: string, request: FrontExchange<ICstUpd
export function patchRenameConstituenta(schema: string, request: FrontExchange<ICstRenameData, ICstCreatedResponse>) { export function patchRenameConstituenta(schema: string, request: FrontExchange<ICstRenameData, ICstCreatedResponse>) {
AxiosPatch({ 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`, endpoint: `/api/rsforms/${schema}/cst-rename`,
request: request request: request
}); });
} }
export function patchProduceStructure(schema: string, request: FrontExchange<ICstID, IProduceStructureResponse>) { export function patchProduceStructure(schema: string, request: FrontExchange<ICstTarget, IProduceStructureResponse>) {
AxiosPatch({ 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`, endpoint: `/api/rsforms/${schema}/cst-produce-structure`,
request: request request: request
}); });