Skip to content

Commit

Permalink
OpenConceptLab/ocl_issues#1922 Do not overwrite versions for CodeSyst…
Browse files Browse the repository at this point in the history
…em, ValueSet, ConceptMap
  • Loading branch information
rkorytkowski committed Dec 6, 2024
1 parent 08e0126 commit 752fe75
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
7 changes: 6 additions & 1 deletion core/code_systems/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ def create(self, validated_data):
ident = IdentifierSerializer.include_ocl_identifier(uri, RESOURCE_TYPE, validated_data)
source = SourceCreateOrUpdateSerializer().prepare_object(validated_data)

if ident['owner_type'] == 'orgs':
if ident['owner_type'] in ['orgs', 'Organization']:
owner = Organization.objects.filter(mnemonic=ident['owner_id']).first()
else:
owner = UserProfile.objects.filter(username=ident['owner_id']).first()
Expand Down Expand Up @@ -322,6 +322,11 @@ def update(self, instance, validated_data):
concepts = validated_data.pop('concepts', [])
source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance)

if instance.version == source.version:
self._errors.update({'version': f'Version {source.version} already exists for CodeSystem'
f' {source.mnemonic}.'})
return source

# Preserve version specific values
source_version = source.version
source_released = source.released
Expand Down
11 changes: 6 additions & 5 deletions core/concept_maps/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def create(self, validated_data):
ident = IdentifierSerializer.include_ocl_identifier(uri, RESOURCE_TYPE, validated_data)
source = SourceCreateOrUpdateSerializer().prepare_object(validated_data)

if ident['owner_type'] == 'orgs':
if ident['owner_type'] in ['orgs', 'Organization']:
owner = Organization.objects.filter(mnemonic=ident['owner_id']).first()
else:
owner = UserProfile.objects.filter(username=ident['owner_id']).first()
Expand Down Expand Up @@ -211,6 +211,11 @@ def update(self, instance, validated_data):
mappings = validated_data.pop('mappings', [])
source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance)

if instance.version == source.version:
self._errors.update({'version': f'Version {source.version} already exists for ConceptMa'
f'p {source.mnemonic}.'})
return source

# Preserve version specific values
source_version = source.version
source_released = source.released
Expand Down Expand Up @@ -254,10 +259,6 @@ def update(self, instance, validated_data):
new_mapping_serializer.is_valid(raise_exception=True)
Mapping.persist_new(new_mapping_serializer.validated_data, user)

existing_source_version = source.versions.filter(version=source_version)
if existing_source_version:
existing_source_version.delete()

source.id = None
source.version = source_version
source.released = source_released
Expand Down
7 changes: 6 additions & 1 deletion core/value_sets/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ def create(self, validated_data):
collection.version = HEAD
collection.collection_type = 'ValueSet'

parent_klass = Organization if ident['owner_type'] == 'orgs' else UserProfile
parent_klass = Organization if ident['owner_type'] in ['orgs', 'Organization'] else UserProfile
collection.set_parent(parent_klass.objects.filter(**{parent_klass.mnemonic_attr: ident['owner_id']}).first())

user = self.context['request'].user
Expand Down Expand Up @@ -203,6 +203,11 @@ def update(self, instance, validated_data):

collection = CollectionCreateOrUpdateSerializer().prepare_object(validated_data, instance)

if instance.version == collection.version:
self._errors.update({'version': f'Version {collection.version} already exists for ValueSet'
f' {collection.mnemonic}.'})
return collection

# Preserve version specific values
collection_version = collection.version
collection_released = collection.released
Expand Down

0 comments on commit 752fe75

Please sign in to comment.