UNPKG

@castore/event-storage-adapter-redux

Version:

DRY Castore EventStorageAdapter implementation using a Redux store

81 lines (70 loc) 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCastoreReducers = void 0; var _toolkit = require("@reduxjs/toolkit"); var _getEventStoreSliceName = require("./utils/getEventStoreSliceName"); var getCastoreReducers = function getCastoreReducers(_ref) { var _ref$prefix = _ref.prefix, prefix = _ref$prefix === void 0 ? _getEventStoreSliceName.DEFAULT_PREFIX : _ref$prefix, eventStores = _ref.eventStores; var castoreReducers = {}; eventStores.forEach(function (eventStore) { var eventStoreId = eventStore.eventStoreId; var eventStoreSliceName = (0, _getEventStoreSliceName.getEventStoreSliceName)({ prefix: prefix, eventStoreId: eventStoreId }); var _createSlice = (0, _toolkit.createSlice)({ name: eventStoreSliceName, initialState: { eventsByAggregateId: {}, aggregateIds: [] }, reducers: { eventPushed: function eventPushed(state, action) { var event = action.payload; var aggregateId = event.aggregateId, timestamp = event.timestamp; var aggregateEvents = state.eventsByAggregateId[aggregateId]; if (aggregateEvents === undefined) { state.eventsByAggregateId[aggregateId] = [event]; state.aggregateIds.push({ aggregateId: aggregateId, initialEventTimestamp: timestamp }); } else { aggregateEvents.push(event); } }, eventReverted: function eventReverted(state, action) { var event = action.payload; var aggregateId = event.aggregateId, version = event.version; var aggregateEvents = state.eventsByAggregateId[aggregateId]; var revertedEvent = aggregateEvents === null || aggregateEvents === void 0 ? void 0 : aggregateEvents.pop(); // Check that version is indeed last pushed event // Check that version is indeed last pushed event if ((revertedEvent === null || revertedEvent === void 0 ? void 0 : revertedEvent.version) !== version) { if (revertedEvent !== undefined) { aggregateEvents === null || aggregateEvents === void 0 ? void 0 : aggregateEvents.push(revertedEvent); } throw new Error('Unable to revert partially pushed event group.'); } if (revertedEvent.version === 1) { delete state.eventsByAggregateId[aggregateId]; state.aggregateIds = state.aggregateIds.filter(function (_ref2) { var storedAggregateId = _ref2.aggregateId; return storedAggregateId !== aggregateId; }); } } } }), reducer = _createSlice.reducer; castoreReducers[eventStoreSliceName] = reducer; }); return castoreReducers; }; exports.getCastoreReducers = getCastoreReducers; //# sourceMappingURL=getCastoreReducers.js.map