Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/bootstrap/DataHolder.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/bootstrap/DataHolder.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/bootstrap/DataHolder.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -107,5 +107,4 @@
                     "LogoURL" + i,
                     localPhotos,
-                    "MenuPhotoPath" + i,
                     "MenuLink" + i,
                     null,
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebConfig.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebConfig.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ 	(revision )
@@ -1,15 +1,0 @@
-package mk.ukim.finki.it.reservengo.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-@Configuration
-public class WebConfig implements WebMvcConfigurer {
-
-    @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry) {
-        registry.addResourceHandler("/uploads/**")
-                .addResourceLocations("file:uploads/");
-    }
-}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -16,4 +16,5 @@
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@@ -49,4 +50,5 @@
                         .requestMatchers("/api/user/**").authenticated()
                         .requestMatchers("/api/customer/**").hasRole("CUSTOMER")
+                        .requestMatchers("/api/local-manager/**").hasRole("LOCAL_MANAGER")
                         .requestMatchers("/api/admin/**").hasRole("ADMIN")
                         .anyRequest()
@@ -75,6 +77,12 @@
                 registry.addMapping("/uploads/**")
                         .allowedOrigins("http://localhost:5173")
-                        .allowedMethods("*")// maybe should be only GET
+                        .allowedMethods("*")
                         .allowedHeaders("*");
+            }
+
+            @Override
+            public void addResourceHandlers(@NonNull ResourceHandlerRegistry registry) {
+                registry.addResourceHandler("/uploads/**")
+                        .addResourceLocations("file:uploads/");
             }
         };
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/CreateLocalDetailsDTO.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/CreateLocalDetailsDTO.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/CreateLocalDetailsDTO.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -12,9 +12,6 @@
         String workingHours,
         List<Service> services,
-        List<String> localPhotos,
-        String menuPhoto,
         String menuLink,
-        DisplayContactDTO contact,
-        String logo
+        DisplayContactDTO contact
 ) {
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DisplayLocalDetailsDTO.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DisplayLocalDetailsDTO.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DisplayLocalDetailsDTO.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -18,5 +18,4 @@
         List<DisplayEventDTO> events,
         List<String> localPhotos,
-        String menuPhoto,
         String menuLink,
         DisplayContactDTO contact,
@@ -34,5 +33,4 @@
                 DisplayEventDTO.fromEvents(local.getEvents()),
                 local.getLocalPhotos(),
-                local.getMenuPhoto(),
                 local.getMenuLink(),
                 DisplayContactDTO.from(local.getContact()),
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/Local.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/Local.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/domain/Local.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -8,9 +8,6 @@
 import mk.ukim.finki.it.reservengo.config.listeners.Auditable;
 import mk.ukim.finki.it.reservengo.model.enumerations.Service;
-import org.springframework.data.annotation.CreatedDate;
-import org.springframework.data.annotation.LastModifiedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
-import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
@@ -51,6 +48,4 @@
     private List<String> localPhotos;
 
-    private String menuPhoto;
-
     private String menuLink;
 
@@ -66,5 +61,5 @@
     private String logoUrl;
 
-    public Local(String name, String description, String address, String workingHours, List<Service> availableServices, Map<Long, Integer> ratings, List<Event> events, String logoUrl, List<String> localPhotos, String menuPhoto, String menuLink, Contact contact, List<Reservation> reservations, List<LocalWorker> workers) {
+    public Local(String name, String description, String address, String workingHours, List<Service> availableServices, Map<Long, Integer> ratings, List<Event> events, String logoUrl, List<String> localPhotos, String menuLink, Contact contact, List<Reservation> reservations, List<LocalWorker> workers) {
         this.name = name;
         this.description = description;
@@ -76,5 +71,4 @@
         this.logoUrl = logoUrl;
         this.localPhotos = localPhotos;
-        this.menuPhoto = menuPhoto;
         this.menuLink = menuLink;
         this.contact = contact;
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/InvalidFileException.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/InvalidFileException.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/InvalidFileException.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -0,0 +1,7 @@
+package mk.ukim.finki.it.reservengo.model.exceptions;
+
+public class InvalidFileException extends RuntimeException {
+    public InvalidFileException(String message) {
+        super(message);
+    }
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/LogoDeletionException.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/LogoDeletionException.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/LogoDeletionException.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -2,6 +2,6 @@
 
 public class LogoDeletionException extends RuntimeException {
-    public LogoDeletionException(String message,Throwable cause) {
-        super(message,cause);
+    public LogoDeletionException(String message) {
+        super(message);
     }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/LogoUploadException.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/LogoUploadException.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/model/exceptions/LogoUploadException.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -0,0 +1,7 @@
+package mk.ukim.finki.it.reservengo.model.exceptions;
+
+public class LogoUploadException extends RuntimeException {
+    public LogoUploadException(String message) {
+        super(message);
+    }
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/AdminServiceImpl.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -34,4 +34,7 @@
     @Override
     public void deleteLocal(Long id) {
+        for (LocalManager manager : localManagerService.findAllByLocalId(id)) {
+            removeManagerFromLocal(manager.getId());
+        }
         localService.delete(id);
     }
@@ -49,4 +52,10 @@
 
     @Override
+    public List<DisplayUserDTO> findUnassignedManagers() {
+        List<LocalManager> managers = localManagerService.findAllUnassigned();
+        return DisplayUserDTO.fromUsers(managers);
+    }
+
+    @Override
     public void assignManagerToLocal(Long localId, Long managerId) {
         LocalManager manager = localManagerService.findManagerById(managerId);
@@ -55,7 +64,5 @@
         }
         Local local = localService.findLocalById(localId);
-        manager.setLocal(local);
-        manager.setPosition(Position.MANAGER);
-        localManagerService.update(manager.getId(), manager);
+        localManagerService.updateLocalAssignment(manager, local, Position.MANAGER);
     }
 
@@ -66,7 +73,5 @@
             throw new ManagerNotAssignedException(manager.getId());
         }
-        manager.setLocal(null);
-        manager.setPosition(null);
-        localManagerService.update(manager.getId(), manager);
+        localManagerService.updateLocalAssignment(manager, null, null);
     }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/FileStorageServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/FileStorageServiceImpl.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/FileStorageServiceImpl.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -1,4 +1,7 @@
 package mk.ukim.finki.it.reservengo.service.impl;
 
+import mk.ukim.finki.it.reservengo.model.exceptions.InvalidFileException;
+import mk.ukim.finki.it.reservengo.model.exceptions.LogoDeletionException;
+import mk.ukim.finki.it.reservengo.model.exceptions.LogoUploadException;
 import mk.ukim.finki.it.reservengo.service.intf.FileStorageService;
 import org.springframework.stereotype.Service;
@@ -6,8 +9,7 @@
 
 import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
+import java.nio.file.*;
+import java.util.Objects;
+import java.util.Set;
 import java.util.UUID;
 
@@ -18,20 +20,45 @@
     private final Path logosDir = rootUploadsDir.resolve("logos");
     private final Path localsDir = rootUploadsDir.resolve("locals");
+    private static final Set<String> ALLOWED_EXTENSIONS = Set.of("jpg", "jpeg", "png");
+    private static final Set<String> ALLOWED_CONTENT_TYPES = Set.of("image/jpeg", "image/png");
+    private static final long MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
 
     public FileStorageServiceImpl() throws IOException {
-        Files.createDirectories(rootUploadsDir);
-        Files.createDirectories(logosDir);
-        Files.createDirectories(localsDir);
+        try {
+            Files.createDirectories(rootUploadsDir);
+            Files.createDirectories(logosDir);
+            Files.createDirectories(localsDir);
+        } catch (IOException e) {
+            throw new FileSystemException("Could not initialize storage directories");
+        }
     }
 
     @Override
     public String saveLogoFile(MultipartFile file) {
+        validateFile(file);
+        String originalFilename = file.getOriginalFilename();
+        String fileExtension = getFileExtension(Objects.requireNonNull(originalFilename)).toLowerCase();
+
         try {
-            String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename();
-            Path target = logosDir.resolve(fileName);
-            Files.copy(file.getInputStream(), target, StandardCopyOption.REPLACE_EXISTING);
+            String fileName = generateUniqueFileName(fileExtension);
+            Path targetPath = logosDir.resolve(fileName);
+            Files.copy(file.getInputStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);
             return "/uploads/logos/" + fileName;
         } catch (IOException e) {
-            throw new RuntimeException("Failed to save logo", e);
+            throw new LogoUploadException("Failed to upload logo.");
+        }
+    }
+
+    @Override
+    public void deletePhotoFile(String filePath) {
+        if (filePath == null || filePath.trim().isEmpty()) {
+            return;
+        }
+        try {
+            String normalizedPath = filePath.replaceFirst("^/uploads/?", "");
+            Path fullPath = rootUploadsDir.resolve(normalizedPath).normalize();
+            Files.deleteIfExists(fullPath);
+        } catch (IOException e) {
+            throw new LogoDeletionException("Failed to delete photo.");
         }
     }
@@ -52,30 +79,36 @@
     }
 
-    @Override
-    public void deletePhotoFile(String filePath) {
-        try {
-            String relativePath = filePath.replaceFirst("/uploads/?", "");
-            Path fullPath = rootUploadsDir.resolve(relativePath);
+    private void validateFile(MultipartFile file) {
+        if (file == null || file.isEmpty()) {
+            throw new InvalidFileException("Logo file cannot be empty");
+        }
 
-            Files.deleteIfExists(fullPath);
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to delete file: " + filePath, e);
+        if (file.getSize() > MAX_FILE_SIZE) {
+            throw new InvalidFileException("Logo file size exceeds maximum allowed size of 5MB");
+        }
+
+        String contentType = file.getContentType();
+        if (contentType == null || !ALLOWED_CONTENT_TYPES.contains(contentType.toLowerCase())) {
+            throw new InvalidFileException("Invalid file type. Only:" + ALLOWED_CONTENT_TYPES + " are allowed.");
+        }
+
+        String originalFilename = file.getOriginalFilename();
+        if (originalFilename == null || originalFilename.trim().isEmpty()) {
+            throw new InvalidFileException("Invalid filename");
+        }
+
+        String fileExtension = getFileExtension(originalFilename).toLowerCase();
+        if (!ALLOWED_EXTENSIONS.contains(fileExtension)) {
+            throw new InvalidFileException("File extension not allowed: " + fileExtension);
         }
     }
 
-    @Override
-    public String saveLocalMenuPhoto(Long localId, MultipartFile file) {
-        try {
-            Path localFolder = localsDir.resolve(String.valueOf(localId));
-            Files.createDirectories(localFolder);
+    private String generateUniqueFileName(String extension) {
+        return UUID.randomUUID() + "." + extension;
+    }
 
-            String menuFileName = "menu_" + UUID.randomUUID() + "_" + file.getOriginalFilename();
-            Path target = localFolder.resolve(menuFileName);
-
-            Files.copy(file.getInputStream(), target, StandardCopyOption.REPLACE_EXISTING);
-            return "/uploads/locals/" + localId + "/" + menuFileName;
-        } catch (IOException e) {
-            throw new RuntimeException("Failed to save local menu photo", e);
-        }
+    private String getFileExtension(String filename) {
+        int lastDotIndex = filename.lastIndexOf('.');
+        return lastDotIndex > 0 ? filename.substring(lastDotIndex + 1) : "";
     }
 }
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 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -4,5 +4,7 @@
 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.enumerations.Position;
 import mk.ukim.finki.it.reservengo.model.exceptions.LocalManagerIdNotFoundException;
+import mk.ukim.finki.it.reservengo.model.exceptions.ManagerNotAssignedException;
 import mk.ukim.finki.it.reservengo.model.exceptions.UserEmailAlreadyExistsException;
 import mk.ukim.finki.it.reservengo.repository.LocalManagerRepository;
@@ -14,4 +16,5 @@
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
@@ -29,9 +32,4 @@
 
     @Override
-    public void uploadLocalLogo(Long localId, MultipartFile logoFile) {
-        localService.addLogo(localId, logoFile);
-    }
-
-    @Override
     public void save(LocalManager localManager) {
         if (userService.emailExists(localManager.getEmail())) {
@@ -39,29 +37,4 @@
         }
         localManagerRepository.save(localManager);
-    }
-
-    @Override
-    public void deleteLocalLogo(Long localId) {
-        localService.deleteLogo(localId);
-    }
-
-    @Override
-    public void uploadLocalPhotos(Long localId, List<MultipartFile> photos) {
-        localService.uploadPhotos(localId, photos);
-    }
-
-    @Override
-    public void deleteLocalPhotos(Long localId, List<String> photoPaths) {
-        localService.deletePhotos(localId, photoPaths);
-    }
-
-    @Override
-    public void uploadLocalMenu(Long localId, MultipartFile localMenuFile) {
-        localService.uploadMenu(localId, localMenuFile);
-    }
-
-    @Override
-    public void deleteLocalMenuPhoto(Long localId) {
-        localService.deleteMenu(localId);
     }
 
@@ -81,11 +54,17 @@
 
     @Override
-    public void update(Long id, LocalManager manager) {
-        LocalManager existingManager = localManagerRepository.findById(id).orElseThrow(() -> new LocalManagerIdNotFoundException(id));
+    public List<LocalManager> findAllUnassigned() {
+        return localManagerRepository.findAll().stream()
+                .filter(manager -> manager.getLocal() == null)
+                .filter(manager -> manager.getPosition() == null)
+                .collect(Collectors.toList());
+    }
 
-        existingManager.setLocal(manager.getLocal());
-        existingManager.setPosition(manager.getPosition());
+    @Override
+    public void updateLocalAssignment(LocalManager manager, Local local, Position position) {
+        manager.setLocal(local);
+        manager.setPosition(position);
 
-        localManagerRepository.save(existingManager);
+        localManagerRepository.save(manager);
     }
 
@@ -93,10 +72,39 @@
     public Local findLocalByManagerId(Long id) {
         LocalManager localManager = localManagerRepository.findById(id).orElseThrow(() -> new LocalManagerIdNotFoundException(id));
+        if (localManager.getLocal() == null) {
+            throw new ManagerNotAssignedException(id);
+        }
         return localManager.getLocal();
     }
 
     @Override
-    public void editLocalInfo(Long localId, CreateLocalDetailsDTO createLocalDetailsDTO) {
-        localService.updateInfoLocal(localId, createLocalDetailsDTO);
+    public Local editLocal(Long managerId, CreateLocalDetailsDTO createLocalDetailsDTO) {
+        LocalManager localManager = localManagerRepository.findById(managerId).orElseThrow(() -> new LocalManagerIdNotFoundException(managerId));
+
+        return localService.edit(localManager.getLocal().getId(), createLocalDetailsDTO);
+    }
+
+    @Override
+    public String uploadLocalLogo(Long managerId, MultipartFile logoFile) {
+        Local local = findLocalByManagerId(managerId);
+
+        return localService.addLogo(local.getId(), logoFile);
+    }
+
+    @Override
+    public void deleteLocalLogo(Long managerId) {
+        LocalManager localManager = localManagerRepository.findById(managerId).orElseThrow(() -> new LocalManagerIdNotFoundException(managerId));
+
+        localService.deleteLogo(localManager.getLocal().getId());
+    }
+
+    @Override
+    public void uploadLocalPhotos(Long localId, List<MultipartFile> photos) {
+        localService.uploadPhotos(localId, photos);
+    }
+
+    @Override
+    public void deleteLocalPhotos(Long localId, List<String> photoPaths) {
+        localService.deletePhotos(localId, photoPaths);
     }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalServiceImpl.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalServiceImpl.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -3,22 +3,17 @@
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Local;
-import mk.ukim.finki.it.reservengo.model.exceptions.LocalIdNotFoundException;
-import mk.ukim.finki.it.reservengo.model.exceptions.LogoDeletionException;
-import mk.ukim.finki.it.reservengo.model.exceptions.MenuDeletionException;
-import mk.ukim.finki.it.reservengo.model.exceptions.PhotoDeletionException;
+import mk.ukim.finki.it.reservengo.model.exceptions.*;
 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.LocalService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
 @Service
+@Transactional
 public class LocalServiceImpl implements LocalService {
 
@@ -48,4 +43,21 @@
 
     @Override
+    public Local edit(Long localId, CreateLocalDetailsDTO createLocalDetailsDTO) {
+        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
+
+        local.setName(createLocalDetailsDTO.name());
+        local.setDescription(createLocalDetailsDTO.description());
+        local.setAddress(createLocalDetailsDTO.address());
+        local.setWorkingHours(createLocalDetailsDTO.workingHours());
+        local.setAvailableServices(createLocalDetailsDTO.services());
+        local.setMenuLink(createLocalDetailsDTO.menuLink());
+        local.setContact(createLocalDetailsDTO.contact().toContact());
+
+        localRepository.save(local);
+
+        return local;
+    }
+
+    @Override
     public void delete(Long id) {
         Local local = localRepository.findById(id).orElseThrow(() -> new LocalIdNotFoundException(id));
@@ -54,13 +66,16 @@
 
     @Override
-    public void addLogo(Long localId, MultipartFile multipartFile) {
+    public String addLogo(Long localId, MultipartFile multipartFile) {
         Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
 
-        if (!multipartFile.isEmpty()) {
-            String logoPath = fileStorageService.saveLogoFile(multipartFile);
-            local.setLogoUrl(logoPath);
+        if (local.getLogoUrl() != null && !local.getLogoUrl().isEmpty()) {
+            fileStorageService.deletePhotoFile(local.getLogoUrl());
         }
 
+        String logoPath = fileStorageService.saveLogoFile(multipartFile);
+        local.setLogoUrl(logoPath);
         localRepository.save(local);
+
+        return logoPath;
     }
 
@@ -71,14 +86,10 @@
 
         if (logoUrl != null && !logoUrl.isEmpty()) {
-            Path filePath = Paths.get("uploads").resolve("logos").resolve(Paths.get(logoUrl).getFileName().toString());
-
-            try {
-                Files.deleteIfExists(filePath);
-            } catch (IOException e) {
-                throw new LogoDeletionException("Failed to delete logo from path: " + filePath, e);
-            }
+            fileStorageService.deletePhotoFile(logoUrl);
+            local.setLogoUrl(null);
+            localRepository.save(local);
+        } else {
+            throw new LogoDeletionException("No logo found for local with id: " + localId);
         }
-        local.setLogoUrl(null);
-        localRepository.save(local);
     }
 
@@ -127,50 +138,3 @@
         localRepository.save(local);
     }
-
-    @Override
-    public void uploadMenu(Long localId, MultipartFile localMenuFile) {
-        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
-
-        if (!localMenuFile.isEmpty()) {
-            String menuPath = fileStorageService.saveLocalMenuPhoto(localId, localMenuFile);
-            local.setMenuPhoto(menuPath);
-        }
-
-        localRepository.save(local);
-    }
-
-    @Override
-    public void deleteMenu(Long localId) {
-        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
-
-        String menuPhotoPath = local.getMenuPhoto();
-
-        if (menuPhotoPath != null && !menuPhotoPath.isEmpty()) {
-            try {
-                fileStorageService.deletePhotoFile(menuPhotoPath);
-            } catch (RuntimeException e) {
-                throw new MenuDeletionException("Failed to delete menu photo: " + menuPhotoPath, e);
-            }
-            local.setMenuPhoto(null);
-            localRepository.save(local);
-        }
-    }
-
-    @Override
-    public void updateInfoLocal(Long localId, CreateLocalDetailsDTO createLocalDetailsDTO) {
-        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
-
-        local.setName(createLocalDetailsDTO.name());
-        local.setDescription(createLocalDetailsDTO.description());
-        local.setAddress(createLocalDetailsDTO.address());
-        local.setWorkingHours(createLocalDetailsDTO.workingHours());
-        local.setAvailableServices(createLocalDetailsDTO.services());
-        local.setLocalPhotos(createLocalDetailsDTO.localPhotos());
-        local.setMenuPhoto(createLocalDetailsDTO.menuPhoto());
-        local.setMenuLink(createLocalDetailsDTO.menuLink());
-        local.setContact(createLocalDetailsDTO.contact().toContact());
-        local.setLogoUrl(createLocalDetailsDTO.logo());
-
-        localRepository.save(local);
-    }
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/ReservationServiceImpl.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/ReservationServiceImpl.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/ReservationServiceImpl.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -3,7 +3,9 @@
 import mk.ukim.finki.it.reservengo.service.intf.ReservationService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
 @Service
+@Transactional
 public class ReservationServiceImpl implements ReservationService {
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/AdminService.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -16,4 +16,6 @@
     List<DisplayUserDTO> findManagersByLocalId(Long localId);
 
+    List<DisplayUserDTO> findUnassignedManagers();
+
     void assignManagerToLocal(Long localId, Long managerId);
 
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/FileStorageService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/FileStorageService.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/FileStorageService.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -9,6 +9,3 @@
 
     void deletePhotoFile(String filePath);
-
-    String saveLocalMenuPhoto(Long localId, MultipartFile file);
-
 }
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 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -2,7 +2,7 @@
 
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
-import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDTO;
 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.enumerations.Position;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -10,17 +10,5 @@
 
 public interface LocalManagerService {
-    void uploadLocalLogo(Long localId, MultipartFile logoFile);
-
     void save(LocalManager localManager);
-
-    void deleteLocalLogo(Long localId);
-
-    void uploadLocalPhotos(Long localId, List<MultipartFile> photos);
-
-    void deleteLocalPhotos(Long localId, List<String> photoPaths);
-
-    void uploadLocalMenu(Long localId, MultipartFile localMenuFile);
-
-    void deleteLocalMenuPhoto(Long localId);
 
     List<LocalManager> findAllByLocalId(Long localId);
@@ -30,8 +18,18 @@
     LocalManager findManagerById(Long id);
 
-    void update(Long id, LocalManager manager);
+    List<LocalManager> findAllUnassigned();
+
+    void updateLocalAssignment(LocalManager manager, Local local, Position position);
 
     Local findLocalByManagerId(Long id);
 
-    void editLocalInfo(Long localId, CreateLocalDetailsDTO createLocalDetailsDTO);
+    Local editLocal(Long managerId, CreateLocalDetailsDTO createLocalDetailsDTO);
+
+    String uploadLocalLogo(Long managerId, MultipartFile logoFile);
+
+    void deleteLocalLogo(Long managerId);
+
+    void uploadLocalPhotos(Long localId, List<MultipartFile> photos);
+
+    void deleteLocalPhotos(Long localId, List<String> photoPaths);
 }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalService.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalService.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalService.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -14,7 +14,9 @@
     void save(String name);
 
+    Local edit(Long localId, CreateLocalDetailsDTO createLocalDetailsDTO);
+
     void delete(Long id);
 
-    void addLogo(Long localId, MultipartFile multipartFile);
+    String addLogo(Long localId, MultipartFile multipartFile);
 
     void deleteLogo(Long localId);
@@ -23,9 +25,3 @@
 
     void deletePhotos(Long localId, List<String> photoPaths);
-
-    void uploadMenu(Long localId, MultipartFile localMenuFile);
-
-    void deleteMenu(Long localId);
-
-    void updateInfoLocal(Long localId, CreateLocalDetailsDTO createLocalDetailsDTO);
 }
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 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -8,4 +8,6 @@
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import java.nio.file.FileSystemException;
 
 @RestControllerAdvice
@@ -62,9 +64,4 @@
     }
 
-    @ExceptionHandler(LogoDeletionException.class)
-    public ResponseEntity<String> handleLogoDeletion(LogoDeletionException ex) {
-        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
-    }
-
     @ExceptionHandler(LocalAlreadyFavouredException.class)
     public ResponseEntity<String> handleLocalAlreadyFavoured(LocalAlreadyFavouredException ex) {
@@ -96,4 +93,24 @@
         return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
     }
+
+    @ExceptionHandler(InvalidFileException.class)
+    public ResponseEntity<String> handleInvalidFile(InvalidFileException ex) {
+        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
+    }
+
+    @ExceptionHandler(LogoUploadException.class)
+    public ResponseEntity<String> handleFailedLogoUpload(LogoUploadException ex) {
+        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
+    }
+
+    @ExceptionHandler(LogoDeletionException.class)
+    public ResponseEntity<String> handleFailedLogoDelete(LogoDeletionException ex) {
+        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
+    }
+
+    @ExceptionHandler(FileSystemException.class)
+    public ResponseEntity<String> handleFileSystemFail(FileSystemException ex) {
+        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
+    }
 }
 
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/AdminController.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -5,5 +5,4 @@
 import mk.ukim.finki.it.reservengo.dto.userDTO.DisplayUserDTO;
 import mk.ukim.finki.it.reservengo.service.intf.AdminService;
-import mk.ukim.finki.it.reservengo.service.intf.LocalManagerService;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -19,9 +18,7 @@
 
     private final AdminService adminService;
-    private final LocalManagerService localManagerService;
 
-    public AdminController(AdminService adminService, LocalManagerService localManagerService) {
+    public AdminController(AdminService adminService) {
         this.adminService = adminService;
-        this.localManagerService = localManagerService;
     }
 
@@ -52,5 +49,5 @@
     @GetMapping("/local-managers")
     public ResponseEntity<List<DisplayUserDTO>> getManagers() {
-        List<DisplayUserDTO> managers = DisplayUserDTO.fromUsers(localManagerService.findAll());
+        List<DisplayUserDTO> managers = adminService.findUnassignedManagers();
         return new ResponseEntity<>(managers, HttpStatus.OK);
     }
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java	(revision 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -2,5 +2,4 @@
 
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
-import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDetailsDTO;
 import mk.ukim.finki.it.reservengo.model.domain.User;
@@ -13,8 +12,6 @@
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
-
 @RestController
-@RequestMapping("/api/local-managers")
+@RequestMapping("/api/local-manager")
 @PreAuthorize("hasRole('LOCAL_MANAGER')")
 public class LocalManagerController {
@@ -26,61 +23,42 @@
     }
 
-    @PostMapping("/{localId}/upload-logo")
-    public ResponseEntity<Void> uploadLogo(@PathVariable Long localId,
-                                           @RequestParam("logo") MultipartFile logoFile) {
-        localManagerService.uploadLocalLogo(localId, logoFile);
-        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
-    }
-
-    @DeleteMapping("/{localId}/delete-logo")
-    public ResponseEntity<Void> deleteLocalLogo(@PathVariable Long localId) {
-        localManagerService.deleteLocalLogo(localId);
-        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
-    }
-
-    @PostMapping("/{localId}/upload-menu")
-    public ResponseEntity<Void> uploadMenu(@PathVariable Long localId,
-                                           @RequestParam("menu") MultipartFile menuFile) {
-        localManagerService.uploadLocalMenu(localId, menuFile);
-        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
-    }
-
-    @DeleteMapping("/{localId}/delete-menu")
-    public ResponseEntity<Void> deleteMenu(@PathVariable Long localId) {
-        localManagerService.deleteLocalMenuPhoto(localId);
-        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
-    }
-
-    @PostMapping("/{localId}/upload-photos")
-    public ResponseEntity<Void> uploadPhotos(@PathVariable Long localId,
-                                             @RequestParam("photos") List<MultipartFile> photos) {
-        localManagerService.uploadLocalPhotos(localId, photos);
-        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
-    }
-
-    @DeleteMapping("/{localId}/delete-photos")
-    public ResponseEntity<Void> deletePhotos(@PathVariable Long localId,
-                                             @RequestParam("photos") List<String> photoPaths) {
-        localManagerService.deleteLocalPhotos(localId, photoPaths);
-        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
-    }
-
     @GetMapping("/my-local")
-    public ResponseEntity<DisplayLocalDTO> getLocalForManager(@AuthenticationPrincipal User user) {
-        DisplayLocalDTO displayLocalDTO = DisplayLocalDTO.fromLocal(localManagerService.findLocalByManagerId(user.getId()));
-        return new ResponseEntity<>(displayLocalDTO, HttpStatus.OK);
-    }
-
-    @GetMapping("/my-local/edit")
-    public ResponseEntity<DisplayLocalDetailsDTO> getLocalInformation(@AuthenticationPrincipal User user) {
+    public ResponseEntity<DisplayLocalDetailsDTO> getLocalForManager(@AuthenticationPrincipal User user) {
         DisplayLocalDetailsDTO displayLocalDetailsDTO = DisplayLocalDetailsDTO.from(localManagerService.findLocalByManagerId(user.getId()));
         return new ResponseEntity<>(displayLocalDetailsDTO, HttpStatus.OK);
     }
 
-    @PostMapping("/{localId}/edit")
-    public ResponseEntity<Void> editLocalInformation(@PathVariable Long localId,
-                                                     @RequestBody CreateLocalDetailsDTO createLocalDetailsDTO) {
-        localManagerService.editLocalInfo(localId, createLocalDetailsDTO);
-        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    @PostMapping("/my-local/edit")
+    public ResponseEntity<DisplayLocalDetailsDTO> editLocalInformation(@AuthenticationPrincipal User user, @RequestBody CreateLocalDetailsDTO createLocalDetailsDTO) {
+        DisplayLocalDetailsDTO displayLocalDetailsDTO = DisplayLocalDetailsDTO.from(localManagerService.editLocal(user.getId(), createLocalDetailsDTO));
+        return new ResponseEntity<>(displayLocalDetailsDTO, HttpStatus.OK);
     }
+
+    @PostMapping("/upload-logo")
+    public ResponseEntity<String> uploadLogo(@AuthenticationPrincipal User user,
+                                           @RequestParam("logo") MultipartFile logoFile) {
+        String logoUrl = localManagerService.uploadLocalLogo(user.getId(), logoFile);
+        return new ResponseEntity<>(logoUrl, HttpStatus.OK);
+    }
+
+    @DeleteMapping("/delete-logo")
+    public ResponseEntity<Void> deleteLocalLogo(@AuthenticationPrincipal User user) {
+        localManagerService.deleteLocalLogo(user.getId());
+        System.out.println("zdravo");
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+//
+//    @PostMapping("/{localId}/upload-photos")
+//    public ResponseEntity<Void> uploadLocalPhotos(@PathVariable Long localId,
+//                                             @RequestParam("photos") List<MultipartFile> photos) {
+//        localManagerService.uploadLocalPhotos(localId, photos);
+//        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+//    }
+//
+//    @DeleteMapping("/{localId}/delete-photos")
+//    public ResponseEntity<Void> deleteLocalPhotos(@PathVariable Long localId,
+//                                             @RequestParam("photos") List<String> photoPaths) {
+//        localManagerService.deleteLocalPhotos(localId, photoPaths);
+//        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+//    }
 }
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 6945c686e39759f6210cfbaba52d4214eb1c8ea6)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/UserController.java	(revision 94ab9038341b2e160af240badc7cf95ede39c3da)
@@ -28,10 +28,12 @@
     @PutMapping("/edit")
     public ResponseEntity<DisplayUserDTO> editProfile(@AuthenticationPrincipal User user, @RequestBody EditUserProfileDTO editUserProfileDTO) {
-        return new ResponseEntity<>(userService.editUser(user.getId(), editUserProfileDTO), HttpStatus.OK);
+        DisplayUserDTO displayUserDTO = userService.editUser(user.getId(), editUserProfileDTO);
+        return new ResponseEntity<>(displayUserDTO, HttpStatus.OK);
     }
 
     @PatchMapping("/change-email")
     public ResponseEntity<DisplayUserEmailDTO> changeEmail(@AuthenticationPrincipal User user, @RequestBody EditUserEmailDTO editUserEmailDTO) {
-        return new ResponseEntity<>(userService.changeEmail(user.getId(), editUserEmailDTO), HttpStatus.OK);
+        DisplayUserEmailDTO displayUserEmailDTO = userService.changeEmail(user.getId(), editUserEmailDTO);
+        return new ResponseEntity<>(displayUserEmailDTO, HttpStatus.OK);
     }
 
