Skip to content

Commit

Permalink
8. DTO [#505114]
Browse files Browse the repository at this point in the history
  • Loading branch information
vadimstrya committed Jan 24, 2025
1 parent 0eb1888 commit 9747305
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 5 deletions.
35 changes: 33 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.30.0</version>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
Expand All @@ -66,6 +66,12 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.6.3</version>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
Expand All @@ -80,6 +86,30 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.6.3</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
Expand All @@ -100,6 +130,7 @@
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<excludeGeneratedSources>true</excludeGeneratedSources>
</configuration>
<goals>
<goal>check</goal>
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/ru/job4j/api/controller/PostController.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import ru.job4j.api.dto.PostDto;
import ru.job4j.api.entity.UserPost;
import ru.job4j.api.service.PostService;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/post")
Expand Down Expand Up @@ -36,7 +39,6 @@ public ResponseEntity<UserPost> save(@RequestBody UserPost post) {
}

@PutMapping
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<Void> update(@RequestBody UserPost post) {
if (postService.update(post)) {
return ResponseEntity.ok().build();
Expand All @@ -45,11 +47,15 @@ public ResponseEntity<Void> update(@RequestBody UserPost post) {
}

@DeleteMapping("/{postId}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public ResponseEntity<Void> delete(@PathVariable Long postId) {
if (postService.deleteById(postId)) {
return ResponseEntity.noContent().build();
}
return ResponseEntity.notFound().build();
}

@GetMapping("/getPosts")
public List<PostDto> getPosts(@RequestBody List<Long> userIdList) {
return postService.getPosts(userIdList);
}
}
16 changes: 16 additions & 0 deletions src/main/java/ru/job4j/api/dto/PostDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ru.job4j.api.dto;

import lombok.Getter;
import lombok.Setter;
import ru.job4j.api.entity.UserPost;

import java.util.List;

@Getter
@Setter
public class PostDto {

private Long userId;
private String userName;
private List<UserPost> posts;
}
19 changes: 19 additions & 0 deletions src/main/java/ru/job4j/api/mapper/PostMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.job4j.api.mapper;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import org.mapstruct.ReportingPolicy;
import ru.job4j.api.dto.PostDto;
import ru.job4j.api.entity.User;
import ru.job4j.api.entity.UserPost;

import java.util.List;

@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.ERROR)
public interface PostMapper {

@Mapping(target = "userId", source = "user.id")
@Mapping(target = "userName", source = "user.login")
PostDto convert(User user, List<UserPost> posts);
}
4 changes: 4 additions & 0 deletions src/main/java/ru/job4j/api/service/PostService.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package ru.job4j.api.service;

import ru.job4j.api.dto.PostDto;
import ru.job4j.api.dto.request.post.UserPostCreateRequest;
import ru.job4j.api.dto.request.post.UserPostImageUpdateRequest;
import ru.job4j.api.dto.request.post.UserPostUpdateRequest;
import ru.job4j.api.entity.UserPost;

import java.util.List;
import java.util.Optional;

public interface PostService {
Expand All @@ -24,4 +26,6 @@ public interface PostService {
boolean update(UserPost post);

boolean deleteById(Long postId);

List<PostDto> getPosts(List<Long> userIdList);
}
22 changes: 21 additions & 1 deletion src/main/java/ru/job4j/api/service/impl/PostServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,29 @@
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.job4j.api.dto.PostDto;
import ru.job4j.api.dto.request.post.UserPostCreateRequest;
import ru.job4j.api.dto.request.post.UserPostImageUpdateRequest;
import ru.job4j.api.dto.request.post.UserPostUpdateRequest;
import ru.job4j.api.entity.User;
import ru.job4j.api.entity.UserPost;
import ru.job4j.api.entity.UserPostImage;
import ru.job4j.api.enums.Statuses;
import ru.job4j.api.mapper.PostMapper;
import ru.job4j.api.repository.UserPostImageRepository;
import ru.job4j.api.repository.UserPostRepository;
import ru.job4j.api.repository.UserRepository;
import ru.job4j.api.service.PostService;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
@RequiredArgsConstructor
public class PostServiceImpl implements PostService {

private final PostMapper postMapper;
private final UserRepository userRepository;
private final UserPostRepository userPostRepository;
private final UserPostImageRepository userPostImageRepository;

Expand Down Expand Up @@ -100,6 +106,20 @@ public boolean deleteById(Long postId) {
return false;
}

@Override
public List<PostDto> getPosts(List<Long> userIdList) {
List<PostDto> result = new ArrayList<>();

for (Long userId : userIdList) {
userRepository.findById(userId).ifPresent(user -> {
List<UserPost> posts = userPostRepository.findByUserIdAndStatus(user.getId(), Statuses.A);
PostDto postDto = postMapper.convert(user, posts);
result.add(postDto);
});
}
return result;
}

private UserPost createPost(UserPostCreateRequest request) {
UserPost post = new UserPost();
post.setUserId(request.getUserId());
Expand Down

0 comments on commit 9747305

Please sign in to comment.