diff --git a/src/main/java/club/ttg/dnd5/dto/base/TagDto.java b/src/main/java/club/ttg/dnd5/dto/base/TagDto.java new file mode 100644 index 00000000..042905af --- /dev/null +++ b/src/main/java/club/ttg/dnd5/dto/base/TagDto.java @@ -0,0 +1,15 @@ +package club.ttg.dnd5.dto.base; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@Getter +@Setter +@AllArgsConstructor +public class TagDto { + private String name; + private String value; +} diff --git a/src/main/java/club/ttg/dnd5/dto/species/SpeciesFeatureDto.java b/src/main/java/club/ttg/dnd5/dto/species/SpeciesFeatureDto.java index 92a8ac07..dd173307 100644 --- a/src/main/java/club/ttg/dnd5/dto/species/SpeciesFeatureDto.java +++ b/src/main/java/club/ttg/dnd5/dto/species/SpeciesFeatureDto.java @@ -2,19 +2,22 @@ import club.ttg.dnd5.dto.base.BaseDTO; import club.ttg.dnd5.dto.base.HasSourceDTO; +import club.ttg.dnd5.dto.base.TagDto; import club.ttg.dnd5.model.base.HasTags; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.Setter; -import java.util.HashMap; -import java.util.Map; +import java.util.ArrayList; +import java.util.Collection; @JsonInclude(JsonInclude.Include.NON_NULL) @Getter @Setter public class SpeciesFeatureDto extends BaseDTO implements HasTags, HasSourceDTO { - private Map tags = new HashMap<>(); + @JsonProperty("tags") + private Collection tags = new ArrayList<>(); @Override public String getSource() { diff --git a/src/main/java/club/ttg/dnd5/model/species/Species.java b/src/main/java/club/ttg/dnd5/model/species/Species.java index 7ea65d43..8745f2b6 100644 --- a/src/main/java/club/ttg/dnd5/model/species/Species.java +++ b/src/main/java/club/ttg/dnd5/model/species/Species.java @@ -26,10 +26,8 @@ public class Species extends CreatureProperties implements HasSourceEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "parent_id") private Species parent; - @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private Collection subSpecies = new ArrayList<>(); - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "source") private Source source = new Source(); diff --git a/src/main/java/club/ttg/dnd5/utills/species/SpeciesFeatureConverter.java b/src/main/java/club/ttg/dnd5/utills/species/SpeciesFeatureConverter.java index bb136d0d..35844dcb 100644 --- a/src/main/java/club/ttg/dnd5/utills/species/SpeciesFeatureConverter.java +++ b/src/main/java/club/ttg/dnd5/utills/species/SpeciesFeatureConverter.java @@ -1,5 +1,6 @@ package club.ttg.dnd5.utills.species; +import club.ttg.dnd5.dto.base.TagDto; import club.ttg.dnd5.dto.species.SpeciesFeatureDto; import club.ttg.dnd5.model.species.Species; import club.ttg.dnd5.model.species.SpeciesFeature; @@ -8,25 +9,39 @@ import lombok.NoArgsConstructor; import java.util.Collection; +import java.util.Map; import java.util.function.BiFunction; +import java.util.stream.Collectors; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class SpeciesFeatureConverter { - // Converter functions + // Converts SpeciesFeatureDto to SpeciesFeature private static final BiFunction DTO_TO_ENTITY_CONVERTER = (response, speciesFeature) -> { Converter.MAP_BASE_DTO_TO_ENTITY_NAME.apply(response, speciesFeature); Converter.MAP_DTO_SOURCE_TO_ENTITY_SOURCE.apply(response, speciesFeature); - speciesFeature.setTags(response.getTags()); + + // Convert tags from TagDto to Map + Map tags = response.getTags().stream() + .collect(Collectors.toMap(TagDto::getName, TagDto::getValue)); + speciesFeature.setTags(tags); + speciesFeature.setFeatureDescription(response.getDescription()); return speciesFeature; }; + // Converts SpeciesFeature to SpeciesFeatureDto private static final BiFunction ENTITY_TO_DTO_CONVERTER = (feature, dto) -> { Converter.MAP_ENTITY_TO_BASE_DTO.apply(dto, feature); Converter.MAP_ENTITY_SOURCE_TO_DTO_SOURCE.apply(dto, feature); - dto.setTags(feature.getTags()); + + // Convert tags from Map to a collection of TagDto + Collection tags = feature.getTags().entrySet().stream() + .map(entry -> new TagDto(entry.getKey(), entry.getValue())) + .collect(Collectors.toList()); + dto.setTags(tags); + dto.setDescription(feature.getFeatureDescription()); return dto; };