package edu.gjoko.schedlr.services; import edu.gjoko.schedlr.entity.*; import edu.gjoko.schedlr.repositories.BusinessRepository; import edu.gjoko.schedlr.repositories.ServiceRepository; import edu.gjoko.schedlr.repositories.ServiceTypeRepository; import edu.gjoko.schedlr.repositories.StakeholderRepository; import lombok.AllArgsConstructor; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import java.util.List; import static edu.gjoko.schedlr.entity.BusinessStatus.ACTIVE; import static edu.gjoko.schedlr.entity.BusinessStatus.NEW; @Service @AllArgsConstructor public class BusinessService { private final BusinessRepository businessRepository; private final ServiceTypeRepository serviceTypeRepository; private final ServiceRepository serviceRepository; private final StakeholderRepository stakeholderRepository; private BCryptPasswordEncoder bCryptPasswordEncoder; public void saveBusiness(Business business) { saveNewServiceTypes(business); business.getOwner().setStakeholderType(StakeholderType.BUSINESS_OWNER); business.getOwner().setPassword(bCryptPasswordEncoder.encode(business.getOwner().getPassword())); business.setBusinessStatus(NEW); businessRepository.save(business); } public void saveNewServiceTypes(Business business) { business.getServices() .stream() .forEach(service -> { if (service.getServiceType().getId() == null) { ServiceType serviceType = service.getServiceType(); serviceType.setBusinessType(business.getBusinessType()); service.setServiceType(serviceTypeRepository.save(serviceType)); } }); } public List findAll() { return businessRepository.findAll(); } public void updateBusinesses(List businessList) { businessList .stream() .forEach(business -> { stakeholderRepository.save(business.getOwner()); serviceRepository.saveAll(business.getServices()); businessRepository.save(business); }); } public Business findByOwner(Long ownerId) { var owner = new Stakeholder(); owner.setId(ownerId); return businessRepository.findBusinessByOwner(owner); } public List findByBusinessTypeAndActiveStatus(BusinessType businessType) { return businessRepository.findBusinessesByBusinessTypeAndBusinessStatus(businessType, ACTIVE); } }