1
package by.andd3dfx.templateapp.services.impl;
3
import by.andd3dfx.templateapp.dto.ArticleDto;
4
import by.andd3dfx.templateapp.dto.ArticleUpdateDto;
5
import by.andd3dfx.templateapp.error.exception.ArticleNotFoundException;
6
import by.andd3dfx.templateapp.mappers.ArticleMapper;
7
import by.andd3dfx.templateapp.persistence.dao.ArticleRepository;
8
import by.andd3dfx.templateapp.persistence.entities.Article;
9
import by.andd3dfx.templateapp.services.IArticleService;
11
import lombok.RequiredArgsConstructor;
12
import org.springframework.dao.EmptyResultDataAccessException;
13
import org.springframework.data.domain.PageRequest;
14
import org.springframework.data.domain.Pageable;
15
import org.springframework.data.domain.Slice;
16
import org.springframework.data.domain.Sort;
17
import org.springframework.stereotype.Service;
18
import org.springframework.transaction.annotation.Transactional;
21
@RequiredArgsConstructor
22
public class ArticleService implements IArticleService {
24
private final ArticleRepository articleRepository;
25
private final ArticleMapper articleMapper;
29
public ArticleDto create(ArticleDto articleDto) {
30
Article entity = articleMapper.toArticle(articleDto);
31
Article savedEntity = articleRepository.save(entity);
32
return articleMapper.toArticleDto(savedEntity);
35
@Transactional(readOnly = true)
37
public ArticleDto get(Long id) {
38
return articleRepository.findById(id)
39
.map(articleMapper::toArticleDto)
40
.orElseThrow(() -> new ArticleNotFoundException(id));
45
public void update(Long id, ArticleUpdateDto articleUpdateDto) {
46
articleRepository.findById(id)
48
articleMapper.toArticle(articleUpdateDto, article);
49
Article savedArticle = articleRepository.save(article);
50
return articleMapper.toArticleDto(savedArticle);
51
}).orElseThrow(() -> new ArticleNotFoundException(id));
56
public void delete(Long id) {
58
articleRepository.deleteById(id);
59
} catch (EmptyResultDataAccessException ex) {
60
throw new ArticleNotFoundException(id);
64
@Transactional(readOnly = true)
66
public Slice<ArticleDto> getAll(Pageable pageable) {
67
Slice<Article> pagedResult = articleRepository.findAll(pageable);
68
return pagedResult.map(articleMapper::toArticleDto);