RED-4249-When I edit or create a dossier as an owner I want to select from multiple watermark configurations

- changed the 200 status instead of 201 status for create/update
- refactoring the creation/updating of watermark configuration
- no disabled watermarks allowed in dossier creation
- update tests
This commit is contained in:
devplant 2022-06-27 12:29:26 +03:00
parent e301d55cc8
commit dc4a14b97a
5 changed files with 133 additions and 26 deletions

View File

@ -16,7 +16,7 @@ public interface WatermarkResource {
String DOSSIER_TEMPLATE_ID_PARAMETER_NAME = "dossierTemplateId"; String DOSSIER_TEMPLATE_ID_PARAMETER_NAME = "dossierTemplateId";
@ResponseStatus(HttpStatus.CREATED) @ResponseStatus(HttpStatus.OK)
@PostMapping(value = WATERMARK_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = WATERMARK_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
Watermark createOrUpdateWatermark(@RequestBody Watermark watermark); Watermark createOrUpdateWatermark(@RequestBody Watermark watermark);

View File

@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import java.util.List; import java.util.List;
import java.util.Optional;
@Slf4j @Slf4j
@Service @Service
@ -28,7 +29,7 @@ public class WatermarkService {
@Transactional @Transactional
public void deleteWatermark(Long watermarkId) { public void deleteWatermark(long watermarkId) {
watermarkRepository.findById(watermarkId).ifPresentOrElse(loadedWatermark -> { watermarkRepository.findById(watermarkId).ifPresentOrElse(loadedWatermark -> {
dossierRepository.countDeleteWatermark(watermarkId); dossierRepository.countDeleteWatermark(watermarkId);
dossierRepository.countDeletePreviewWatermark(watermarkId); dossierRepository.countDeletePreviewWatermark(watermarkId);
@ -39,7 +40,7 @@ public class WatermarkService {
} }
public WatermarkEntity getWatermark(Long watermarkId) { public WatermarkEntity getWatermark(long watermarkId) {
return watermarkRepository.findById(watermarkId) return watermarkRepository.findById(watermarkId)
.orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); .orElseThrow(() -> new NotFoundException("Watermark Configuration not found"));
@ -51,22 +52,25 @@ public class WatermarkService {
validateWatermark(watermark); validateWatermark(watermark);
if (watermark.getId() != null) { // update if (watermark.getId() != null) { // update
watermarkRepository.findById(watermark.getId()) Optional<WatermarkEntity> loadedWatermark = watermarkRepository.findById(watermark.getId());
.ifPresentOrElse(loadedWatermark -> { if (loadedWatermark.isPresent()) {
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), loadedWatermark.getId()); validateDossierTemplateId(watermark.getDossierTemplateId(), loadedWatermark.get().getDossierTemplateId());
BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId"); validateWatermarkNameIsUnique(watermark.getName(), loadedWatermark.get().getDossierTemplateId(), loadedWatermark.get().getId());
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId");
loadedWatermark.setDossierTemplate(dossierTemplate); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(loadedWatermark.get().getDossierTemplateId());
}, () -> { loadedWatermark.get().setDossierTemplate(dossierTemplate);
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); return loadedWatermark.get();
WatermarkEntity watermarkEntity = new WatermarkEntity(); } else { // if not found by id -> add it as a new watermark
BeanUtils.copyProperties(watermark, watermarkEntity, "id"); validateDossierTemplateId(watermark.getDossierTemplateId(), null);
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
watermarkEntity.setDossierTemplate(dossierTemplate); WatermarkEntity watermarkEntity = new WatermarkEntity();
watermarkRepository.save(watermarkEntity); BeanUtils.copyProperties(watermark, watermarkEntity, "id");
}); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId());
return watermarkRepository.findById(watermark.getId()).orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); watermarkEntity.setDossierTemplate(dossierTemplate);
return watermarkRepository.save(watermarkEntity);
}
} else { } else {
validateDossierTemplateId(watermark.getDossierTemplateId(), null);
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
WatermarkEntity watermarkEntity = new WatermarkEntity(); WatermarkEntity watermarkEntity = new WatermarkEntity();
BeanUtils.copyProperties(watermark, watermarkEntity, "id"); BeanUtils.copyProperties(watermark, watermarkEntity, "id");
@ -80,7 +84,7 @@ public class WatermarkService {
private void validateWatermark(Watermark watermark) { private void validateWatermark(Watermark watermark) {
if (StringUtils.isBlank(watermark.getName())) { if (StringUtils.isBlank(watermark.getName())) {
throw new BadRequestException("The watermark name must not be null"); throw new BadRequestException("The watermark name must not be empty");
} }
if (StringUtils.isNotBlank(watermark.getText()) && !StringUtils.isAsciiPrintable(StringUtils.normalizeSpace(watermark.getText()))) { if (StringUtils.isNotBlank(watermark.getText()) && !StringUtils.isAsciiPrintable(StringUtils.normalizeSpace(watermark.getText()))) {
throw new BadRequestException("The watermark may only contain ASCII characters"); throw new BadRequestException("The watermark may only contain ASCII characters");
@ -88,6 +92,14 @@ public class WatermarkService {
} }
private void validateDossierTemplateId(String newDossierTemplateId, String existingDossierTemplateId) {
if (newDossierTemplateId == null && existingDossierTemplateId == null) {
throw new BadRequestException("The dossier template id is not provided");
}
if (newDossierTemplateId != null && existingDossierTemplateId != null && !existingDossierTemplateId.equals(newDossierTemplateId)) {
throw new ConflictException("The watermark dossier template id does not match");
}
}
private void validateWatermarkNameIsUnique(String watermarkName, String dossierTemplateId, long watermarkId) { private void validateWatermarkNameIsUnique(String watermarkName, String dossierTemplateId, long watermarkId) {
getWatermarksForDossierTemplateId(dossierTemplateId).forEach(existing -> { getWatermarksForDossierTemplateId(dossierTemplateId).forEach(existing -> {
if (existing.getName().equals(watermarkName) && existing.getId() != watermarkId) { if (existing.getName().equals(watermarkName) && existing.getId() != watermarkId) {

View File

@ -101,9 +101,12 @@ public class DossierPersistenceService {
if (createOrUpdateDossierRequest.getWatermarkId() != null) { if (createOrUpdateDossierRequest.getWatermarkId() != null) {
var watermarkEntity = watermarkService.getWatermark(createOrUpdateDossierRequest.getWatermarkId()); var watermarkEntity = watermarkService.getWatermark(createOrUpdateDossierRequest.getWatermarkId());
if (watermarkEntity.getDossierTemplateId().equals(createOrUpdateDossierRequest.getDossierTemplateId())) { if (watermarkEntity.getDossierTemplateId().equals(createOrUpdateDossierRequest.getDossierTemplateId())) {
if (!watermarkEntity.isEnabled()) {
throw new BadRequestException("Watermark configuration is disabled");
}
dossier.setWatermark(watermarkEntity); dossier.setWatermark(watermarkEntity);
} else { } else {
log.debug("Invalid watermark id"); throw new BadRequestException("Invalid watermark id - dossierTemplate id does not match");
} }
} else { } else {
dossier.setWatermark(null); dossier.setWatermark(null);
@ -111,9 +114,12 @@ public class DossierPersistenceService {
if (createOrUpdateDossierRequest.getPreviewWatermarkId() != null) { if (createOrUpdateDossierRequest.getPreviewWatermarkId() != null) {
var previewWatermarkEntity = watermarkService.getWatermark(createOrUpdateDossierRequest.getPreviewWatermarkId()); var previewWatermarkEntity = watermarkService.getWatermark(createOrUpdateDossierRequest.getPreviewWatermarkId());
if (previewWatermarkEntity.getDossierTemplateId().equals(createOrUpdateDossierRequest.getDossierTemplateId())) { if (previewWatermarkEntity.getDossierTemplateId().equals(createOrUpdateDossierRequest.getDossierTemplateId())) {
if (!previewWatermarkEntity.isEnabled()) {
throw new BadRequestException("Preview watermark configuration is disabled");
}
dossier.setPreviewWatermark(previewWatermarkEntity); dossier.setPreviewWatermark(previewWatermarkEntity);
} else { } else {
log.debug("Invalid preview watermark id"); throw new BadRequestException("Invalid preview watermark id - dossierTemplate id does not match");
} }
} else { } else {
dossier.setPreviewWatermark(null); dossier.setPreviewWatermark(null);

View File

@ -61,9 +61,9 @@ public interface DossierRepository extends JpaRepository<DossierEntity, String>
@Modifying @Modifying
@Query("update DossierEntity d set d.watermarkId = null where d.watermarkId = :watermarkId") @Query("update DossierEntity d set d.watermarkId = null where d.watermarkId = :watermarkId")
int countDeleteWatermark(Long watermarkId); int countDeleteWatermark(long watermarkId);
@Modifying @Modifying
@Query("update DossierEntity d set d.previewWatermarkId = null where d.previewWatermarkId = :previewWatermarkId") @Query("update DossierEntity d set d.previewWatermarkId = null where d.previewWatermarkId = :previewWatermarkId")
int countDeletePreviewWatermark(Long previewWatermarkId); int countDeletePreviewWatermark(long previewWatermarkId);
} }

View File

@ -46,11 +46,33 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
var saved = watermarkClient.createOrUpdateWatermark(watermark); var saved = watermarkClient.createOrUpdateWatermark(watermark);
var loadedWatermark = watermarkClient.getWatermark(saved.getId()); var loadedWatermark = watermarkClient.getWatermark(saved.getId());
assertThat(loadedWatermark).isEqualTo(saved); assertThat(loadedWatermark).isEqualTo(saved);
// try to save the same watermark without id
try {
watermarkClient.createOrUpdateWatermark(watermark);
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(409);
}
// try to save the same watermark with id
try {
watermarkClient.createOrUpdateWatermark(saved);
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(409);
}
// update current watermark // update current watermark
saved.setFontSize(14); saved.setFontSize(14);
saved = watermarkClient.createOrUpdateWatermark(saved); saved.setDossierTemplateId(null);
loadedWatermark = watermarkClient.getWatermark(saved.getId()); var updated = watermarkClient.createOrUpdateWatermark(saved);
assertThat(loadedWatermark).isEqualTo(saved); assertThat(updated.getDossierTemplateId()).isEqualTo(dossierTemplate.getId());
// update current watermark with new dossier template id
updated.setDossierTemplateId("dossierTemplate2");
try {
watermarkClient.createOrUpdateWatermark(updated);
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(409);
}
var watermarkList = watermarkClient.getWatermarksForDossierTemplateId(dossierTemplate.getId()); var watermarkList = watermarkClient.getWatermarksForDossierTemplateId(dossierTemplate.getId());
assertThat(watermarkList.size()).isEqualTo(1); assertThat(watermarkList.size()).isEqualTo(1);
@ -66,6 +88,29 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
} catch (FeignException.FeignClientException e) { } catch (FeignException.FeignClientException e) {
assertThat(e.status()).isEqualTo(409); assertThat(e.status()).isEqualTo(409);
} }
}
@Test
public void testDeleteWatermark() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
Watermark watermark = new Watermark();
watermark.setName("watermark name");
watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje.");
watermark.setFontSize(12);
watermark.setFontType("font");
watermark.setHexColor("#dddddd");
watermark.setOpacity(20);
watermark.setOrientation(WatermarkOrientation.DIAGONAL);
watermark.setDossierTemplateId(dossierTemplate.getId());
var saved = watermarkClient.createOrUpdateWatermark(watermark);
var loadedWatermark = watermarkClient.getWatermark(saved.getId());
assertThat(loadedWatermark).isEqualTo(saved);
// Delete first time // Delete first time
watermarkClient.deleteWatermark(saved.getId()); watermarkClient.deleteWatermark(saved.getId());
@ -75,8 +120,52 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
assertThat(e.status()).isEqualTo(404); assertThat(e.status()).isEqualTo(404);
} }
// try to delete a not existing watermark
try {
watermarkClient.deleteWatermark(saved.getId());
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(404);
}
} }
@Test
public void testCreateWatermark() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
Watermark watermark = new Watermark();
watermark.setName("watermark name");
watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje.");
watermark.setFontSize(12);
watermark.setFontType("font");
watermark.setHexColor("#dddddd");
watermark.setOpacity(20);
watermark.setOrientation(WatermarkOrientation.DIAGONAL);
watermark.setDossierTemplateId(dossierTemplate.getId());
var saved = watermarkClient.createOrUpdateWatermark(watermark);
var loadedWatermark = watermarkClient.getWatermark(saved.getId());
assertThat(loadedWatermark).isEqualTo(saved);
// try to save the same watermark
try {
watermarkClient.createOrUpdateWatermark(watermark);
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(409);
}
Watermark watermark2 = new Watermark();
watermark.setName("watermark name2");
watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje.");
watermark.setFontSize(12);
watermark.setOrientation(WatermarkOrientation.DIAGONAL);
watermark.setDossierTemplateId(dossierTemplate.getId());
var saved2 = watermarkClient.createOrUpdateWatermark(watermark);
var loadedWatermark2 = watermarkClient.getWatermark(saved.getId());
}
@Test @Test
public void testWatermarkTextWithWrongText() { public void testWatermarkTextWithWrongText() {