/* * Copyright (c) 2015. Traveliko */ package com.bearchoke.platform.domain.user.init; import com.bearchoke.platform.base.init.DBInit; import com.bearchoke.platform.persistence.mongo.axon.AxonMongoTemplate; import com.bearchoke.platform.persistence.mongo.axon.AxonSagaMongoTemplate; import lombok.extern.log4j.Log4j2; import org.axonframework.eventstore.mongo.MongoEventStore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; /** * */ @SuppressWarnings("SpringJavaAutowiringInspection") @Component @Log4j2 @Order(1) public class AxonDBInit implements DBInit { private static final String DOMAINEVENTS = "domainevents"; private static final String SNAPSHOTEVENTS = "snapshotevents"; private final AxonMongoTemplate axonMongoTemplate; private final MongoEventStore eventStore; private final MongoTemplate mongoTemplate; private final AxonSagaMongoTemplate axonSagaMongoTemplate; @Autowired public AxonDBInit(AxonMongoTemplate systemMongo, MongoEventStore eventStore, MongoTemplate mongoTemplate, AxonSagaMongoTemplate axonSagaMongoTemplate) { this.axonMongoTemplate = systemMongo; this.eventStore = eventStore; this.mongoTemplate = mongoTemplate; this.axonSagaMongoTemplate = axonSagaMongoTemplate; } @Override public boolean initEvenIfExist() { initializeDB(); return true; } @Override public boolean initIfNotExist() { boolean result = false; if (!mongoTemplate.collectionExists(SNAPSHOTEVENTS) && !mongoTemplate.collectionExists(DOMAINEVENTS)) { result = initEvenIfExist(); } else { log.info("Collections already exists so will not init"); } return result; } private void initializeDB() { log.info("Clearing out old Axon related collections from MongoDb"); // clear all of Axon's collections axonMongoTemplate.domainEventCollection().drop(); axonMongoTemplate.snapshotEventCollection().drop(); axonSagaMongoTemplate.sagaCollection().drop(); eventStore.ensureIndexes(); } }