From e4b07fcbffa34d4b0ca1364b25fd73a700e0b727 Mon Sep 17 00:00:00 2001 From: SlimusMinus Date: Thu, 11 Jun 2026 00:52:56 +0300 Subject: [PATCH] fixed category in posts --- .../com/krylov/refound/dto/PostResponse.java | 1 - .../java/com/krylov/refound/entity/Post.java | 5 ++-- .../krylov/refound/enums/PostCategory.java | 29 +++++++++++++++++++ .../com/krylov/refound/mapper/PostMapper.java | 9 ++++++ .../krylov/refound/service/PostService.java | 5 +++- 5 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/krylov/refound/enums/PostCategory.java diff --git a/src/main/java/com/krylov/refound/dto/PostResponse.java b/src/main/java/com/krylov/refound/dto/PostResponse.java index d15085d..4aa9a6d 100644 --- a/src/main/java/com/krylov/refound/dto/PostResponse.java +++ b/src/main/java/com/krylov/refound/dto/PostResponse.java @@ -1,6 +1,5 @@ package com.krylov.refound.dto; -import com.krylov.refound.entity.Image; import com.krylov.refound.enums.PostStatus; import com.krylov.refound.enums.PostType; import java.time.LocalDateTime; diff --git a/src/main/java/com/krylov/refound/entity/Post.java b/src/main/java/com/krylov/refound/entity/Post.java index 094b95a..d930167 100644 --- a/src/main/java/com/krylov/refound/entity/Post.java +++ b/src/main/java/com/krylov/refound/entity/Post.java @@ -1,6 +1,7 @@ package com.krylov.refound.entity; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.krylov.refound.enums.PostCategory; import com.krylov.refound.enums.PostStatus; import com.krylov.refound.enums.PostType; import jakarta.persistence.CascadeType; @@ -32,7 +33,8 @@ public class Post { private String title; @Column(length = 2000) private String description; - private String category; + @Enumerated(EnumType.STRING) + private PostCategory category; private String city; private String district; private Double latitude; @@ -53,5 +55,4 @@ public class Post { @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) private List images = new ArrayList<>(); - } diff --git a/src/main/java/com/krylov/refound/enums/PostCategory.java b/src/main/java/com/krylov/refound/enums/PostCategory.java new file mode 100644 index 0000000..aa5b1f6 --- /dev/null +++ b/src/main/java/com/krylov/refound/enums/PostCategory.java @@ -0,0 +1,29 @@ +package com.krylov.refound.enums; + +import lombok.Getter; + +@Getter +public enum PostCategory { + ANIMAL("Питомец"), + THING("Вещь"), + OTHER("Другое"); + + private final String displayName; + + PostCategory(String displayName) { + this.displayName = displayName; + } + + public static PostCategory fromDisplayName(String displayName) { + if (displayName == null) { + return null; + } + for (PostCategory category : PostCategory.values()) { + if (category.displayName.equals(displayName)) { + return category; + } + } + throw new IllegalArgumentException("No enum constant with displayName: " + displayName); + } + +} diff --git a/src/main/java/com/krylov/refound/mapper/PostMapper.java b/src/main/java/com/krylov/refound/mapper/PostMapper.java index 585704b..04d3217 100644 --- a/src/main/java/com/krylov/refound/mapper/PostMapper.java +++ b/src/main/java/com/krylov/refound/mapper/PostMapper.java @@ -3,6 +3,7 @@ package com.krylov.refound.mapper; import com.krylov.refound.dto.PostRequest; import com.krylov.refound.dto.PostResponse; import com.krylov.refound.entity.Post; +import com.krylov.refound.enums.PostCategory; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import com.krylov.refound.entity.Image; @@ -12,10 +13,12 @@ import java.util.List; @Mapper(componentModel = "spring") public interface PostMapper { + @Mapping(source = "category", target = "category", qualifiedByName = "stringToPostCategory") Post toEntity(PostRequest request); @Mapping(source = "user.login", target = "userEmail") @Mapping(source = "images", target = "images", qualifiedByName = "imagesToUrls") + @Mapping(target = "category", expression = "java(post.getCategory().getDisplayName())") PostResponse toResponse(Post post); @Named("imagesToUrls") @@ -25,4 +28,10 @@ public interface PostMapper { .map(Image::getUrl) .toList(); } + + @Named("stringToPostCategory") + default PostCategory stringToPostCategory(String displayName) { + if (displayName == null) return null; + return PostCategory.fromDisplayName(displayName); + } } diff --git a/src/main/java/com/krylov/refound/service/PostService.java b/src/main/java/com/krylov/refound/service/PostService.java index 7d1b6d2..9d99beb 100644 --- a/src/main/java/com/krylov/refound/service/PostService.java +++ b/src/main/java/com/krylov/refound/service/PostService.java @@ -5,6 +5,7 @@ import com.krylov.refound.dto.PostResponse; import com.krylov.refound.entity.Image; import com.krylov.refound.entity.Post; import com.krylov.refound.enums.ErrorCode; +import com.krylov.refound.enums.PostCategory; import com.krylov.refound.enums.PostStatus; import com.krylov.refound.exception.ApiException; import com.krylov.refound.mapper.PostMapper; @@ -93,7 +94,9 @@ public class PostService { post.setTitle(request.getTitle()); post.setDescription(request.getDescription()); - post.setCategory(request.getCategory()); + if (request.getCategory() != null) { + post.setCategory(PostCategory.fromDisplayName(request.getCategory())); + } post.setPhone(request.getPhone()); post.setType(request.getType()); if (request.getLatitude() != null && request.getLongitude() != null){