Index: src/main/java/edu/gjoko/schedlr/services/AppointmentsService.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/services/AppointmentsService.java	(revision 943857ccadc5bd0933c2bd0b003629ae75c29b17)
+++ 	(revision )
@@ -1,109 +1,0 @@
-package edu.gjoko.schedlr.services;
-
-import edu.gjoko.schedlr.dto.AppointmentInfoDto;
-import edu.gjoko.schedlr.entity.*;
-import edu.gjoko.schedlr.exceptions.BlockingTimeException;
-import edu.gjoko.schedlr.mappers.AppointmentInfoDtoBusinessMapper;
-import edu.gjoko.schedlr.mappers.AppointmentInfoDtoCustomerMapper;
-import edu.gjoko.schedlr.repositories.AppointmentRepository;
-import edu.gjoko.schedlr.repositories.ServiceRepository;
-import edu.gjoko.schedlr.repositories.StakeholderRepository;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import javax.persistence.EntityNotFoundException;
-import javax.security.sasl.AuthenticationException;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-
-@Service
-@AllArgsConstructor
-public class AppointmentsService {
-
-    private final AppointmentRepository appointmentRepository;
-    private final StakeholderRepository stakeholderRepository;
-    private final ServiceRepository serviceRepository;
-    private final AppointmentInfoDtoBusinessMapper appointmentInfoDtoBusinessMapper;
-    private final AppointmentInfoDtoCustomerMapper appointmentInfoDtoCustomerMapper;
-
-
-    public void saveAppointment(Appointment appointment) {
-        var service = serviceRepository.findById(appointment.getService().getId()).get();
-
-        // remove 1 minute in order to prevent overlapping
-        appointment.setEndTime(appointment.getStartTime().plusMinutes(service.getDuration() - 1));
-        List<Appointment> blockingAppointments = appointmentRepository.
-                findBlockingAppointments(
-                        appointment.getService().getBusiness().getId(), appointment.getStartTime(), appointment.getEndTime());
-
-        // check to see if there are blocking exceptions
-        if (blockingAppointments != null && !blockingAppointments.isEmpty()) {
-            throw new BlockingTimeException();
-        }
-        appointmentRepository.save(appointment);
-    }
-
-    public List<AppointmentInfoDto> getFutureAppointmentInfoList(Long stakeholderId) {
-        StakeholderType type = stakeholderRepository.findById(stakeholderId).get().getStakeholderType();
-        List<AppointmentInfoDto> appointmentInfoDtoList = new ArrayList<>();
-
-        switch (type) {
-            case BUSINESS_OWNER -> appointmentInfoDtoList = appointmentRepository.findFutureAppointmentsByBusinessOwnerId(stakeholderId, LocalDateTime.now())
-                    .stream()
-                    .map(appointmentInfoDtoBusinessMapper::appointmentToAppointmentInfoDto)
-                    .toList();
-            case CUSTOMER -> appointmentInfoDtoList = appointmentRepository.findFutureAppointmentsByCustomerId(stakeholderId, LocalDateTime.now())
-                    .stream()
-                    .map(appointmentInfoDtoCustomerMapper::appointmentToAppointmentInfoDto)
-                    .toList();
-        }
-
-        return appointmentInfoDtoList;
-    }
-
-    public List<AppointmentInfoDto> getPastAppointmentInfoList(Long stakeholderId) {
-        StakeholderType type = stakeholderRepository.findById(stakeholderId).get().getStakeholderType();
-        List<Appointment> appointmentInfoDtoList = new ArrayList<>();
-
-        switch (type) {
-            case BUSINESS_OWNER -> appointmentInfoDtoList = appointmentRepository.findPastAppointmentsByBusinessOwnerId(stakeholderId, LocalDateTime.now());
-            case CUSTOMER -> appointmentInfoDtoList = appointmentRepository.findPastAppointmentsByCustomerId(stakeholderId, LocalDateTime.now());
-        }
-
-        return appointmentInfoDtoList
-                .stream()
-                .map(appointmentInfoDtoBusinessMapper::appointmentToAppointmentInfoDto)
-                .toList();
-
-    }
-
-    public List<Appointment> getActiveAppointmentsByBusiness(Long businessId) {
-        return appointmentRepository.getActiveAppointmentsByBusiness(businessId);
-    }
-
-    public void deleteAppointment(Long appointmentId, Long stakeholderId) throws AuthenticationException {
-        Optional<Stakeholder> stakeholderOptional = stakeholderRepository.findById(stakeholderId);
-        if (stakeholderOptional.isPresent()) {
-            Optional<Appointment> optional = appointmentRepository.findAppointmentByIdAndCustomer_Id(appointmentId, stakeholderId);
-            if (optional.isEmpty()) {
-                optional = appointmentRepository.findAppointmentByIdAndService_Business_Owner_Id(appointmentId, stakeholderId);
-                if (optional.isEmpty()) {
-                    throw new EntityNotFoundException("No appointment was found for the give stakeholder and appointment id.");
-                } else {
-                    softDeleteAppointment(optional.get(), AppointmentStatus.CANCELLED_BY_BUSINESS_OWNER);
-                }
-            } else {
-                softDeleteAppointment(optional.get(), AppointmentStatus.CANCELLED_BY_CUSTOMER);
-            }
-        } else {
-            throw new AuthenticationException();
-        }
-    }
-
-    public void softDeleteAppointment(Appointment appointment, AppointmentStatus appointmentStatus) {
-        appointment.setAppointmentStatus(appointmentStatus);
-        appointmentRepository.save(appointment);
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/services/BusinessService.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/services/BusinessService.java	(revision 943857ccadc5bd0933c2bd0b003629ae75c29b17)
+++ 	(revision )
@@ -1,64 +1,0 @@
-package edu.gjoko.schedlr.services;
-
-import edu.gjoko.schedlr.entity.Business;
-import edu.gjoko.schedlr.entity.Stakeholder;
-import edu.gjoko.schedlr.entity.StakeholderType;
-import edu.gjoko.schedlr.repositories.BusinessRepository;
-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 ServicesService servicesService;
-    private final StakeholderService stakeholderService;
-    private BCryptPasswordEncoder bCryptPasswordEncoder;
-
-    public void saveBusiness(Business business) {
-        servicesService.saveNewServiceTypes(business);
-        business.getOwner().setStakeholderType(StakeholderType.BUSINESS_OWNER);
-        business.getOwner().setPassword(bCryptPasswordEncoder.encode(business.getOwner().getPassword()));
-        business.setBusinessStatus(NEW);
-        businessRepository.save(business);
-    }
-
-    public List<Business> findAll() {
-        return businessRepository.findAll();
-    }
-
-    public void updateBusinesses(List<Business> businessList, Long businessOwnerId) {
-        businessList
-                .stream()
-                .forEach(business -> {
-                    stakeholderService.saveOrUpdateStakeholder(business.getOwner(), businessOwnerId);
-                });
-    }
-
-    public void updateBusinessStatuses(List<Business> businessList) {
-        businessList
-                .stream()
-                .forEach(business -> {
-                    Business business1 = businessRepository.findById(business.getId()).get();
-                    business1.setBusinessStatus(business.getBusinessStatus());
-                    businessRepository.save(business1);
-                });
-    }
-
-    public Business findByOwner(Long ownerId) {
-        var owner = new Stakeholder();
-        owner.setId(ownerId);
-        return businessRepository.findBusinessByOwner(owner);
-    }
-
-    public List<Business> findByBusinessTypeAndActiveStatus(Long businessTypeId) {
-        return businessRepository.findBusinessesByBusinessStatusAndBusinessType_Id(ACTIVE, businessTypeId);
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/services/NomenclaturesService.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/services/NomenclaturesService.java	(revision 943857ccadc5bd0933c2bd0b003629ae75c29b17)
+++ 	(revision )
@@ -1,27 +1,0 @@
-package edu.gjoko.schedlr.services;
-
-import edu.gjoko.schedlr.entity.BusinessType;
-import edu.gjoko.schedlr.entity.ServiceType;
-import edu.gjoko.schedlr.repositories.BusinessTypeRepository;
-import edu.gjoko.schedlr.repositories.ServiceTypeRepository;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-@AllArgsConstructor
-public class NomenclaturesService {
-
-    private final BusinessTypeRepository businessTypeRepository;
-
-    private final ServiceTypeRepository serviceTypeRepository;
-
-    public List<BusinessType> getBusinessTypes () {
-        return businessTypeRepository.findAll();
-    }
-
-    public List<ServiceType> findAppropriateBusinessTypesForBusinessByOwnerId(Long ownerId) {
-        return serviceTypeRepository.findAppropriateBusinessTypesForBusinessByOwnerId(ownerId);
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/services/PostgresUserDetailsService.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/services/PostgresUserDetailsService.java	(revision 943857ccadc5bd0933c2bd0b003629ae75c29b17)
+++ src/main/java/edu/gjoko/schedlr/services/PostgresUserDetailsService.java	(revision cf9cdbf9e2bef95a0adc1db2bc845ef45bf080d8)
@@ -1,11 +1,6 @@
 package edu.gjoko.schedlr.services;
 
-import edu.gjoko.schedlr.entity.Business;
-import edu.gjoko.schedlr.entity.BusinessStatus;
 import edu.gjoko.schedlr.entity.Stakeholder;
-import edu.gjoko.schedlr.entity.StakeholderType;
-import edu.gjoko.schedlr.repositories.BusinessRepository;
 import edu.gjoko.schedlr.repositories.StakeholderRepository;
-import lombok.RequiredArgsConstructor;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -20,31 +15,21 @@
 
 @Service
-@RequiredArgsConstructor
 public class PostgresUserDetailsService implements UserDetailsService {
 
     private final StakeholderRepository stakeholderRepository;
-    private final BusinessRepository businessRepository;
+
+    public PostgresUserDetailsService(StakeholderRepository stakeholderRepository) {
+        this.stakeholderRepository = stakeholderRepository;
+    }
 
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
         Stakeholder user = stakeholderRepository.findStakeholderByUsername(username);
-        if (user == null) {
+        if(user == null) {
             throw new UsernameNotFoundException("Non existing user");
-        }
-
-        if (user.getStakeholderType() == StakeholderType.BUSINESS_OWNER) {
-            Business business = businessRepository.findBusinessByOwner(user);
-            if (business.getBusinessStatus() != BusinessStatus.ACTIVE) {
-                throw new SecurityException("User not approved by admin");
-            }
         }
         Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
         grantedAuthorities.add(new SimpleGrantedAuthority(user.getStakeholderType().name()));
-
         return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
     }
-
-    public Long loadStakeholderId(String username) {
-        return stakeholderRepository.findStakeholderByUsername(username).getId();
-    }
 }
Index: src/main/java/edu/gjoko/schedlr/services/ReviewService.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/services/ReviewService.java	(revision 943857ccadc5bd0933c2bd0b003629ae75c29b17)
+++ 	(revision )
@@ -1,57 +1,0 @@
-package edu.gjoko.schedlr.services;
-
-import edu.gjoko.schedlr.entity.Appointment;
-import edu.gjoko.schedlr.entity.AppointmentStatus;
-import edu.gjoko.schedlr.entity.Review;
-import edu.gjoko.schedlr.repositories.AppointmentRepository;
-import edu.gjoko.schedlr.repositories.ReviewRepository;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-
-import javax.persistence.EntityNotFoundException;
-import java.util.List;
-import java.util.Optional;
-
-@Service
-@AllArgsConstructor
-public class ReviewService {
-
-    private final ReviewRepository reviewRepository;
-    private final AppointmentRepository appointmentRepository;
-
-    public void save(Review review, Long customerId) {
-        Optional<Appointment> appointmentOptional = appointmentRepository.findById(review.getAppointment().getId());
-        if (appointmentOptional.isEmpty()) {
-            throw new EntityNotFoundException();
-        }
-        Appointment appointment = appointmentOptional.get();
-        if (appointment.getCustomer().getId().equals(customerId)) {
-            review.setAppointment(appointment);
-            markAppointmentAsReviewed(review.getAppointment());
-            calculateAndUpdateCumulatedRatingForService(appointment.getService(), review.getRating());
-            reviewRepository.save(review);
-        } else {
-            throw new EntityNotFoundException();
-        }
-    }
-
-    public List<Review> getReviewsByServiceId(Long businessId) {
-        return reviewRepository.findAllByAppointment_Service_Id(businessId);
-    }
-
-    public List<Review> getReviewsByCustomerId(Long customerId) {
-        return reviewRepository.findAllByAppointment_Customer_Id(customerId);
-    }
-
-    private void markAppointmentAsReviewed(Appointment appointment) {
-        appointment.setAppointmentStatus(AppointmentStatus.FINISHED_AND_REVIEWED_BY_USER);
-    }
-
-    private void calculateAndUpdateCumulatedRatingForService(edu.gjoko.schedlr.entity.Service service, int rating) {
-        int newReviewsCount = service.getReviewsCount() + 1;
-        float currentRating = service.getRating();
-        float newRating = (currentRating * service.getReviewsCount() + rating) / newReviewsCount;
-        service.setReviewsCount(newReviewsCount);
-        service.setRating(newRating);
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/services/ServicesService.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/services/ServicesService.java	(revision 943857ccadc5bd0933c2bd0b003629ae75c29b17)
+++ 	(revision )
@@ -1,76 +1,0 @@
-package edu.gjoko.schedlr.services;
-
-import edu.gjoko.schedlr.entity.Business;
-import edu.gjoko.schedlr.entity.ServiceStatus;
-import edu.gjoko.schedlr.entity.ServiceType;
-import edu.gjoko.schedlr.repositories.BusinessRepository;
-import edu.gjoko.schedlr.repositories.ServiceRepository;
-import edu.gjoko.schedlr.repositories.ServiceTypeRepository;
-import lombok.AllArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-
-import javax.transaction.Transactional;
-import java.util.List;
-import java.util.Optional;
-
-@Service
-@AllArgsConstructor
-public class ServicesService {
-
-    private final ServiceRepository serviceRepository;
-    private final ServiceTypeRepository serviceTypeRepository;
-    private final BusinessRepository businessRepository;
-
-    @Transactional
-    public void deleteByIds(List<Long> ids) {
-        ids.forEach(this::deactivateService);
-    }
-
-    public List<edu.gjoko.schedlr.entity.Service> getServicesByKeyword(String keyword) {
-        return serviceRepository.getServicesByKeyword(keyword);
-    }
-
-    public void saveOrUpdateServices(List<edu.gjoko.schedlr.entity.Service> serviceList, Long ownerId) {
-        if (!CollectionUtils.isEmpty(serviceList)) {
-            serviceList.forEach( service -> {
-                Optional<edu.gjoko.schedlr.entity.Service> foundOptional;
-                if (service.getId() != null && (foundOptional = serviceRepository.findById(service.getId())).isPresent()) {
-                    var found = foundOptional.get();
-                    found.setDuration(service.getDuration());
-                    found.setPrice(service.getPrice());
-                    found.setServiceStatus(ServiceStatus.ACTIVE);
-                    found.setDescription(service.getDescription());
-                    serviceRepository.save(found);
-                } else {
-                    var business = businessRepository.findBusinessesByOwner_Id(ownerId);
-                    service.getServiceType().setBusinessType(business.getBusinessType());
-                    service.setServiceStatus(ServiceStatus.ACTIVE);
-                    service.setBusiness(business);
-                    serviceTypeRepository.save(service.getServiceType());
-                    serviceRepository.save(service);
-                }
-            });
-        }
-    }
-
-    public void saveNewServiceTypes(Business business) {
-        business.getServices()
-                .forEach(service -> {
-                    if (service.getServiceType().getId() == null) {
-                        ServiceType serviceType = service.getServiceType();
-                        serviceType.setBusinessType(business.getBusinessType());
-                        service.setServiceType(serviceTypeRepository.save(serviceType));
-                    }
-                });
-    }
-
-    private void deactivateService(Long id) {
-        Optional<edu.gjoko.schedlr.entity.Service> serviceOptional;
-        if((serviceOptional = serviceRepository.findById(id)).isPresent()) {
-            var service = serviceOptional.get();
-            service.setServiceStatus(ServiceStatus.INACTIVE);
-            serviceRepository.save(service);
-        }
-    }
-}
Index: src/main/java/edu/gjoko/schedlr/services/StakeholderService.java
===================================================================
--- src/main/java/edu/gjoko/schedlr/services/StakeholderService.java	(revision 943857ccadc5bd0933c2bd0b003629ae75c29b17)
+++ 	(revision )
@@ -1,36 +1,0 @@
-package edu.gjoko.schedlr.services;
-
-import edu.gjoko.schedlr.entity.Stakeholder;
-import edu.gjoko.schedlr.entity.StakeholderType;
-import edu.gjoko.schedlr.repositories.StakeholderRepository;
-import lombok.RequiredArgsConstructor;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.stereotype.Service;
-
-@Service
-@RequiredArgsConstructor
-public class StakeholderService {
-
-    private final StakeholderRepository stakeholderRepository;
-    private final BCryptPasswordEncoder bCryptPasswordEncoder;
-
-    public void saveStakeholder(Stakeholder stakeholder) {
-        stakeholder.setPassword(bCryptPasswordEncoder.encode(stakeholder.getPassword()));
-        stakeholder.setStakeholderType(StakeholderType.CUSTOMER);
-        stakeholderRepository.save(stakeholder);
-    }
-
-    public Stakeholder findById(Long id) {
-        return stakeholderRepository.findById(id).get();
-    }
-
-    public void saveOrUpdateStakeholder(Stakeholder stakeholder, Long businessOwnerId) {
-        var found = stakeholderRepository.findById(businessOwnerId).get();
-        found.setFirstName(stakeholder.getFirstName());
-        found.setLastName(stakeholder.getLastName());
-        found.setPhoneNumber(stakeholder.getPhoneNumber());
-        found.setEmail(stakeholder.getEmail());
-        found.setUsername(stakeholder.getUsername());
-        stakeholderRepository.save(found);
-    }
-}
