Loading src/main/java/es/redmic/commandslib/usersettings/aggregate/PersistenceAggregate.java +45 −0 Original line number Diff line number Diff line Loading @@ -24,18 +24,23 @@ import org.mapstruct.factory.Mappers; import es.redmic.brokerlib.avro.common.Event; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.commandslib.usersettings.commands.CloneSettingsCommand; import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand; import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsAccessedDateCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.usersettingslib.dto.SettingsDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.clone.CloneSettingsEvent; import es.redmic.usersettingslib.events.common.PersistenceEvent; import es.redmic.usersettingslib.events.common.SettingsCancelledEvent; import es.redmic.usersettingslib.events.common.SettingsEvent; import es.redmic.usersettingslib.events.delete.CheckDeleteSettingsEvent; import es.redmic.usersettingslib.events.delete.SettingsDeletedEvent; import es.redmic.usersettingslib.events.save.PartialSaveSettingsEvent; import es.redmic.usersettingslib.events.update.UpdateSettingsAccessedDateEvent; import es.redmic.usersettingslib.mapper.SettingsMapper; public class PersistenceAggregate extends Aggregate { Loading Loading @@ -104,6 +109,44 @@ public class PersistenceAggregate extends Aggregate { return evt; } public CloneSettingsEvent process(CloneSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getPersistence().getId(); if (exist(id)) { logger.error("Descartando clonado con nuevo " + id + ". Ya está registrado."); return null; } this.setAggregateId(id); CloneSettingsEvent evt = new CloneSettingsEvent(cmd.getPersistence()); evt.setAggregateId(id); evt.setVersion(1); return evt; } public UpdateSettingsAccessedDateEvent process(UpdateSettingsAccessedDateCommand cmd) { assert settingsStateStore != null; String id = cmd.getSettingsId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); UpdateSettingsAccessedDateEvent evt = new UpdateSettingsAccessedDateEvent(); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); evt.setUserId(state.getUserId()); return evt; } public SettingsDTO getSettings() { return settings; } Loading Loading @@ -144,7 +187,9 @@ public class PersistenceAggregate extends Aggregate { apply((SettingsCancelledEvent) event); break; default: // TODO: añadir exepción logger.debug("Evento no manejado ", event.getType()); throw new ItemLockedException("id", event.getAggregateId()); } } Loading src/test/java/es/redmic/commandslib/usersettings/persistence/ProcessEventTest.java +49 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ package es.redmic.commandslib.usersettings.persistence; */ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; Loading @@ -36,15 +37,19 @@ import org.mockito.junit.MockitoJUnitRunner; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.commandslib.usersettings.aggregate.PersistenceAggregate; import es.redmic.commandslib.usersettings.commands.CloneSettingsCommand; import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand; import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsAccessedDateCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.usersettingslib.dto.PersistenceDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.clone.CloneSettingsEvent; import es.redmic.usersettingslib.events.delete.CheckDeleteSettingsEvent; import es.redmic.usersettingslib.events.save.PartialSaveSettingsEvent; import es.redmic.usersettingslib.events.update.UpdateSettingsAccessedDateEvent; import es.redmic.usersettingslib.unit.utils.SettingsDataUtil; @RunWith(MockitoJUnitRunner.class) Loading Loading @@ -143,6 +148,50 @@ public class ProcessEventTest { assertTrue(evt.getVersion().equals(2)); } @Test public void processCloneSettingsCommand_ReturnCloneSettingsEvent_IfProcessIsOk() { PersistenceDTO persistence = SettingsDataUtil.getPersistenceDTO(code); String serviceName = "/atlas/commands/layer/settings"; CloneSettingsCommand command = new CloneSettingsCommand(persistence.getId(), serviceName); CloneSettingsEvent evt = agg.process(command); assertNotNull(evt); assertNotNull(evt.getDate()); assertNotNull(evt.getId()); assertNotNull(evt.getAggregateId()); assertNotEquals(evt.getAggregateId(), persistence.getId()); assertEquals(evt.getType(), SettingsEventTypes.CLONE); assertTrue(evt.getVersion().equals(1)); assertEquals(evt.getAggregateId(), evt.getPersistence().getId()); assertEquals(evt.getPersistence().getInserted(), evt.getPersistence().getUpdated()); assertEquals(evt.getPersistence().getInserted(), evt.getPersistence().getAccessed()); assertEquals(serviceName, evt.getPersistence().getService()); } @Test public void processUpdateSettingsAccessedDateCommand_ReturnUpdateSettingsAccessedDateEvent_IfProcessIsOk() { when(settingsStateStore.get(any())).thenReturn(SettingsDataUtil.getSettingsSavedEvent(code)); PersistenceDTO persistence = SettingsDataUtil.getPersistenceDTO(code); UpdateSettingsAccessedDateCommand command = new UpdateSettingsAccessedDateCommand(persistence.getId()); UpdateSettingsAccessedDateEvent evt = agg.process(command); assertNotNull(evt); assertNotNull(evt.getDate()); assertNotNull(evt.getId()); assertNotNull(evt.getAggregateId()); assertEquals(evt.getAggregateId(), persistence.getId()); assertEquals(evt.getType(), SettingsEventTypes.UPDATE_ACCESSED_DATE); assertTrue(evt.getVersion().equals(2)); assertEquals(evt.getAggregateId(), persistence.getId()); } // Borrar un elemento ya borrado @Test(expected = ItemNotFoundException.class) public void processDeleteSettingsCommand_ThrowItemNotFoundException_IfItemIsDeleted() { Loading Loading
src/main/java/es/redmic/commandslib/usersettings/aggregate/PersistenceAggregate.java +45 −0 Original line number Diff line number Diff line Loading @@ -24,18 +24,23 @@ import org.mapstruct.factory.Mappers; import es.redmic.brokerlib.avro.common.Event; import es.redmic.commandslib.aggregate.Aggregate; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.commandslib.usersettings.commands.CloneSettingsCommand; import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand; import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsAccessedDateCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.usersettingslib.dto.SettingsDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.clone.CloneSettingsEvent; import es.redmic.usersettingslib.events.common.PersistenceEvent; import es.redmic.usersettingslib.events.common.SettingsCancelledEvent; import es.redmic.usersettingslib.events.common.SettingsEvent; import es.redmic.usersettingslib.events.delete.CheckDeleteSettingsEvent; import es.redmic.usersettingslib.events.delete.SettingsDeletedEvent; import es.redmic.usersettingslib.events.save.PartialSaveSettingsEvent; import es.redmic.usersettingslib.events.update.UpdateSettingsAccessedDateEvent; import es.redmic.usersettingslib.mapper.SettingsMapper; public class PersistenceAggregate extends Aggregate { Loading Loading @@ -104,6 +109,44 @@ public class PersistenceAggregate extends Aggregate { return evt; } public CloneSettingsEvent process(CloneSettingsCommand cmd) { assert settingsStateStore != null; String id = cmd.getPersistence().getId(); if (exist(id)) { logger.error("Descartando clonado con nuevo " + id + ". Ya está registrado."); return null; } this.setAggregateId(id); CloneSettingsEvent evt = new CloneSettingsEvent(cmd.getPersistence()); evt.setAggregateId(id); evt.setVersion(1); return evt; } public UpdateSettingsAccessedDateEvent process(UpdateSettingsAccessedDateCommand cmd) { assert settingsStateStore != null; String id = cmd.getSettingsId(); Event state = getStateFromHistory(id); loadFromHistory(state); checkState(id, state.getType()); UpdateSettingsAccessedDateEvent evt = new UpdateSettingsAccessedDateEvent(); evt.setAggregateId(id); evt.setVersion(getVersion() + 1); evt.setUserId(state.getUserId()); return evt; } public SettingsDTO getSettings() { return settings; } Loading Loading @@ -144,7 +187,9 @@ public class PersistenceAggregate extends Aggregate { apply((SettingsCancelledEvent) event); break; default: // TODO: añadir exepción logger.debug("Evento no manejado ", event.getType()); throw new ItemLockedException("id", event.getAggregateId()); } } Loading
src/test/java/es/redmic/commandslib/usersettings/persistence/ProcessEventTest.java +49 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ package es.redmic.commandslib.usersettings.persistence; */ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; Loading @@ -36,15 +37,19 @@ import org.mockito.junit.MockitoJUnitRunner; import es.redmic.commandslib.exceptions.ItemLockedException; import es.redmic.commandslib.usersettings.aggregate.PersistenceAggregate; import es.redmic.commandslib.usersettings.commands.CloneSettingsCommand; import es.redmic.commandslib.usersettings.commands.DeleteSettingsCommand; import es.redmic.commandslib.usersettings.commands.SaveSettingsCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsAccessedDateCommand; import es.redmic.commandslib.usersettings.commands.UpdateSettingsCommand; import es.redmic.commandslib.usersettings.statestore.SettingsStateStore; import es.redmic.exception.data.ItemNotFoundException; import es.redmic.usersettingslib.dto.PersistenceDTO; import es.redmic.usersettingslib.events.SettingsEventTypes; import es.redmic.usersettingslib.events.clone.CloneSettingsEvent; import es.redmic.usersettingslib.events.delete.CheckDeleteSettingsEvent; import es.redmic.usersettingslib.events.save.PartialSaveSettingsEvent; import es.redmic.usersettingslib.events.update.UpdateSettingsAccessedDateEvent; import es.redmic.usersettingslib.unit.utils.SettingsDataUtil; @RunWith(MockitoJUnitRunner.class) Loading Loading @@ -143,6 +148,50 @@ public class ProcessEventTest { assertTrue(evt.getVersion().equals(2)); } @Test public void processCloneSettingsCommand_ReturnCloneSettingsEvent_IfProcessIsOk() { PersistenceDTO persistence = SettingsDataUtil.getPersistenceDTO(code); String serviceName = "/atlas/commands/layer/settings"; CloneSettingsCommand command = new CloneSettingsCommand(persistence.getId(), serviceName); CloneSettingsEvent evt = agg.process(command); assertNotNull(evt); assertNotNull(evt.getDate()); assertNotNull(evt.getId()); assertNotNull(evt.getAggregateId()); assertNotEquals(evt.getAggregateId(), persistence.getId()); assertEquals(evt.getType(), SettingsEventTypes.CLONE); assertTrue(evt.getVersion().equals(1)); assertEquals(evt.getAggregateId(), evt.getPersistence().getId()); assertEquals(evt.getPersistence().getInserted(), evt.getPersistence().getUpdated()); assertEquals(evt.getPersistence().getInserted(), evt.getPersistence().getAccessed()); assertEquals(serviceName, evt.getPersistence().getService()); } @Test public void processUpdateSettingsAccessedDateCommand_ReturnUpdateSettingsAccessedDateEvent_IfProcessIsOk() { when(settingsStateStore.get(any())).thenReturn(SettingsDataUtil.getSettingsSavedEvent(code)); PersistenceDTO persistence = SettingsDataUtil.getPersistenceDTO(code); UpdateSettingsAccessedDateCommand command = new UpdateSettingsAccessedDateCommand(persistence.getId()); UpdateSettingsAccessedDateEvent evt = agg.process(command); assertNotNull(evt); assertNotNull(evt.getDate()); assertNotNull(evt.getId()); assertNotNull(evt.getAggregateId()); assertEquals(evt.getAggregateId(), persistence.getId()); assertEquals(evt.getType(), SettingsEventTypes.UPDATE_ACCESSED_DATE); assertTrue(evt.getVersion().equals(2)); assertEquals(evt.getAggregateId(), persistence.getId()); } // Borrar un elemento ya borrado @Test(expected = ItemNotFoundException.class) public void processDeleteSettingsCommand_ThrowItemNotFoundException_IfItemIsDeleted() { Loading