From 07ce63187110f4cc56616b343051243ef13cc8d5 Mon Sep 17 00:00:00 2001 From: Anibus Date: Tue, 27 May 2025 02:56:10 +0300 Subject: [PATCH] Correct response building addons - add addons response - add max repair param to units --- .../controllers/BuildingsController.kt | 9 ++----- .../data/dto/controllers/UnitFullDto.kt | 1 + .../controllers/building/AddonModifierDto.kt | 8 ++++++ .../building/AddonRequirementDto.kt | 8 ++++++ .../{ => building}/BuildingAddonDto.kt | 4 ++- .../{ => building}/BuildingFullDto.kt | 8 ++++-- .../{ => building}/BuildingShortDto.kt | 4 ++- .../dowstats/data/entities/AddonModifiers.kt | 10 ++++++++ .../data/entities/AddonRequirements.kt | 10 ++++++++ .../com/dowstats/data/entities/Building.kt | 4 +-- .../dowstats/data/entities/BuildingAddon.kt | 17 +++++++++++++ .../com/dowstats/data/entities/DowUnit.kt | 2 ++ .../datamaps/DowBuildingMappingService.kt | 4 +-- .../w40k/BuildingAddonRgdExtractService.kt | 1 + .../service/w40k/UnitRgdExtractService.kt | 22 ++++++++-------- src/main/resources/db/0.0.2/schema/units.json | 25 +++++++++++++++++++ src/main/resources/db/changelog-master.json | 4 +++ 17 files changed, 116 insertions(+), 25 deletions(-) create mode 100644 src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonModifierDto.kt create mode 100644 src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonRequirementDto.kt rename src/main/kotlin/com/dowstats/data/dto/controllers/{ => building}/BuildingAddonDto.kt (70%) rename src/main/kotlin/com/dowstats/data/dto/controllers/{ => building}/BuildingFullDto.kt (72%) rename src/main/kotlin/com/dowstats/data/dto/controllers/{ => building}/BuildingShortDto.kt (71%) create mode 100644 src/main/resources/db/0.0.2/schema/units.json diff --git a/src/main/kotlin/com/dowstats/controllers/BuildingsController.kt b/src/main/kotlin/com/dowstats/controllers/BuildingsController.kt index 98f8998..32fe738 100644 --- a/src/main/kotlin/com/dowstats/controllers/BuildingsController.kt +++ b/src/main/kotlin/com/dowstats/controllers/BuildingsController.kt @@ -1,14 +1,9 @@ package com.dowstats.controllers -import com.dowstats.data.dto.controllers.BuildingFullDto -import com.dowstats.data.dto.controllers.RaceBuildings -import com.dowstats.data.dto.controllers.RaceUnits -import com.dowstats.data.entities.Building -import com.dowstats.data.entities.DowUnit +import com.dowstats.data.dto.controllers.building.BuildingFullDto +import com.dowstats.data.dto.controllers.building.RaceBuildings import com.dowstats.data.repositories.BuildingRepository -import com.dowstats.data.repositories.UnitRepository import com.dowstats.service.datamaps.DowBuildingMappingService -import com.dowstats.service.datamaps.DowUnitMappingService import org.springframework.beans.factory.annotation.Autowired import org.springframework.web.bind.annotation.DeleteMapping import org.springframework.web.bind.annotation.GetMapping diff --git a/src/main/kotlin/com/dowstats/data/dto/controllers/UnitFullDto.kt b/src/main/kotlin/com/dowstats/data/dto/controllers/UnitFullDto.kt index 29de9b0..edd1c84 100644 --- a/src/main/kotlin/com/dowstats/data/dto/controllers/UnitFullDto.kt +++ b/src/main/kotlin/com/dowstats/data/dto/controllers/UnitFullDto.kt @@ -37,6 +37,7 @@ data class UnitFullDto( val reinforceCostFaith: Int?, val reinforceCostSouls: Int?, val reinforceTime: Int?, + val repairMax: Int?, val maxSergeants: Int?, val icon: String?, val modId: Long, diff --git a/src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonModifierDto.kt b/src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonModifierDto.kt new file mode 100644 index 0000000..e7226ec --- /dev/null +++ b/src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonModifierDto.kt @@ -0,0 +1,8 @@ +package com.dowstats.data.dto.controllers.building + +data class AddonModifierDto ( + val id: Long, + val reference: String?, + val usageType: String?, + val value: Double?, +) diff --git a/src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonRequirementDto.kt b/src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonRequirementDto.kt new file mode 100644 index 0000000..f997f2d --- /dev/null +++ b/src/main/kotlin/com/dowstats/data/dto/controllers/building/AddonRequirementDto.kt @@ -0,0 +1,8 @@ +package com.dowstats.data.dto.controllers.building + +data class AddonRequirementDto ( + val id: Long, + val reference: String?, + val replaceWhenDone: Boolean, + val value: Double?, +) diff --git a/src/main/kotlin/com/dowstats/data/dto/controllers/BuildingAddonDto.kt b/src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingAddonDto.kt similarity index 70% rename from src/main/kotlin/com/dowstats/data/dto/controllers/BuildingAddonDto.kt rename to src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingAddonDto.kt index f9046d4..a2cc848 100644 --- a/src/main/kotlin/com/dowstats/data/dto/controllers/BuildingAddonDto.kt +++ b/src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingAddonDto.kt @@ -1,4 +1,4 @@ -package com.dowstats.data.dto.controllers +package com.dowstats.data.dto.controllers.building data class BuildingAddonDto( val id: Long?, @@ -11,5 +11,7 @@ data class BuildingAddonDto( val addonCostFaith: Double?, val addonCostSouls: Double?, val addonCostTime: Int?, + val addonModifiers: Set, + val addonRequirements: Set, val icon: String?, ) diff --git a/src/main/kotlin/com/dowstats/data/dto/controllers/BuildingFullDto.kt b/src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingFullDto.kt similarity index 72% rename from src/main/kotlin/com/dowstats/data/dto/controllers/BuildingFullDto.kt rename to src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingFullDto.kt index a899d72..fa10804 100644 --- a/src/main/kotlin/com/dowstats/data/dto/controllers/BuildingFullDto.kt +++ b/src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingFullDto.kt @@ -1,4 +1,8 @@ -package com.dowstats.data.dto.controllers +package com.dowstats.data.dto.controllers.building + +import com.dowstats.data.dto.controllers.ArmorTypeDto +import com.dowstats.data.dto.controllers.RaceDto +import com.dowstats.data.dto.controllers.WeaponSlotDto data class BuildingFullDto( var id: Long?, @@ -21,6 +25,6 @@ data class BuildingFullDto( var repairMax: Int?, var icon: String?, var modId: Long?, - var addons: MutableSet?, + var addons: Set?, val weapons: Set?, ) diff --git a/src/main/kotlin/com/dowstats/data/dto/controllers/BuildingShortDto.kt b/src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingShortDto.kt similarity index 71% rename from src/main/kotlin/com/dowstats/data/dto/controllers/BuildingShortDto.kt rename to src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingShortDto.kt index 4545552..e69c73b 100644 --- a/src/main/kotlin/com/dowstats/data/dto/controllers/BuildingShortDto.kt +++ b/src/main/kotlin/com/dowstats/data/dto/controllers/building/BuildingShortDto.kt @@ -1,4 +1,6 @@ -package com.dowstats.data.dto.controllers +package com.dowstats.data.dto.controllers.building + +import com.dowstats.data.dto.controllers.RaceDto data class RaceBuildings( val race: RaceDto, diff --git a/src/main/kotlin/com/dowstats/data/entities/AddonModifiers.kt b/src/main/kotlin/com/dowstats/data/entities/AddonModifiers.kt index 319fccd..8610c41 100644 --- a/src/main/kotlin/com/dowstats/data/entities/AddonModifiers.kt +++ b/src/main/kotlin/com/dowstats/data/entities/AddonModifiers.kt @@ -1,5 +1,6 @@ package com.dowstats.data.entities +import com.dowstats.data.dto.controllers.building.AddonModifierDto import com.fasterxml.jackson.annotation.JsonIgnore import jakarta.persistence.* @@ -20,4 +21,13 @@ class AddonModifiers { var reference: String? = null var usageType: String? = null var value: Double? = null + + fun toDto(): AddonModifierDto { + return AddonModifierDto( + id = id!!, + reference = reference, + usageType = usageType, + value = value + ) + } } diff --git a/src/main/kotlin/com/dowstats/data/entities/AddonRequirements.kt b/src/main/kotlin/com/dowstats/data/entities/AddonRequirements.kt index 9f6f2c2..c7a5429 100644 --- a/src/main/kotlin/com/dowstats/data/entities/AddonRequirements.kt +++ b/src/main/kotlin/com/dowstats/data/entities/AddonRequirements.kt @@ -1,5 +1,6 @@ package com.dowstats.data.entities +import com.dowstats.data.dto.controllers.building.AddonRequirementDto import com.fasterxml.jackson.annotation.JsonIgnore import jakarta.persistence.* @@ -19,4 +20,13 @@ class AddonRequirements { var reference: String? = null var replaceWhenDone: Boolean = false var value: Double? = null + + fun toDto(): AddonRequirementDto { + return AddonRequirementDto( + id = id!!, + reference = reference, + replaceWhenDone = replaceWhenDone, + value = value + ) + } } diff --git a/src/main/kotlin/com/dowstats/data/entities/Building.kt b/src/main/kotlin/com/dowstats/data/entities/Building.kt index 52936c3..7fbdf54 100644 --- a/src/main/kotlin/com/dowstats/data/entities/Building.kt +++ b/src/main/kotlin/com/dowstats/data/entities/Building.kt @@ -1,6 +1,6 @@ package com.dowstats.data.entities -import com.dowstats.data.dto.controllers.BuildingFullDto +import com.dowstats.data.dto.controllers.building.BuildingFullDto import jakarta.persistence.* @@ -69,7 +69,7 @@ class Building { repairMax, icon, modId!!, - mutableSetOf(), + addons?.map { it.toDto() }?.toSet(), weapons?.map { it.toWeaponSlotDto() }?.toSet(), ) diff --git a/src/main/kotlin/com/dowstats/data/entities/BuildingAddon.kt b/src/main/kotlin/com/dowstats/data/entities/BuildingAddon.kt index 184239b..d6406d0 100644 --- a/src/main/kotlin/com/dowstats/data/entities/BuildingAddon.kt +++ b/src/main/kotlin/com/dowstats/data/entities/BuildingAddon.kt @@ -1,5 +1,6 @@ package com.dowstats.data.entities +import com.dowstats.data.dto.controllers.building.BuildingAddonDto import com.fasterxml.jackson.annotation.JsonIgnore import jakarta.persistence.* @@ -35,4 +36,20 @@ class BuildingAddon { var icon: String? = null + fun toDto(): BuildingAddonDto = BuildingAddonDto( + id = id, + name = name, + description = description, + filename = filename, + addonCostRequisition = addonCostRequisition, + addonCostPower = addonCostPower, + addonCostPopulation = addonCostPopulation, + addonCostFaith = addonCostFaith, + addonCostSouls = addonCostSouls, + addonCostTime = addonCostTime, + addonModifiers = addonModifiers?.map { it.toDto() }?.toSet() ?: emptySet(), + addonRequirements = addonRequirements?.map { it.toDto() }?.toSet() ?: emptySet(), + icon = icon + ) + } diff --git a/src/main/kotlin/com/dowstats/data/entities/DowUnit.kt b/src/main/kotlin/com/dowstats/data/entities/DowUnit.kt index 875da15..30b4fdf 100644 --- a/src/main/kotlin/com/dowstats/data/entities/DowUnit.kt +++ b/src/main/kotlin/com/dowstats/data/entities/DowUnit.kt @@ -41,6 +41,7 @@ class DowUnit { var health: Int? = null var healthRegeneration: Double? = null var moraleDeathPenalty: Int? = null + var repairMax: Int? = null var moraleMax: Int? = null var moraleBroken: Int? = null var moraleRegeneration: Int? = null @@ -103,6 +104,7 @@ class DowUnit { reinforceCostFaith, reinforceCostSouls, reinforceTime, + repairMax, maxSergeants, icon, modId!!, diff --git a/src/main/kotlin/com/dowstats/service/datamaps/DowBuildingMappingService.kt b/src/main/kotlin/com/dowstats/service/datamaps/DowBuildingMappingService.kt index 0f62555..c1f8ed6 100644 --- a/src/main/kotlin/com/dowstats/service/datamaps/DowBuildingMappingService.kt +++ b/src/main/kotlin/com/dowstats/service/datamaps/DowBuildingMappingService.kt @@ -1,7 +1,7 @@ package com.dowstats.service.datamaps -import com.dowstats.data.dto.controllers.BuildingShortDto -import com.dowstats.data.dto.controllers.RaceBuildings +import com.dowstats.data.dto.controllers.building.BuildingShortDto +import com.dowstats.data.dto.controllers.building.RaceBuildings import com.dowstats.data.entities.Building import com.dowstats.data.repositories.BuildingRepository import com.dowstats.data.repositories.RaceRepository diff --git a/src/main/kotlin/com/dowstats/service/w40k/BuildingAddonRgdExtractService.kt b/src/main/kotlin/com/dowstats/service/w40k/BuildingAddonRgdExtractService.kt index e031238..71c0013 100644 --- a/src/main/kotlin/com/dowstats/service/w40k/BuildingAddonRgdExtractService.kt +++ b/src/main/kotlin/com/dowstats/service/w40k/BuildingAddonRgdExtractService.kt @@ -87,6 +87,7 @@ class BuildingAddonRgdExtractService @Autowired constructor( it.addon = addon it.reference = rTable.getStringByName("\$REF") it.replaceWhenDone = rTable.getBooleanByName("replace_when_done") == true + // TODO - что-то придумать с этим it.value = if (it.reference == "requirements\\required_total_pop.lua") rTable.getDoubleByName("population_required") else null } diff --git a/src/main/kotlin/com/dowstats/service/w40k/UnitRgdExtractService.kt b/src/main/kotlin/com/dowstats/service/w40k/UnitRgdExtractService.kt index 9ddafce..9f34336 100644 --- a/src/main/kotlin/com/dowstats/service/w40k/UnitRgdExtractService.kt +++ b/src/main/kotlin/com/dowstats/service/w40k/UnitRgdExtractService.kt @@ -5,6 +5,7 @@ import com.dowstats.data.dto.UnitDataToSave import com.dowstats.data.dto.WeaponsData import com.dowstats.data.entities.* import com.dowstats.data.rgd.RgdData +import com.dowstats.data.rgd.RgdDataUtil.getBooleanByName import com.dowstats.data.rgd.RgdDataUtil.getDoubleByName import com.dowstats.data.rgd.RgdDataUtil.getIntByName import com.dowstats.data.rgd.RgdDataUtil.getRgdTableByName @@ -29,6 +30,7 @@ class UnitRgdExtractService @Autowired constructor( val hitpoints: Double?, val regeneration: Double?, val moraleDeathPenalty: Double?, + val maxRepairers: Int?, ) data class MoraleData( @@ -99,6 +101,7 @@ class UnitRgdExtractService @Autowired constructor( unit.health = healthData.hitpoints?.toInt() unit.healthRegeneration = healthData.regeneration unit.moraleDeathPenalty = healthData.moraleDeathPenalty?.toInt() + unit.repairMax = healthData.maxRepairers val moraleData = getMoraleData(squadData) unit.moraleMax = moraleData.max?.toInt() @@ -122,6 +125,8 @@ class UnitRgdExtractService @Autowired constructor( unit.reinforceCostSouls = getReinforceSouls(reinforceCostData) unit.reinforceTime = getReinforceTime(reinforceData) + + val sergeantsData = getSergeantsData(squadData) val sergeantsEntities: List>>? = sergeantsData.first?.mapNotNull { sergeantData -> @@ -215,17 +220,12 @@ class UnitRgdExtractService @Autowired constructor( val descriptionRefs = uiInfo?.getRgdTableByName("help_text_list") ?.map { (it.value as String).replace("$", "") } - ?.filter { it != "0" && it != "tables\\text_table.lua" && it != "" } - ?.sortedBy { - try { - it.toInt() - } catch (e: Exception) { - 0 - } - } + ?.filter { it != "0" && it != "tables\\text_table.lua" && it != "" && it.toIntOrNull() != null } + ?.sortedBy { it.toInt() } val description = try { - descriptionRefs?.map { modDictionary[it.toInt()] }?.joinToString("\n") + descriptionRefs?.map { + modDictionary[it.toInt()] }?.joinToString("\n") } catch (e: Exception) { log.warn("Error parsing ui description", e) null @@ -270,10 +270,12 @@ class UnitRgdExtractService @Autowired constructor( private fun getHealthAndMoraleDeathPenaltyData(unitData: List): HealthAndMoraleDeathData { val healthExt = unitData.getRgdTableByName("health_ext") + val canRepair = healthExt?.getBooleanByName("can_be_repaired") return HealthAndMoraleDeathData( healthExt?.getDoubleByName("hitpoints"), healthExt?.getDoubleByName("regeneration_rate"), - healthExt?.getDoubleByName("morale_death") + healthExt?.getDoubleByName("morale_death"), + canRepair?.let { if (it) healthExt.getIntByName("max_repairers") else null } ) } diff --git a/src/main/resources/db/0.0.2/schema/units.json b/src/main/resources/db/0.0.2/schema/units.json new file mode 100644 index 0000000..47877d4 --- /dev/null +++ b/src/main/resources/db/0.0.2/schema/units.json @@ -0,0 +1,25 @@ +{ + "databaseChangeLog": [ + { + "changeSet": { + "id": "Add repair_max column to units", + "author": "anibus", + "changes": [ + { + "addColumn": { + "columns": [ + { + "column": { + "name": "repair_max", + "type": "int" + } + } + ], + "tableName": "units" + } + } + ] + } + } + ] +} diff --git a/src/main/resources/db/changelog-master.json b/src/main/resources/db/changelog-master.json index e1f9f08..5e9721c 100644 --- a/src/main/resources/db/changelog-master.json +++ b/src/main/resources/db/changelog-master.json @@ -77,6 +77,10 @@ "include": { "file": "db/0.0.2/schema/addon.json" } + },{ + "include": { + "file": "db/0.0.2/schema/units.json" + } } ] }