From 90016d2cd66ff6b0015c1ffdae40a9ffb6107059 Mon Sep 17 00:00:00 2001 From: SlimusMinus Date: Thu, 7 May 2026 01:08:29 +0300 Subject: [PATCH] added get and create post --- .../refound/controller/PostController.java | 14 +++-- .../com/krylov/refound/dto/PostRequest.java | 6 +- .../com/krylov/refound/enums/PostType.java | 11 +++- .../krylov/refound/service/PostService.java | 63 +++---------------- 4 files changed, 27 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/krylov/refound/controller/PostController.java b/src/main/java/com/krylov/refound/controller/PostController.java index c842b4d..7507b15 100644 --- a/src/main/java/com/krylov/refound/controller/PostController.java +++ b/src/main/java/com/krylov/refound/controller/PostController.java @@ -3,10 +3,12 @@ package com.krylov.refound.controller; import com.krylov.refound.dto.PostFilter; import com.krylov.refound.dto.PostRequest; import com.krylov.refound.dto.PostResponse; +import com.krylov.refound.entity.Post; import com.krylov.refound.repository.PostRepository; import com.krylov.refound.service.PostService; import java.util.List; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; @@ -24,18 +26,20 @@ import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/api/v1/posts") @RequiredArgsConstructor +@Slf4j public class PostController { private final PostService service; - @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public PostResponse create(@RequestPart("data") PostRequest request, @RequestPart(value = "files", required = false) List files) { - return service.create(request, files); + @PostMapping + public PostRequest create(@RequestBody PostRequest request) { + log.info(request.toString()); + return service.create(request); } @GetMapping - public Page getFeed(PostFilter filter, Pageable pageable) { - return service.getFeed(filter, pageable); + public List getFeed() { + return service.getFeed(); } @PutMapping("/{id}") diff --git a/src/main/java/com/krylov/refound/dto/PostRequest.java b/src/main/java/com/krylov/refound/dto/PostRequest.java index 055dc1d..961bf98 100644 --- a/src/main/java/com/krylov/refound/dto/PostRequest.java +++ b/src/main/java/com/krylov/refound/dto/PostRequest.java @@ -1,5 +1,6 @@ package com.krylov.refound.dto; +import com.fasterxml.jackson.annotation.JsonInclude; import com.krylov.refound.enums.PostType; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -18,8 +19,5 @@ public class PostRequest { private String category; - @NotBlank - private String city; - - private String district; + private String phone; } diff --git a/src/main/java/com/krylov/refound/enums/PostType.java b/src/main/java/com/krylov/refound/enums/PostType.java index 2d13236..268be5f 100644 --- a/src/main/java/com/krylov/refound/enums/PostType.java +++ b/src/main/java/com/krylov/refound/enums/PostType.java @@ -1,6 +1,13 @@ package com.krylov.refound.enums; +import com.fasterxml.jackson.annotation.JsonCreator; + public enum PostType { - LOST, - FOUND + LOSS, + FOUND; + + @JsonCreator + public static PostType from(String value) { + return PostType.valueOf(value.toUpperCase()); + } } diff --git a/src/main/java/com/krylov/refound/service/PostService.java b/src/main/java/com/krylov/refound/service/PostService.java index 6f32b43..7e54ed9 100644 --- a/src/main/java/com/krylov/refound/service/PostService.java +++ b/src/main/java/com/krylov/refound/service/PostService.java @@ -39,69 +39,21 @@ public class PostService { private final FavoriteRepository favoriteRepository; @CacheEvict(value = "posts", allEntries = true) - public PostResponse create(PostRequest request, List files) { - - User user = userService.getCurrentUser(); + public PostRequest create(PostRequest request) { +// User user = userService.getCurrentUser(); +// Post post = mapper.toEntity(request); post.setCreatedAt(LocalDateTime.now()); post.setStatus(PostStatus.ACTIVE); - post.setUser(user); Post savedPost = repository.save(post); - if (files != null) { - for (MultipartFile file : files) { - String url = storageService.save(file); - - Image image = new Image(); - image.setUrl(url); - image.setPost(savedPost); - - imageRepository.save(image); - } - } - - return mapper.toResponse(savedPost); + return request; } - @Cacheable(value = "posts", key = "#filter.toString() + '_' + #pageable.pageNumber") - public Page getFeed(PostFilter filter, Pageable pageable) { - - User user = userService.getCurrentUser(); - - Page posts; - - if (filter.getLat() != null) { - posts = repository.searchWithGeo( - filter.getType() != null ? filter.getType().name() : null, - filter.getCity(), - filter.getCategory(), - filter.getLat(), - filter.getLng(), - filter.getRadius(), - pageable - ); - } else { - posts = repository.findAll(PostSpecification.withFilter(filter), pageable); - } - - // 🔥 собираем id всех постов - List postIds = posts.getContent() - .stream() - .map(Post::getId) - .toList(); - - // 🔥 одним запросом получаем избранные - Set favoriteIds = new HashSet<>( - favoriteRepository.findFavoritePostIds(user.getId(), postIds) - ); - - return posts.map(post -> { - PostResponse response = mapper.toResponse(post); - response.setFavorite(favoriteIds.contains(post.getId())); - return response; - }); + public List getFeed() { + return repository.findAll(); } @Cacheable(value = "post", key = "#id") @@ -125,8 +77,7 @@ public class PostService { post.setTitle(request.getTitle()); post.setDescription(request.getDescription()); post.setCategory(request.getCategory()); - post.setCity(request.getCity()); - post.setDistrict(request.getDistrict()); + post.setType(request.getType()); Post updated = repository.save(post);