diff --git a/backend/src/main/java/pl/polskalokalnie/config/SchemaFixer.java b/backend/src/main/java/pl/polskalokalnie/config/SchemaFixer.java index 139532c..0e03f6e 100644 --- a/backend/src/main/java/pl/polskalokalnie/config/SchemaFixer.java +++ b/backend/src/main/java/pl/polskalokalnie/config/SchemaFixer.java @@ -1,5 +1,10 @@ package pl.polskalokalnie.config; +import java.sql.Connection; +import java.sql.SQLException; +import javax.sql.DataSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.ApplicationRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -8,9 +13,32 @@ import org.springframework.jdbc.core.JdbcTemplate; @Configuration public class SchemaFixer { + private static final Logger log = LoggerFactory.getLogger(SchemaFixer.class); + + /** + * Laty schematu pisane sa skladnia PostgreSQL (DO $$, to_regclass, lo_get, split_part...), + * bo taka baza dziala na serwerze. W testach schemat tworzy Hibernate z encji na H2, + * wiec nie ma czego latac - bez tego warunku kazdy @SpringBootTest wywracal sie przy starcie. + */ + private static boolean isPostgres(JdbcTemplate jdbcTemplate) { + DataSource dataSource = jdbcTemplate.getDataSource(); + if (dataSource == null) { + return false; + } + try (Connection connection = dataSource.getConnection()) { + return "PostgreSQL".equalsIgnoreCase(connection.getMetaData().getDatabaseProductName()); + } catch (SQLException ex) { + log.warn("Nie udalo sie rozpoznac bazy danych, pomijam poprawki schematu: {}", ex.getMessage()); + return false; + } + } + @Bean ApplicationRunner ensureViewsCountColumn(JdbcTemplate jdbcTemplate) { return args -> { + if (!isPostgres(jdbcTemplate)) { + return; + } jdbcTemplate.execute( "ALTER TABLE property_listings ADD COLUMN IF NOT EXISTS views_count BIGINT NOT NULL DEFAULT 0" );