mirror of
https://github.com/Prominence/car-repair-site.git
synced 2026-01-09 03:36:46 +03:00
115 lines
4.5 KiB
Java
115 lines
4.5 KiB
Java
package com.github.prominence.carrepair.service;
|
|
|
|
import com.github.prominence.carrepair.model.domain.Order;
|
|
import com.github.prominence.carrepair.model.dto.OrderDto;
|
|
import com.github.prominence.carrepair.model.mapper.OrderMapper;
|
|
import com.github.prominence.carrepair.repository.OrderRepository;
|
|
import com.github.prominence.carrepair.validation.OrderValidator;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.data.domain.PageImpl;
|
|
import org.springframework.data.domain.Pageable;
|
|
import org.springframework.data.jpa.domain.Specification;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.validation.BindingResult;
|
|
|
|
import java.util.Optional;
|
|
|
|
@Service
|
|
public class OrderService {
|
|
private static final Logger logger = LogManager.getLogger(OrderService.class);
|
|
|
|
private OrderRepository orderRepository;
|
|
private ClientService clientService;
|
|
private MechanicService mechanicService;
|
|
private OrderValidator orderValidator;
|
|
private OrderMapper orderMapper;
|
|
|
|
public OrderService(OrderRepository orderRepository, ClientService clientService, MechanicService mechanicService,
|
|
OrderValidator orderValidator, OrderMapper orderMapper) {
|
|
this.orderRepository = orderRepository;
|
|
this.clientService = clientService;
|
|
this.mechanicService = mechanicService;
|
|
this.orderValidator = orderValidator;
|
|
this.orderMapper = orderMapper;
|
|
}
|
|
|
|
public Page<Order> findAll(Specification<Order> specification, Pageable pageable) {
|
|
final Page<Order> orderPage = orderRepository.findAll(specification, pageable);
|
|
logger.trace(orderPage);
|
|
return orderPage;
|
|
}
|
|
|
|
public Optional<Order> findById(Long id) {
|
|
final Optional<Order> orderOptional = orderRepository.findById(id);
|
|
logger.debug("{} found by id={}", () -> orderOptional, () -> id);
|
|
return orderOptional;
|
|
}
|
|
|
|
public Order save(Order order) {
|
|
final Order orderToSave = orderRepository.save(order);
|
|
logger.trace("[{}] was saved.", () -> orderToSave);
|
|
return orderToSave;
|
|
}
|
|
|
|
public Order save(OrderDto orderDto) {
|
|
return save(orderMapper.orderDtoToOrder(orderDto));
|
|
}
|
|
|
|
public boolean deleteOrderById(Long id) {
|
|
try {
|
|
orderRepository.deleteById(id);
|
|
logger.debug("Order[id={}] was deleted.", () -> id);
|
|
return true;
|
|
} catch (Exception e) {
|
|
logger.error("Order[id={}] wasn't deleted. Exception: {}", () -> id, e::getMessage);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public void deleteAll() {
|
|
orderRepository.deleteAll();
|
|
}
|
|
|
|
public long getOrderCount() {
|
|
final long orderCount = orderRepository.count();
|
|
logger.trace("Found {} orders.", () -> orderCount);
|
|
return orderCount;
|
|
}
|
|
|
|
// TODO: check possible useless parameters
|
|
public void fetchNestedObjectsAndValidate(OrderDto order, Long clientId, Long mechanicId, BindingResult bindingResult) {
|
|
if (clientId != null) {
|
|
logger.trace("Fetching Client[{}] for {}.", () -> clientId, () -> order);
|
|
clientService.findById(clientId).ifPresent(client -> {
|
|
order.setClientId(client.getId());
|
|
order.setClientFirstName(client.getFirstName());
|
|
order.setClientMiddleName(client.getMiddleName());
|
|
order.setClientLastName(client.getLastName());
|
|
});
|
|
}
|
|
if (mechanicId != null) {
|
|
logger.trace("Fetching Mechanic[{}] for {}.", () -> clientId, () -> order);
|
|
mechanicService.findById(mechanicId).ifPresent(mechanic -> {
|
|
order.setMechanicId(mechanic.getId());
|
|
order.setMechanicFirstName(mechanic.getFirstName());
|
|
order.setClientMiddleName(mechanic.getMiddleName());
|
|
order.setMechanicLastName(mechanic.getLastName());
|
|
});
|
|
}
|
|
orderValidator.validate(order, bindingResult);
|
|
}
|
|
|
|
public Page<OrderDto> convertToDtoPage(Page<Order> orderPage) {
|
|
final Page<OrderDto> orderDtoPage = new PageImpl<>(orderMapper.ordersToOrderDtoList(orderPage.getContent()),
|
|
orderPage.getPageable(), orderPage.getTotalElements());
|
|
logger.trace("Dto page: {}.", () -> orderDtoPage);
|
|
return orderDtoPage;
|
|
}
|
|
|
|
public OrderDto convertToDto(Order order) {
|
|
return orderMapper.orderToOrderDto(order);
|
|
}
|
|
}
|