Index: ReserveNGo-backend/pom.xml
===================================================================
--- ReserveNGo-backend/pom.xml	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/pom.xml	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -7,5 +7,5 @@
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>3.4.3</version>
-        <relativePath/> <!-- lookup parent from repository -->
+        <relativePath/>
     </parent>
     <groupId>mk.ukim.finki.it</groupId>
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/EmailNotFoundException.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/EmailNotFoundException.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/EmailNotFoundException.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -2,6 +2,6 @@
 
 public class EmailNotFoundException extends RuntimeException {
-    public EmailNotFoundException(String username) {
-        super("User with email: " + username + " not found");
+    public EmailNotFoundException(String email) {
+        super("User with email: " + email + " not found");
     }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/UserEmailAlreadyExistsException.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/UserEmailAlreadyExistsException.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/UserEmailAlreadyExistsException.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -0,0 +1,7 @@
+package mk.ukim.finki.it.reservengo.model.exceptions;
+
+public class UserEmailAlreadyExistsException extends RuntimeException {
+    public UserEmailAlreadyExistsException(String email) {
+        super("User with email: " + email + " already exists");
+    }
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AuthServiceImpl.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -8,12 +8,7 @@
 import mk.ukim.finki.it.reservengo.model.domain.LocalWorker;
 import mk.ukim.finki.it.reservengo.model.domain.User;
-import mk.ukim.finki.it.reservengo.model.enumerations.Role;
 import mk.ukim.finki.it.reservengo.model.exceptions.EmailNotFoundException;
-import mk.ukim.finki.it.reservengo.repository.CustomerRepository;
-import mk.ukim.finki.it.reservengo.repository.LocalManagerRepository;
-import mk.ukim.finki.it.reservengo.repository.LocalWorkerRepository;
 import mk.ukim.finki.it.reservengo.repository.UserRepository;
-import mk.ukim.finki.it.reservengo.service.intf.AuthService;
-import mk.ukim.finki.it.reservengo.service.intf.JWTService;
+import mk.ukim.finki.it.reservengo.service.intf.*;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -23,7 +18,7 @@
 @Service
 public class AuthServiceImpl implements AuthService {
-    private final CustomerRepository customerRepository;
-    private final LocalWorkerRepository localWorkerRepository;
-    private final LocalManagerRepository localManagerRepository;
+    private final CustomerService customerService;
+    private final LocalWorkerService localWorkerService;
+    private final LocalManagerService localManagerService;
     private final JWTService jwtService;
     private final PasswordEncoder passwordEncoder;
@@ -31,8 +26,8 @@
     private final UserRepository userRepository;
 
-    public AuthServiceImpl(CustomerRepository customerRepository, LocalWorkerRepository localWorkerRepository, LocalManagerRepository localManagerRepository, JWTService jwtService, PasswordEncoder passwordEncoder, AuthenticationManager authenticationManager, UserRepository userRepository) {
-        this.customerRepository = customerRepository;
-        this.localWorkerRepository = localWorkerRepository;
-        this.localManagerRepository = localManagerRepository;
+    public AuthServiceImpl(CustomerService customerService, LocalWorkerService localWorkerService, LocalManagerService localManagerService, JWTService jwtService, PasswordEncoder passwordEncoder, AuthenticationManager authenticationManager, UserRepository userRepository) {
+        this.customerService = customerService;
+        this.localWorkerService = localWorkerService;
+        this.localManagerService = localManagerService;
         this.jwtService = jwtService;
         this.passwordEncoder = passwordEncoder;
@@ -45,5 +40,5 @@
         Customer customer = jwtAuthenticationRequestDTO.toCustomer(passwordEncoder.encode(jwtAuthenticationRequestDTO.password()));
 
-        customerRepository.save(customer);
+        customerService.save(customer);
         String jwt = jwtService.generateToken(customer);
 
@@ -55,5 +50,5 @@
         LocalWorker localWorker = jwtAuthenticationRequestDTO.toLocalWorker(passwordEncoder.encode(jwtAuthenticationRequestDTO.password()));
 
-        localWorkerRepository.save(localWorker);
+        localWorkerService.save(localWorker);
         String jwt = jwtService.generateToken(localWorker);
 
@@ -65,5 +60,5 @@
         LocalManager localManager = jwtAuthenticationRequestDTO.toLocalManager(passwordEncoder.encode(jwtAuthenticationRequestDTO.password()));
 
-        localManagerRepository.save(localManager);
+        localManagerService.save(localManager);
         String jwt = jwtService.generateToken(localManager);
 
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/CustomerServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/CustomerServiceImpl.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/CustomerServiceImpl.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -4,7 +4,9 @@
 import mk.ukim.finki.it.reservengo.model.domain.Local;
 import mk.ukim.finki.it.reservengo.model.exceptions.CustomerIdNotFoundException;
+import mk.ukim.finki.it.reservengo.model.exceptions.UserEmailAlreadyExistsException;
 import mk.ukim.finki.it.reservengo.repository.CustomerRepository;
 import mk.ukim.finki.it.reservengo.service.intf.CustomerService;
 import mk.ukim.finki.it.reservengo.service.intf.LocalService;
+import mk.ukim.finki.it.reservengo.service.intf.UserService;
 import org.springframework.stereotype.Service;
 
@@ -15,8 +17,10 @@
     private final CustomerRepository customerRepository;
     private final LocalService localService;
+    private final UserService userService;
 
-    public CustomerServiceImpl(CustomerRepository customerRepository, LocalService localService) {
+    public CustomerServiceImpl(CustomerRepository customerRepository, LocalService localService, UserService userService) {
         this.customerRepository = customerRepository;
         this.localService = localService;
+        this.userService = userService;
     }
 
@@ -48,3 +52,11 @@
         customerRepository.save(customer);
     }
+
+    @Override
+    public void save(Customer customer) {
+        if (userService.emailExists(customer.getEmail())) {
+            throw new UserEmailAlreadyExistsException(customer.getEmail());
+        }
+        customerRepository.save(customer);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -2,8 +2,12 @@
 
 import mk.ukim.finki.it.reservengo.model.domain.Local;
+import mk.ukim.finki.it.reservengo.model.domain.LocalManager;
 import mk.ukim.finki.it.reservengo.model.exceptions.LocalIdNotFoundException;
+import mk.ukim.finki.it.reservengo.model.exceptions.UserEmailAlreadyExistsException;
+import mk.ukim.finki.it.reservengo.repository.LocalManagerRepository;
 import mk.ukim.finki.it.reservengo.repository.LocalRepository;
 import mk.ukim.finki.it.reservengo.service.intf.FileStorageService;
 import mk.ukim.finki.it.reservengo.service.intf.LocalManagerService;
+import mk.ukim.finki.it.reservengo.service.intf.UserService;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
@@ -13,9 +17,13 @@
 
     private final LocalRepository localRepository;
+    private final LocalManagerRepository localManagerRepository;
     private final FileStorageService fileStorageService;
+    private final UserService userService;
 
-    public LocalManagerServiceImpl(LocalRepository localRepository, FileStorageService fileStorageService) {
+    public LocalManagerServiceImpl(LocalRepository localRepository, LocalManagerRepository localManagerRepository, FileStorageService fileStorageService, UserService userService) {
         this.localRepository = localRepository;
+        this.localManagerRepository = localManagerRepository;
         this.fileStorageService = fileStorageService;
+        this.userService = userService;
     }
 
@@ -29,3 +37,11 @@
         localRepository.save(local);
     }
+
+    @Override
+    public void save(LocalManager localManager) {
+        if (userService.emailExists(localManager.getEmail())) {
+            throw new UserEmailAlreadyExistsException(localManager.getEmail());
+        }
+        localManagerRepository.save(localManager);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalWorkerServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalWorkerServiceImpl.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalWorkerServiceImpl.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -1,8 +1,27 @@
 package mk.ukim.finki.it.reservengo.service.impl;
 
+import mk.ukim.finki.it.reservengo.model.domain.LocalWorker;
+import mk.ukim.finki.it.reservengo.model.exceptions.UserEmailAlreadyExistsException;
+import mk.ukim.finki.it.reservengo.repository.LocalWorkerRepository;
 import mk.ukim.finki.it.reservengo.service.intf.LocalWorkerService;
+import mk.ukim.finki.it.reservengo.service.intf.UserService;
 import org.springframework.stereotype.Service;
 
 @Service
 public class LocalWorkerServiceImpl implements LocalWorkerService {
+    private final LocalWorkerRepository localWorkerRepository;
+    private final UserService userService;
+
+    public LocalWorkerServiceImpl(LocalWorkerRepository localWorkerRepository, UserService userService) {
+        this.localWorkerRepository = localWorkerRepository;
+        this.userService = userService;
+    }
+
+    @Override
+    public void save(LocalWorker localWorker) {
+        if (userService.emailExists(localWorker.getEmail())) {
+            throw new UserEmailAlreadyExistsException(localWorker.getEmail());
+        }
+        localWorkerRepository.save(localWorker);
+    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/UserServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/UserServiceImpl.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/UserServiceImpl.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -3,4 +3,5 @@
 import mk.ukim.finki.it.reservengo.dto.userDTO.CreateUserDTO;
 import mk.ukim.finki.it.reservengo.model.domain.User;
+import mk.ukim.finki.it.reservengo.model.exceptions.EmailNotFoundException;
 import mk.ukim.finki.it.reservengo.model.exceptions.UserIdNotFoundException;
 import mk.ukim.finki.it.reservengo.repository.UserRepository;
@@ -21,10 +22,20 @@
 
     @Override
-    public User findUser(Long userId) {
+    public User getUserById(Long userId) {
         return userRepository.findById(userId).orElseThrow(() -> new UserIdNotFoundException(userId));
     }
 
     @Override
-    public User editUserInfo(Long userId, CreateUserDTO createUserDTO) {
+    public User getUserByEmail(String email) {
+        return userRepository.findByEmail(email).orElseThrow(() -> new EmailNotFoundException(email));
+    }
+
+    @Override
+    public boolean emailExists(String email) {
+        return userRepository.findByEmail(email).isPresent();
+    }
+
+    @Override
+    public User editUserProfile(Long userId, CreateUserDTO createUserDTO) {
         User user = userRepository.findById(userId).orElseThrow(() -> new UserIdNotFoundException(userId));
         updateUserFromDto(user, createUserDTO);
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/CustomerService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/CustomerService.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/CustomerService.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import mk.ukim.finki.it.reservengo.model.domain.Customer;
 import mk.ukim.finki.it.reservengo.model.domain.Local;
 
@@ -6,4 +7,5 @@
 
 public interface CustomerService {
+
     List<Local> listFavouriteLocals(Long id);
 
@@ -11,3 +13,5 @@
 
     void removeFavouriteLocal(Long userId, Long localId);
+
+    void save(Customer customer);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -1,7 +1,10 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import mk.ukim.finki.it.reservengo.model.domain.LocalManager;
 import org.springframework.web.multipart.MultipartFile;
 
 public interface LocalManagerService {
     void uploadLogo(Long localId, MultipartFile logoFile);
+
+    void save(LocalManager localManager);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalWorkerService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalWorkerService.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalWorkerService.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -1,4 +1,7 @@
 package mk.ukim.finki.it.reservengo.service.intf;
 
+import mk.ukim.finki.it.reservengo.model.domain.LocalWorker;
+
 public interface LocalWorkerService {
+    void save(LocalWorker localWorker);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/UserService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/UserService.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/UserService.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -5,6 +5,10 @@
 
 public interface UserService {
-    User findUser(Long userId);
+    User getUserById(Long userId);
 
-    User editUserInfo(Long userId, CreateUserDTO createUserDTO);
+    User editUserProfile(Long userId, CreateUserDTO createUserDTO);
+
+    User getUserByEmail(String email);
+
+    boolean emailExists(String email);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -46,4 +46,9 @@
         return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
     }
+
+    @ExceptionHandler(UserEmailAlreadyExistsException.class)
+    public ResponseEntity<String> handleUserEmailAlreadyExists(UserEmailAlreadyExistsException ex) {
+        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
+    }
 }
 
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/UserController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/UserController.java	(revision b77dbe862ac0d2501370f3d80f1b5a2445edcedf)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/UserController.java	(revision fa26ba9d04d2288af43126acd43334da65f8fbec)
@@ -21,5 +21,5 @@
     @GetMapping("/profile")
     public ResponseEntity<?> getProfile(@AuthenticationPrincipal User user) {
-        User u = userService.findUser(user.getId());
+        User u = userService.getUserById(user.getId());
         return ResponseEntity.ok(u);
     }
@@ -27,5 +27,5 @@
     @PutMapping("/edit")
     public ResponseEntity<?> editProfile(@AuthenticationPrincipal User user, @RequestBody CreateUserDTO createUserDTO) {
-        return ResponseEntity.ok(userService.editUserInfo(user.getId(), createUserDTO));
+        return ResponseEntity.ok(userService.editUserProfile(user.getId(), createUserDTO));
     }
 }
