Commit b54df39d authored by Noel Alonso's avatar Noel Alonso
Browse files

Completa comprobaciones antes de guardar/modificar

De esta manera se garantiza que no se pueda guardar dos categorías con
el mismo id o el mismo nombre

Adapta tests
parent 3ccc443e
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue
	// @formatter:off
	
	private final String ID_PROPERTY = "id",
			NAME_PROPERTY = "name",
			URL_SOURCE_PROPERTY = "urlSource";
	// @formatter:on

@@ -68,13 +69,13 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue
	@Override
	protected EventApplicationResult checkInsertConstraintsFulfilled(Category modelToIndex) {

		QueryBuilder idTerm = QueryBuilders.termQuery(ID_PROPERTY, modelToIndex.getId());
		QueryBuilder idTerm = QueryBuilders.termQuery(ID_PROPERTY, modelToIndex.getId()),
				nameTerm = QueryBuilders.termQuery(NAME_PROPERTY, modelToIndex.getName());

		MultiSearchRequest request = new MultiSearchRequest();

		SearchSourceBuilder requestBuilderId = new SearchSourceBuilder().query(idTerm).size(1);

		request.add(new SearchRequest().indices(getIndex()).source(requestBuilderId));
		request.add(new SearchRequest().indices(getIndex()).source(new SearchSourceBuilder().query(idTerm).size(1)));
		request.add(new SearchRequest().indices(getIndex()).source(new SearchSourceBuilder().query(nameTerm).size(1)));

		MultiSearchResponse sr;
		try {
@@ -91,6 +92,9 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue
		if (responses != null && responses[0].getResponse().getHits().getTotalHits() > 0) {
			arguments.put(ID_PROPERTY, modelToIndex.getId());
		}
		if (responses != null && responses[1].getResponse().getHits().getTotalHits() > 0) {
			arguments.put(NAME_PROPERTY, modelToIndex.getName());
		}

		if (arguments.size() > 0) {
			return new EventApplicationResult(ExceptionType.ES_INSERT_DOCUMENT.toString(), arguments);
@@ -104,13 +108,12 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue
		// @formatter:off
		
		BoolQueryBuilder idTerm = QueryBuilders.boolQuery()
				.must(QueryBuilders.termQuery(NAME_PROPERTY, modelToIndex.getName()))
				.mustNot(QueryBuilders.termQuery(ID_PROPERTY, modelToIndex.getId()));
		
		MultiSearchRequest request = new MultiSearchRequest();
		
		SearchSourceBuilder requestBuilderId = new SearchSourceBuilder().query(idTerm).size(1);
		
		request.add(new SearchRequest().indices(getIndex()).source(requestBuilderId));
		request.add(new SearchRequest().indices(getIndex()).source(new SearchSourceBuilder().query(idTerm).size(1)));
		
		// @formatter:on

@@ -127,7 +130,7 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue
		Item[] responses = sr.getResponses();

		if (responses != null && responses[0].getResponse().getHits().getTotalHits() > 0) {
			arguments.put(ID_PROPERTY, modelToIndex.getId().toString());
			arguments.put(NAME_PROPERTY, modelToIndex.getName());
		}

		if (arguments.size() > 0) {
+6 −5
Original line number Diff line number Diff line
@@ -211,10 +211,10 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest {
		Map<String, String> arguments = createCategoryFailedEvent.getArguments();
		assertNotNull(arguments);

		assertEquals(1, arguments.size());
		assertEquals(2, arguments.size());

		assertNotNull(arguments.get("id"));

		assertNotNull(arguments.get("name"));
	}

	@Test
@@ -227,6 +227,7 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest {
					original = event.getCategory();
			// @formatter:on
		conflict.setId(original.getId() + "cpy");
		conflict.setName(original.getName() + "cpy");

		// Guarda el que se va a modificar
		repository.save(mapper.getMapperFacade().map(original, Category.class));
@@ -234,8 +235,8 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest {
		// Guarda el que va a entrar en conflicto
		repository.save(mapper.getMapperFacade().map(conflict, Category.class));

		// Edita el id del que se va a modificar para entrar en conflicto
		original.setId(conflict.getId());
		// Edita el nombre del que se va a modificar para entrar en conflicto
		original.setName(conflict.getName());
		event.setCategory(original);

		ListenableFuture<SendResult<String, Event>> future = kafkaTemplate.send(CATEGORY_TOPIC, event.getAggregateId(),
@@ -258,7 +259,7 @@ public class CategoryEventHandlerTest extends DocumentationViewBaseTest {

		assertEquals(arguments.size(), 1);

		assertNotNull(arguments.get("id"));
		assertNotNull(arguments.get("name"));
	}

	@Test