From 04601b618b9ae2ce07e29ffb38c371f58ca97ade Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 20 Nov 2025 16:27:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=91?= =?UTF-8?q?=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- credit-tracker.properties | 2 + .../settings/CreditTrackerSettings.java | 2 + .../entities/app/AppVersion.java | 10 ++++ .../mapper/signal/AppVersionMapper.java | 9 ++++ .../service/DbVersionValidationService.java | 54 +++++++++++++++++++ .../mapper/signal/AppVersionMapper.xml | 15 ++++++ src/main/resources/sql/v2.21.ddl | 2 +- 7 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/nbch/credit_tracker/entities/app/AppVersion.java create mode 100644 src/main/java/ru/nbch/credit_tracker/mapper/signal/AppVersionMapper.java create mode 100644 src/main/java/ru/nbch/credit_tracker/service/DbVersionValidationService.java create mode 100644 src/main/resources/mybatis/mapper/signal/AppVersionMapper.xml diff --git a/credit-tracker.properties b/credit-tracker.properties index 982f795..0ccb297 100644 --- a/credit-tracker.properties +++ b/credit-tracker.properties @@ -69,6 +69,8 @@ ct.monitoring-interval=${MONITORING_INTERVAL:15} ct.update-flags-interval=${UPDATE_FLAGS_INTERVAL:1} ct.days-to-update-flags=${DAYS_TO_UPDATE_FLAGS:30} +ct.db-version=${DB_VERSION:1234} + ct.encoding=windows-1251 #Batch size and global pipeline timeout diff --git a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java index 31c8291..bf73de1 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java +++ b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java @@ -36,4 +36,6 @@ public class CreditTrackerSettings { private Integer batchSize; private Integer timeout; + + private String dbVersion; } diff --git a/src/main/java/ru/nbch/credit_tracker/entities/app/AppVersion.java b/src/main/java/ru/nbch/credit_tracker/entities/app/AppVersion.java new file mode 100644 index 0000000..a3aebda --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/app/AppVersion.java @@ -0,0 +1,10 @@ +package ru.nbch.credit_tracker.entities.app; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class AppVersion { + private String dbVersion; +} diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/AppVersionMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/AppVersionMapper.java new file mode 100644 index 0000000..3ab056a --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/AppVersionMapper.java @@ -0,0 +1,9 @@ +package ru.nbch.credit_tracker.mapper.signal; + +import org.apache.ibatis.annotations.Mapper; +import ru.nbch.credit_tracker.entities.app.AppVersion; + +@Mapper +public interface AppVersionMapper { + AppVersion getAppVersion(); +} diff --git a/src/main/java/ru/nbch/credit_tracker/service/DbVersionValidationService.java b/src/main/java/ru/nbch/credit_tracker/service/DbVersionValidationService.java new file mode 100644 index 0000000..f8cb14c --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/service/DbVersionValidationService.java @@ -0,0 +1,54 @@ +package ru.nbch.credit_tracker.service; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; +import ru.nbch.credit_tracker.entities.app.AppVersion; +import ru.nbch.credit_tracker.mapper.signal.AppVersionMapper; + +@Service +public class DbVersionValidationService implements InitializingBean { + + private final Logger log = LoggerFactory.getLogger(getClass()); + private final AppVersionMapper appVersionMapper; + private final CreditTrackerSettings settings; + + @Autowired + public DbVersionValidationService(AppVersionMapper appVersionMapper, CreditTrackerSettings settings) { + this.appVersionMapper = appVersionMapper; + this.settings = settings; + } + + @Override + public void afterPropertiesSet() throws Exception { + String expectedDbVersion = settings.getDbVersion(); + + if (StringUtils.isEmpty(expectedDbVersion)) { + log.error("expected database version is not specified in the settings."); + System.exit(1); + } + + log.info("expected DB version: {}", expectedDbVersion); + + AppVersion appVersion = appVersionMapper.getAppVersion(); + if (appVersion == null || StringUtils.isEmpty(appVersion.getDbVersion())) { + log.error("couldn't load version from APP_VERSION database table."); + System.exit(1); + } + + String actualVersion = appVersion.getDbVersion(); + + log.info("actual DB version: {}", actualVersion); + + if (!expectedDbVersion.equals(actualVersion)) { + log.error("expected database version does not match actual database version"); + System.exit(1); + } + + log.info("Database version validation complete: {}", actualVersion); + } +} diff --git a/src/main/resources/mybatis/mapper/signal/AppVersionMapper.xml b/src/main/resources/mybatis/mapper/signal/AppVersionMapper.xml new file mode 100644 index 0000000..35d22b0 --- /dev/null +++ b/src/main/resources/mybatis/mapper/signal/AppVersionMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/sql/v2.21.ddl b/src/main/resources/sql/v2.21.ddl index 738ee03..58e0701 100644 --- a/src/main/resources/sql/v2.21.ddl +++ b/src/main/resources/sql/v2.21.ddl @@ -1,5 +1,5 @@ -CREATE TABLE signals_user_packages ( +CREATE TABLE app_version ( DB_VERSION varchar(12) );