fixes on saving entities with code

This commit is contained in:
CITE\spapacharalampous 2024-08-27 09:23:25 +03:00
parent 21a024ef11
commit d015c06fef
7 changed files with 79 additions and 21 deletions

View File

@ -194,12 +194,6 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
data.setGroupId(groupId != null ? groupId : UUID.randomUUID()); data.setGroupId(groupId != null ? groupId : UUID.randomUUID());
data.setVersionStatus(DescriptionTemplateVersionStatus.NotFinalized); data.setVersionStatus(DescriptionTemplateVersionStatus.NotFinalized);
data.setVersion((short) 1); data.setVersion((short) 1);
long activeDescriptionTemplatesForTheGroup = this.queryFactory.query(DescriptionTemplateQuery.class).disableTracking()
.isActive(IsActive.Active)
.groupIds(data.getGroupId())
.count();
if (activeDescriptionTemplatesForTheGroup > 0) throw new MyApplicationException("Description template group id is in use please use new version endpoint");
} }
if (groupId != null && !data.getGroupId().equals(groupId)) throw new MyApplicationException("Can not change description template group id"); if (groupId != null && !data.getGroupId().equals(groupId)) throw new MyApplicationException("Can not change description template group id");
@ -227,6 +221,15 @@ public class DescriptionTemplateServiceImpl implements DescriptionTemplateServic
this.entityManager.flush(); this.entityManager.flush();
if (!isUpdate) {
long activeDescriptionTemplatesForTheGroup = this.queryFactory.query(DescriptionTemplateQuery.class).disableTracking()
.isActive(IsActive.Active)
.excludedIds(data.getId())
.groupIds(data.getGroupId())
.count();
if (activeDescriptionTemplatesForTheGroup > 0) throw new MyApplicationException("Description template group id is in use please use new version endpoint");
}
this.updateVersionStatusAndSave(data, previousStatus, data.getStatus()); this.updateVersionStatusAndSave(data, previousStatus, data.getStatus());
this.entityManager.flush(); this.entityManager.flush();

View File

@ -101,8 +101,10 @@ public class DescriptionTemplateTypeServiceImpl implements DescriptionTemplateTy
DescriptionTemplateTypeEntity data; DescriptionTemplateTypeEntity data;
if (isUpdate) { if (isUpdate) {
data = this.entityManager.find(DescriptionTemplateTypeEntity.class, model.getId()); data = this.entityManager.find(DescriptionTemplateTypeEntity.class, model.getId());
if (data == null) throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DescriptionTemplateType.class.getSimpleName()}, LocaleContextHolder.getLocale())); if (data == null)
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash())) throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage()); throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{model.getId(), DescriptionTemplateType.class.getSimpleName()}, LocaleContextHolder.getLocale()));
if (!this.conventionService.hashValue(data.getUpdatedAt()).equals(model.getHash()))
throw new MyValidationException(this.errors.getHashConflict().getCode(), this.errors.getHashConflict().getMessage());
} else { } else {
this.usageLimitService.checkIncrease(UsageLimitTargetMetric.DESCRIPTION_TEMPLATE_TYPE_COUNT); this.usageLimitService.checkIncrease(UsageLimitTargetMetric.DESCRIPTION_TEMPLATE_TYPE_COUNT);
data = new DescriptionTemplateTypeEntity(); data = new DescriptionTemplateTypeEntity();
@ -116,19 +118,27 @@ public class DescriptionTemplateTypeServiceImpl implements DescriptionTemplateTy
data.setStatus(model.getStatus()); data.setStatus(model.getStatus());
data.setUpdatedAt(Instant.now()); data.setUpdatedAt(Instant.now());
Long descriptionTemplateTypeCodes = this.queryFactory.query(DescriptionTemplateTypeQuery.class).disableTracking().codes(model.getCode()).count();
if (isUpdate) { if (isUpdate) {
if (descriptionTemplateTypeCodes > 1) throw new MyValidationException(this.errors.getDescriptionTemplateTypeCodeExists().getCode(), this.errors.getDescriptionTemplateTypeCodeExists().getMessage());
this.entityManager.merge(data); this.entityManager.merge(data);
} else { } else {
if (descriptionTemplateTypeCodes > 0) throw new MyValidationException(this.errors.getDescriptionTemplateTypeCodeExists().getCode(), this.errors.getDescriptionTemplateTypeCodeExists().getMessage());
this.entityManager.persist(data); this.entityManager.persist(data);
this.accountingService.increase(UsageLimitTargetMetric.DESCRIPTION_TEMPLATE_TYPE_COUNT.getValue()); this.accountingService.increase(UsageLimitTargetMetric.DESCRIPTION_TEMPLATE_TYPE_COUNT.getValue());
} }
this.entityManager.flush(); this.entityManager.flush();
if (!isUpdate) {
Long descriptionTemplateTypeCodes = this.queryFactory.query(DescriptionTemplateTypeQuery.class).disableTracking()
.isActive(IsActive.Active)
.excludedIds(data.getId())
.codes(model.getCode())
.count();
if (descriptionTemplateTypeCodes > 0)
throw new MyValidationException(this.errors.getDescriptionTemplateTypeCodeExists().getCode(), this.errors.getDescriptionTemplateTypeCodeExists().getMessage());
}
this.eventBroker.emit(new DescriptionTemplateTypeTouchedEvent(data.getId())); this.eventBroker.emit(new DescriptionTemplateTypeTouchedEvent(data.getId()));
return this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, DescriptionTemplateType._id), data); return this.builderFactory.builder(DescriptionTemplateTypeBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, DescriptionTemplateType._id), data);
} }

View File

@ -3,6 +3,7 @@ package org.opencdmp.service.language;
import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.commons.web.authz.service.AuthorizationService;
import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.data.builder.BuilderFactory;
import gr.cite.tools.data.deleter.DeleterFactory; import gr.cite.tools.data.deleter.DeleterFactory;
import gr.cite.tools.data.query.QueryFactory;
import gr.cite.tools.exception.MyApplicationException; import gr.cite.tools.exception.MyApplicationException;
import gr.cite.tools.exception.MyForbiddenException; import gr.cite.tools.exception.MyForbiddenException;
import gr.cite.tools.exception.MyNotFoundException; import gr.cite.tools.exception.MyNotFoundException;
@ -22,6 +23,8 @@ import org.opencdmp.model.Language;
import org.opencdmp.model.builder.LanguageBuilder; import org.opencdmp.model.builder.LanguageBuilder;
import org.opencdmp.model.deleter.LanguageDeleter; import org.opencdmp.model.deleter.LanguageDeleter;
import org.opencdmp.model.persist.LanguagePersist; import org.opencdmp.model.persist.LanguagePersist;
import org.opencdmp.query.LanguageQuery;
import org.opencdmp.query.TenantQuery;
import org.opencdmp.service.planblueprint.PlanBlueprintServiceImpl; import org.opencdmp.service.planblueprint.PlanBlueprintServiceImpl;
import org.opencdmp.service.storage.StorageFileService; import org.opencdmp.service.storage.StorageFileService;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -44,6 +47,7 @@ public class LanguageServiceImpl implements LanguageService {
private final AuthorizationService authorizationService; private final AuthorizationService authorizationService;
private final DeleterFactory deleterFactory; private final DeleterFactory deleterFactory;
private final BuilderFactory builderFactory; private final BuilderFactory builderFactory;
private final QueryFactory queryFactory;
private final ConventionService conventionService; private final ConventionService conventionService;
private final MessageSource messageSource; private final MessageSource messageSource;
private final ErrorThesaurusProperties errors; private final ErrorThesaurusProperties errors;
@ -51,12 +55,13 @@ public class LanguageServiceImpl implements LanguageService {
public LanguageServiceImpl( public LanguageServiceImpl(
TenantEntityManager entityManager, AuthorizationService authorizationService, DeleterFactory deleterFactory, BuilderFactory builderFactory, TenantEntityManager entityManager, AuthorizationService authorizationService, DeleterFactory deleterFactory, BuilderFactory builderFactory, QueryFactory queryFactory,
ConventionService conventionService, MessageSource messageSource, ErrorThesaurusProperties errors, StorageFileService storageFileService){ ConventionService conventionService, MessageSource messageSource, ErrorThesaurusProperties errors, StorageFileService storageFileService){
this.entityManager = entityManager; this.entityManager = entityManager;
this.authorizationService = authorizationService; this.authorizationService = authorizationService;
this.deleterFactory = deleterFactory; this.deleterFactory = deleterFactory;
this.builderFactory = builderFactory; this.builderFactory = builderFactory;
this.queryFactory = queryFactory;
this.conventionService = conventionService; this.conventionService = conventionService;
this.messageSource = messageSource; this.messageSource = messageSource;
this.errors = errors; this.errors = errors;
@ -93,6 +98,16 @@ public class LanguageServiceImpl implements LanguageService {
this.entityManager.flush(); this.entityManager.flush();
if (!isUpdate) {
Long languagesWithThisCode = this.queryFactory.query(LanguageQuery.class).disableTracking()
.isActive(IsActive.Active)
.excludedIds(data.getId())
.codes(data.getCode())
.count();
if (languagesWithThisCode > 0) throw new MyValidationException(this.errors.getTenantCodeExists().getCode(), this.errors.getTenantCodeExists().getMessage());
}
return this.builderFactory.builder(LanguageBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, Language._id), data); return this.builderFactory.builder(LanguageBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, Language._id), data);
} }

View File

@ -173,14 +173,22 @@ public class PlanBlueprintServiceImpl implements PlanBlueprintService {
if (isUpdate) { if (isUpdate) {
this.entityManager.merge(data); this.entityManager.merge(data);
} else { } else {
Long planBlueprintCodes = this.queryFactory.query(PlanBlueprintQuery.class).disableTracking().codes(model.getCode()).count();
if (planBlueprintCodes > 0) throw new MyValidationException(this.errors.getPlanBlueprintCodeExists().getCode(), this.errors.getPlanBlueprintCodeExists().getMessage());
this.entityManager.persist(data); this.entityManager.persist(data);
this.accountingService.increase(UsageLimitTargetMetric.BLUEPRINT_COUNT.getValue()); this.accountingService.increase(UsageLimitTargetMetric.BLUEPRINT_COUNT.getValue());
} }
this.entityManager.flush(); this.entityManager.flush();
if (!isUpdate) {
Long planBlueprintCodes = this.queryFactory.query(PlanBlueprintQuery.class).disableTracking()
.isActive(IsActive.Active)
.excludedIds(data.getId())
.codes(model.getCode())
.count();
if (planBlueprintCodes > 0) throw new MyValidationException(this.errors.getPlanBlueprintCodeExists().getCode(), this.errors.getPlanBlueprintCodeExists().getMessage());
}
this.updateVersionStatusAndSave(data, previousStatus, data.getStatus()); this.updateVersionStatusAndSave(data, previousStatus, data.getStatus());
this.entityManager.flush(); this.entityManager.flush();

View File

@ -163,8 +163,16 @@ public class PrefillingSourceServiceImpl implements PrefillingSourceService {
this.entityManager.flush(); this.entityManager.flush();
Long prefillingSourcesWithThisCode = this.queryFactory.query(PrefillingSourceQuery.class).codes(data.getCode()).count(); if (!isUpdate) {
Long prefillingSourcesWithThisCode = this.queryFactory.query(PrefillingSourceQuery.class).disableTracking()
.isActive(IsActive.Active)
.excludedIds(data.getId())
.codes(data.getCode())
.count();
if (prefillingSourcesWithThisCode > 1) throw new MyValidationException(this.errors.getPrefillingSourceCodeExists().getCode(), this.errors.getPrefillingSourceCodeExists().getMessage()); if (prefillingSourcesWithThisCode > 1) throw new MyValidationException(this.errors.getPrefillingSourceCodeExists().getCode(), this.errors.getPrefillingSourceCodeExists().getMessage());
}
return this.builderFactory.builder(PrefillingSourceBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, PrefillingSource._id), data); return this.builderFactory.builder(PrefillingSourceBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, PrefillingSource._id), data);
} }

View File

@ -118,8 +118,15 @@ public class ReferenceTypeServiceImpl implements ReferenceTypeService {
this.entityManager.flush(); this.entityManager.flush();
Long referenceTypesWithThisCode = this.queryFactory.query(ReferenceTypeQuery.class).codes(data.getCode()).count(); if (!isUpdate) {
if (referenceTypesWithThisCode > 1) throw new MyValidationException(this.errors.getReferenceTypeCodeExists().getCode(), this.errors.getReferenceTypeCodeExists().getMessage()); Long referenceTypesWithThisCode = this.queryFactory.query(ReferenceTypeQuery.class).disableTracking()
.isActive(IsActive.Active)
.excludedIds(data.getId())
.codes(data.getCode())
.count();
if (referenceTypesWithThisCode > 0) throw new MyValidationException(this.errors.getReferenceTypeCodeExists().getCode(), this.errors.getReferenceTypeCodeExists().getMessage());
}
return this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, ReferenceType._id), data); return this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.AllExceptPublic).build(BaseFieldSet.build(fields, ReferenceType._id), data);
} }

View File

@ -154,8 +154,15 @@ public class TenantServiceImpl implements TenantService {
this.entityManager.flush(); this.entityManager.flush();
Long tenantsWithThisCode = this.queryFactory.query(TenantQuery.class).codes(data.getCode()).count(); if (!isUpdate) {
if (tenantsWithThisCode > 1) throw new MyValidationException(this.errors.getTenantCodeExists().getCode(), this.errors.getTenantCodeExists().getMessage()); Long tenantsWithThisCode = this.queryFactory.query(TenantQuery.class).disableTracking()
.isActive(IsActive.Active)
.excludedIds(data.getId())
.codes(data.getCode())
.count();
if (tenantsWithThisCode > 0) throw new MyValidationException(this.errors.getTenantCodeExists().getCode(), this.errors.getTenantCodeExists().getMessage());
}
TenantTouchedIntegrationEvent tenantTouchedIntegrationEvent = new TenantTouchedIntegrationEvent(); TenantTouchedIntegrationEvent tenantTouchedIntegrationEvent = new TenantTouchedIntegrationEvent();
tenantTouchedIntegrationEvent.setId(data.getId()); tenantTouchedIntegrationEvent.setId(data.getId());