diff --git a/build.gradle b/build.gradle index cfcdf5b3..e763a3b1 100644 --- a/build.gradle +++ b/build.gradle @@ -103,7 +103,7 @@ subprojects { prometheusVersion = '1.11.1' backendUtilVersion = '0.2.0-SNAPSHOT' backendMybatisUtilVersion = '0.0.4-SNAPSHOT' - backendMessageProcessorLibVersion = '1.0.0-SNAPSHOT' + backendMessageProcessorLibVersion = '1.0.2-SNAPSHOT' junitJupiterVersion = "5.9.3" mockitoVersion = "5.4.0" mockitoInlineVersion = "3.4.0" diff --git a/trade-module/src/main/java/io/edpn/backend/trade/adapter/persistence/repository/MybatisCommodityRepository.java b/trade-module/src/main/java/io/edpn/backend/trade/adapter/persistence/repository/MybatisCommodityRepository.java index 680ed332..b90d0019 100644 --- a/trade-module/src/main/java/io/edpn/backend/trade/adapter/persistence/repository/MybatisCommodityRepository.java +++ b/trade-module/src/main/java/io/edpn/backend/trade/adapter/persistence/repository/MybatisCommodityRepository.java @@ -1,45 +1,30 @@ package io.edpn.backend.trade.adapter.persistence.repository; -import io.edpn.backend.mybatisutil.UuidTypeHandler; import io.edpn.backend.trade.adapter.persistence.entity.MybatisCommodityEntity; -import org.apache.ibatis.annotations.Insert; -import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Result; -import org.apache.ibatis.annotations.ResultMap; -import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - public interface MybatisCommodityRepository { - @Select("SELECT * FROM commodity") - @Results(id = "commodityResultMap", value = { - @Result(property = "id", column = "id", javaType = UUID.class, typeHandler = UuidTypeHandler.class), - @Result(property = "name", column = "name", javaType = String.class) - }) - List findAll(); - - @Select("SELECT * FROM commodity WHERE id = #{id}") - @ResultMap("commodityResultMap") - Optional findById(@Param("id") UUID id); - - @Select("SELECT * FROM commodity WHERE name = #{name}") - @ResultMap("commodityResultMap") - Optional findByName(@Param("name") String name); - - @Insert("INSERT INTO commodity (id, name) VALUES (#{id}, #{name})") - void insert(MybatisCommodityEntity commodity); - - @Select({ - "INSERT INTO commodity (id, name)", - "VALUES (#{id}, #{name})", - "ON CONFLICT (name)", - "DO UPDATE SET", - "name = COALESCE(commodity.name, EXCLUDED.name)", - "RETURNING *" - }) + @Select(""" + WITH enriched_data AS ( + SELECT v.id AS id, v.name AS technical_name, cw.display_name, cw.type, cw.is_rare + FROM (VALUES (#{id}, #{name})) AS v(id, name) + LEFT JOIN commodity_whitelist cw + ON v.name = cw.technical_name) + INSERT + INTO commodity (id, technical_name, display_name, type, is_rare) + SELECT id, + technical_name, + display_name, + type, + is_rare + FROM enriched_data + ON CONFLICT (technical_name) + DO UPDATE SET technical_name = COALESCE(commodity.technical_name, EXCLUDED.technical_name), + display_name = EXCLUDED.display_name, + type = EXCLUDED.type, + is_rare = EXCLUDED.is_rare + RETURNING *; + """) MybatisCommodityEntity createOrUpdateOnConflict(MybatisCommodityEntity commodity); } diff --git a/trade-module/src/main/resources/db/trademodule/changelog/add_commodity_combined_columns.xml b/trade-module/src/main/resources/db/trademodule/changelog/add_commodity_combined_columns.xml new file mode 100644 index 00000000..72ea69e7 --- /dev/null +++ b/trade-module/src/main/resources/db/trademodule/changelog/add_commodity_combined_columns.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/trade-module/src/main/resources/db/trademodule/changelog/create_validated_commodity_view.xml b/trade-module/src/main/resources/db/trademodule/changelog/create_validated_commodity_view.xml index 7b0707be..f8c0ab4e 100644 --- a/trade-module/src/main/resources/db/trademodule/changelog/create_validated_commodity_view.xml +++ b/trade-module/src/main/resources/db/trademodule/changelog/create_validated_commodity_view.xml @@ -3,16 +3,16 @@ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> - + diff --git a/trade-module/src/main/resources/db/trademodule/changelog/fill_commodity_combined_table.xml b/trade-module/src/main/resources/db/trademodule/changelog/fill_commodity_combined_table.xml new file mode 100644 index 00000000..5b52fc1a --- /dev/null +++ b/trade-module/src/main/resources/db/trademodule/changelog/fill_commodity_combined_table.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/trade-module/src/main/resources/db/trademodule/changelog/trademodule-changelog.xml b/trade-module/src/main/resources/db/trademodule/changelog/trademodule-changelog.xml index 2fbca7e4..2a8ecb69 100644 --- a/trade-module/src/main/resources/db/trademodule/changelog/trademodule-changelog.xml +++ b/trade-module/src/main/resources/db/trademodule/changelog/trademodule-changelog.xml @@ -34,6 +34,8 @@ + + diff --git a/trade-module/src/test/java/io/edpn/backend/trade/application/service/ReceiveCommodityMessageUseCaseTest.java b/trade-module/src/test/java/io/edpn/backend/trade/application/service/ReceiveCommodityMessageUseCaseTest.java index cc0a3b9c..540a5242 100644 --- a/trade-module/src/test/java/io/edpn/backend/trade/application/service/ReceiveCommodityMessageUseCaseTest.java +++ b/trade-module/src/test/java/io/edpn/backend/trade/application/service/ReceiveCommodityMessageUseCaseTest.java @@ -88,6 +88,8 @@ public void shouldReceiveMessage() { new CommodityMessage.V3.Payload( "system", "station", + null, + null, 123456L, true, true,