From 5297c610adacdde2dc311bda675a3e61a61f064f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Slov=C3=ADk?= <xslovik@fi.muni.cz> Date: Tue, 4 Apr 2023 19:47:50 +0200 Subject: [PATCH] Adding generic BaseFacade --- .../pa165/core/facade/common/BaseFacade.java | 27 ++++++++ .../core/facade/common/BaseFacadeImpl.java | 65 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java create mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java new file mode 100644 index 0000000..4ec4a63 --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java @@ -0,0 +1,27 @@ +package cz.muni.fi.pa165.core.facade.common; + +import cz.muni.fi.pa165.core.model.DomainEntityDto; + +import java.util.List; +import java.util.Optional; + +/** + * BaseFacade for common CRUD operations + * + * @param <N> NewRequestDto + * @param <D> Dto + * @param <K> Entity + * @author martinslovik + */ +public interface BaseFacade<N, D extends DomainEntityDto, K> { + + D save(N newDtoRequest); + + Optional<D> findById(K id); + + List<D> findAll(); + + void deleteById(K id); + + void deleteAll(); +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java new file mode 100644 index 0000000..cd1f3ec --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java @@ -0,0 +1,65 @@ +package cz.muni.fi.pa165.core.facade.common; + +import cz.muni.fi.pa165.core.data.domain.common.DomainEntity; +import cz.muni.fi.pa165.core.model.DomainEntityDto; +import cz.muni.fi.pa165.core.service.common.BaseService; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public abstract class BaseFacadeImpl<N, D extends DomainEntityDto, E extends DomainEntity, K> implements BaseFacade<N, D, K> { + + private final BaseService<E, K> service; + private Class<D> dtoClass; + private Class<E> entityClass; + private final ModelMapper modelMapper; + + @Autowired + protected BaseFacadeImpl(BaseService<E, K> service, ModelMapper modelMapper) { + this.service = service; + this.modelMapper = modelMapper; + } + + public void setDtoClass(Class<D> dtoClass) { + this.dtoClass = dtoClass; + } + + public void setEntityClass(Class<E> entityClass) { + this.entityClass = entityClass; + } + + @Override + public D save(N newDtoRequest) { + var entity = modelMapper.map(newDtoRequest, entityClass); + var savedEntity = service.save(entity); + return modelMapper.map(savedEntity, dtoClass); + } + + @Override + public Optional<D> findById(K id) { + var entityOptional = service.findById(id); + return entityOptional.map(e -> modelMapper.map(e, dtoClass)); + } + + @Override + public List<D> findAll() { + var entities = service.findAll(); + return entities.stream() + .map(entity -> modelMapper.map(entity, dtoClass)) + .toList(); + } + + @Override + public void deleteById(K id) { + service.deleteById(id); + } + + @Override + public void deleteAll() { + service.deleteAll(); + } +} -- GitLab