CarManagementServiceImpl.java
package net.andresbustamante.yafoot.core.services.impl;
import net.andresbustamante.yafoot.commons.exceptions.ApplicationException;
import net.andresbustamante.yafoot.commons.model.UserContext;
import net.andresbustamante.yafoot.core.dao.CarDao;
import net.andresbustamante.yafoot.core.dao.PlayerDao;
import net.andresbustamante.yafoot.core.model.Car;
import net.andresbustamante.yafoot.core.model.Player;
import net.andresbustamante.yafoot.core.services.CarManagementService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class CarManagementServiceImpl implements CarManagementService {
private final Logger log = LoggerFactory.getLogger(CarManagementServiceImpl.class);
private final CarDao carDAO;
private final PlayerDao playerDAO;
public CarManagementServiceImpl(final CarDao carDAO, final PlayerDao playerDAO) {
this.carDAO = carDAO;
this.playerDAO = playerDAO;
}
@Transactional
@Override
public Integer saveCar(final Car car, final UserContext ctx) {
Player player = playerDAO.findPlayerByEmail(ctx.getUsername());
car.setDriver(player);
carDAO.saveCar(car);
log.info("Car successfully added with the ID {}", car.getId());
return car.getId();
}
@Override
@Transactional
public void updateCar(final Integer carId, final Car updatedCar, final UserContext ctx)
throws ApplicationException {
Player player = playerDAO.findPlayerByEmail(ctx.getUsername());
Car storedCar = carDAO.findCarById(carId);
if (storedCar != null) {
if (player != null && !storedCar.getDriver().getId().equals(player.getId())) {
throw new ApplicationException("unauthorised.user.error", "This car can only be updated by its owner");
}
storedCar.setName(updatedCar.getName());
storedCar.setNumSeats(updatedCar.getNumSeats());
carDAO.updateCar(storedCar);
log.info("Car {} successfully updated", carId);
}
}
@Override
@Transactional
public void deactivateCar(final Car car, final UserContext ctx) throws ApplicationException {
Player player = playerDAO.findPlayerByEmail(ctx.getUsername());
if (player != null && !car.getDriver().getId().equals(player.getId())) {
throw new ApplicationException("unauthorised.user.error", "This car can only be deactivated by its"
+ " owner");
}
if (carDAO.isCarUsedForComingMatches(car)) {
throw new ApplicationException("car.registered.coming.match.error",
"This car cannot be deactivated because it is still registered for a coming match");
}
carDAO.deactivateCar(car);
log.info("Car {} successfully deactivated", car.getId());
}
@Transactional
@Override
public void deactivateCarsByPlayer(final Player player, final UserContext ctx) {
int numCars = carDAO.deactivateCarsByPlayer(player);
log.info("{} cars removed for player", numCars);
}
}