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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/bootstrap/DataHolder.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -91,10 +91,5 @@
         //Local
         List<Service> serviceList = new ArrayList<>(List.of(Service.values()));
-        List<String> localPhotos;
         for (int i = 1; i <= 3; i++) {
-            localPhotos = new ArrayList<>();
-            for (int j = 1; j <= 3; j++) {
-                localPhotos.add("PicturePath: " + j);
-            }
             Local local = new Local(
                     "Name" + i,
@@ -106,5 +101,5 @@
                     null,
                     "LogoURL" + i,
-                    localPhotos,
+                    null,
                     "MenuLink" + i,
                     null,
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DeleteLocalPhotosDTO.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DeleteLocalPhotosDTO.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DeleteLocalPhotosDTO.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -0,0 +1,8 @@
+package mk.ukim.finki.it.reservengo.dto.localDTO;
+
+import java.util.List;
+
+public record DeleteLocalPhotosDTO(
+        List<String> localPhotosUrls
+) {
+}
Index: ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DeleteLocalPhotosResultDTO.java
===================================================================
--- ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DeleteLocalPhotosResultDTO.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/dto/localDTO/DeleteLocalPhotosResultDTO.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -0,0 +1,9 @@
+package mk.ukim.finki.it.reservengo.dto.localDTO;
+
+import java.util.List;
+
+public record DeleteLocalPhotosResultDTO(
+        List<String> deletedPhotos,
+        List<String> notFoundPhotos
+) {
+}
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/FileStorageServiceImpl.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -6,4 +6,5 @@
 import mk.ukim.finki.it.reservengo.service.intf.FileStorageService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -15,4 +16,5 @@
 
 @Service
+@Transactional
 public class FileStorageServiceImpl implements FileStorageService {
 
@@ -53,4 +55,9 @@
 
     @Override
+    public String savePhotoFile(MultipartFile file) {
+        return savePhotoFile(file, localsDir, "/uploads/locals/");
+    }
+
+    @Override
     public void deletePhotoFile(String filePath) {
         if (filePath == null || filePath.trim().isEmpty()) {
@@ -65,19 +72,4 @@
         }
     }
-
-//    @Override
-//    public String saveLocalPhoto(Long localId, MultipartFile file) {
-//        try {
-//            Path localFolder = localsDir.resolve(String.valueOf(localId));
-//            Files.createDirectories(localFolder);
-//            String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename();
-//            Path target = localFolder.resolve("photos").resolve(fileName);
-//            Files.createDirectories(target.getParent());
-//            Files.copy(file.getInputStream(), target, StandardCopyOption.REPLACE_EXISTING);
-//            return "/uploads/locals/" + localId + "/photos/" + fileName;
-//        } catch (IOException e) {
-//            throw new RuntimeException("Failed to save local photo", e);
-//        }
-//    }
 
     private void validateFile(MultipartFile file) {
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -2,4 +2,6 @@
 
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Local;
 import mk.ukim.finki.it.reservengo.model.domain.LocalManager;
@@ -99,12 +101,16 @@
     }
 
-//    @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 String uploadLocalPhoto(Long managerId, MultipartFile photoFile) {
+        Local local = findLocalByManagerId(managerId);
+
+        return localService.addPhoto(local.getId(), photoFile);
+    }
+
+    @Override
+    public DeleteLocalPhotosResultDTO deleteLocalPhoto(Long managerId, DeleteLocalPhotosDTO deleteLocalPhotosDTO) {
+        Local local = findLocalByManagerId(managerId);
+
+        return localService.deletePhotos(local.getId(), deleteLocalPhotosDTO.localPhotosUrls());
+    }
 }
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalServiceImpl.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Local;
 import mk.ukim.finki.it.reservengo.model.exceptions.*;
@@ -11,4 +12,5 @@
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.ArrayList;
 import java.util.List;
 
@@ -93,47 +95,46 @@
     }
 
-//    @Override
-//    public void uploadPhotos(Long localId, List<MultipartFile> photos) {
-//        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
-//
-//        List<String> photoPaths = local.getLocalPhotos();
-//
-//        if (photoPaths == null) {
-//            photoPaths = new ArrayList<>();
-//        }
-//
-//        for (MultipartFile photo : photos) {
-//            if (!photo.isEmpty()) {
-//                String filePath = fileStorageService.saveLocalPhoto(localId, photo);
-//                photoPaths.add(filePath);
-//            }
-//        }
-//        local.setLocalPhotos(photoPaths);
-//        localRepository.save(local);
-//    }
+    @Override
+    public String addPhoto(Long localId, MultipartFile photoFile) {
+        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
 
-//    @Override
-//    public void deletePhotos(Long localId, List<String> photoPaths) {
-//        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
-//
-//        List<String> uploadedPhotos = local.getLocalPhotos();
-//
-//        if (uploadedPhotos == null) {
-//            uploadedPhotos = new ArrayList<>();
-//        }
-//
-//        for (String photoPath : photoPaths) {
-//            if (uploadedPhotos.contains(photoPath)) {
-//                try {
-//                    fileStorageService.deletePhotoFile(photoPath);
-//                    uploadedPhotos.remove(photoPath);
-//                } catch (RuntimeException e) {
-//                    throw new PhotoDeletionException("Failed to delete photo: " + photoPath, e);
-//                }
-//            }
-//        }
-//
-//        local.setLocalPhotos(uploadedPhotos);
-//        localRepository.save(local);
-//    }
+        List<String> photoPaths = local.getLocalPhotos();
+
+        if (photoPaths == null) {
+            photoPaths = new ArrayList<>();
+        }
+
+        String photoPath = fileStorageService.savePhotoFile(photoFile);
+        photoPaths.add(photoPath);
+        localRepository.save(local);
+
+        return photoPath;
+    }
+
+    @Override
+    public DeleteLocalPhotosResultDTO deletePhotos(Long localId, List<String> photoPaths) {
+        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
+        List<String> currentPhotoUrls = local.getLocalPhotos();
+
+        if (currentPhotoUrls == null || currentPhotoUrls.isEmpty()) {
+            throw new PhotoDeletionException("No photos found for local with id: " + localId);
+        }
+
+        List<String> deletedPhotos = new ArrayList<>();
+        List<String> notFoundPhotos = new ArrayList<>();
+
+        for (String photoUrl : photoPaths) {
+            if (currentPhotoUrls.contains(photoUrl)) {
+                fileStorageService.deletePhotoFile(photoUrl);
+                currentPhotoUrls.remove(photoUrl);
+                deletedPhotos.add(photoUrl);
+            } else {
+                notFoundPhotos.add(photoUrl);
+            }
+        }
+        local.setLocalPhotos(currentPhotoUrls);
+        localRepository.save(local);
+
+        return new DeleteLocalPhotosResultDTO(deletedPhotos, notFoundPhotos);
+    }
 }
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/UserServiceImpl.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -78,6 +78,6 @@
 
     @Override
-    public String uploadProfilePhoto(Long id, MultipartFile photoFile) {
-        User user = userRepository.findById(id).orElseThrow(() -> new UserIdNotFoundException(id));
+    public String uploadProfilePhoto(Long userId, MultipartFile photoFile) {
+        User user = userRepository.findById(userId).orElseThrow(() -> new UserIdNotFoundException(userId));
 
         if (user.getProfilePhotoUrl() != null && !user.getProfilePhotoUrl().isEmpty() ) {
@@ -93,6 +93,6 @@
 
     @Override
-    public void deleteProfilePhoto(Long id) {
-        User user = userRepository.findById(id).orElseThrow(() -> new UserIdNotFoundException(id));
+    public void deleteProfilePhoto(Long userId) {
+        User user = userRepository.findById(userId).orElseThrow(() -> new UserIdNotFoundException(userId));
         String photoUrl = user.getProfilePhotoUrl();
 
@@ -102,5 +102,5 @@
             userRepository.save(user);
         } else {
-            throw new PhotoDeletionException("No profile photo found for user with id: " + id);
+            throw new PhotoDeletionException("No profile photo found for user with id: " + userId);
         }
     }
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/FileStorageService.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -8,5 +8,5 @@
     String saveProfilePhotoFile(MultipartFile file);
 
-//    String saveLocalPhoto(Long localId, MultipartFile file);
+    String savePhotoFile(MultipartFile file);
 
     void deletePhotoFile(String filePath);
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -2,4 +2,6 @@
 
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Local;
 import mk.ukim.finki.it.reservengo.model.domain.LocalManager;
@@ -30,6 +32,6 @@
     void deleteLocalLogo(Long managerId);
 
-//    void uploadLocalPhotos(Long localId, List<MultipartFile> photos);
-//
-//    void deleteLocalPhotos(Long localId, List<String> photoPaths);
+    String uploadLocalPhoto(Long managerId, MultipartFile photoFile);
+
+    DeleteLocalPhotosResultDTO deleteLocalPhoto(Long managerId, DeleteLocalPhotosDTO deleteLocalPhotosDTO);
 }
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalService.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
 import mk.ukim.finki.it.reservengo.model.domain.Local;
 import org.springframework.web.multipart.MultipartFile;
@@ -22,6 +23,6 @@
     void deleteLogo(Long localId);
 
-//    void uploadPhotos(Long localId, List<MultipartFile> photos);
-//
-//    void deletePhotos(Long localId, List<String> photoPaths);
+    String addPhoto(Long localId, MultipartFile photoFile);
+
+    DeleteLocalPhotosResultDTO deletePhotos(Long localId, List<String> photoUrls);
 }
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/UserService.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -18,6 +18,6 @@
     void changePassword(Long userId, EditUserPasswordDTO editUserPasswordDTO);
 
-    String uploadProfilePhoto(Long id, MultipartFile photoFile);
+    String uploadProfilePhoto(Long userId, MultipartFile photoFile);
 
-    void deleteProfilePhoto(Long id);
+    void deleteProfilePhoto(Long userId);
 }
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 bb9f33d7cd7dff90d619deca11a02dc2bd207ac3)
+++ ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java	(revision 2e68c83c919881e5da3b34501be9c615b6c25610)
@@ -2,4 +2,6 @@
 
 import mk.ukim.finki.it.reservengo.dto.localDTO.CreateLocalDetailsDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosDTO;
+import mk.ukim.finki.it.reservengo.dto.localDTO.DeleteLocalPhotosResultDTO;
 import mk.ukim.finki.it.reservengo.dto.localDTO.DisplayLocalDetailsDTO;
 import mk.ukim.finki.it.reservengo.model.domain.User;
@@ -36,6 +38,5 @@
 
     @PostMapping("/upload-logo")
-    public ResponseEntity<String> uploadLogo(@AuthenticationPrincipal User user,
-                                           @RequestParam("logo") MultipartFile logoFile) {
+    public ResponseEntity<String> uploadLogo(@AuthenticationPrincipal User user, @RequestParam("logo") MultipartFile logoFile) {
         String logoUrl = localManagerService.uploadLocalLogo(user.getId(), logoFile);
         return new ResponseEntity<>(logoUrl, HttpStatus.OK);
@@ -47,17 +48,15 @@
         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);
-//    }
+
+    @PostMapping("/upload-photo")
+    public ResponseEntity<String> uploadLocalPhotos(@AuthenticationPrincipal User user, @RequestParam("photo") MultipartFile photoFile) {
+        String photoUrl = localManagerService.uploadLocalPhoto(user.getId(), photoFile);
+        return new ResponseEntity<>(photoUrl, HttpStatus.OK);
+    }
+
+    @DeleteMapping("/delete-photos")
+    public ResponseEntity<DeleteLocalPhotosResultDTO> deleteLocalPhotos(@AuthenticationPrincipal User user, @RequestBody DeleteLocalPhotosDTO deleteLocalPhotosDTO) {
+        DeleteLocalPhotosResultDTO resultDTO = localManagerService.deleteLocalPhoto(user.getId(), deleteLocalPhotosDTO);
+        return new ResponseEntity<>(resultDTO, HttpStatus.MULTI_STATUS);
+    }
 }
