Changeset dd7a2b6


Ignore:
Timestamp:
05/02/25 20:07:39 (13 hours ago)
Author:
Nikola Jordanoski <nikolaj_koko@…>
Branches:
master
Children:
3041023
Parents:
0391097 (diff), ae61ea4 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of https://github.com/nikolakoko/ReserveNGo

Location:
ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/config/WebSecurityConfig.java

    r0391097 rdd7a2b6  
    7171                        .allowedHeaders("*")
    7272                        .allowCredentials(true);
     73
     74                registry.addMapping("/uploads/**")
     75                        .allowedOrigins("http://localhost:5173")
     76                        .allowedMethods("*")// maybe should be only GET
     77                        .allowedHeaders("*");
    7378            }
    7479        };
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/FileStorageServiceImpl.java

    r0391097 rdd7a2b6  
    1515public class FileStorageServiceImpl implements FileStorageService {
    1616
    17     private final Path uploadDirectory = Paths.get("uploads");
     17    private final Path rootUploadsDir = Paths.get("uploads");
     18    private final Path logosDir = rootUploadsDir.resolve("logos");
     19    private final Path localsDir = rootUploadsDir.resolve("locals");
    1820
    1921    public FileStorageServiceImpl() throws IOException {
    20         Files.createDirectories(uploadDirectory);
     22        Files.createDirectories(rootUploadsDir);
     23        Files.createDirectories(logosDir);
     24        Files.createDirectories(localsDir);
    2125    }
    2226
    2327    @Override
    24     public String saveFile(MultipartFile file) {
     28    public String saveLogoFile(MultipartFile file) {
    2529        try {
    2630            String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename();
    27             Path target = uploadDirectory.resolve(fileName);
     31            Path target = logosDir.resolve(fileName);
    2832            Files.copy(file.getInputStream(), target, StandardCopyOption.REPLACE_EXISTING);
    29             return "/uploads/" + fileName;
     33            return "/uploads/logos/" + fileName;
    3034        } catch (IOException e) {
    31             throw new RuntimeException("Failed to save file", e);
     35            throw new RuntimeException("Failed to save logo", e);
     36        }
     37    }
     38
     39    @Override
     40    public String saveLocalPhoto(Long localId, MultipartFile file) {
     41        try {
     42            Path localFolder = localsDir.resolve(String.valueOf(localId));
     43            Files.createDirectories(localFolder);
     44            String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename();
     45            Path target = localFolder.resolve(fileName);
     46            Files.copy(file.getInputStream(), target, StandardCopyOption.REPLACE_EXISTING);
     47            return "/uploads/locals/" + localId + "/" + fileName;
     48        } catch (IOException e) {
     49            throw new RuntimeException("Failed to save local photo", e);
    3250        }
    3351    }
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/impl/LocalManagerServiceImpl.java

    r0391097 rdd7a2b6  
    44import mk.ukim.finki.it.reservengo.model.domain.LocalManager;
    55import mk.ukim.finki.it.reservengo.model.exceptions.LocalIdNotFoundException;
     6import mk.ukim.finki.it.reservengo.model.exceptions.LogoDeletionException;
    67import mk.ukim.finki.it.reservengo.model.exceptions.UserEmailAlreadyExistsException;
    78import mk.ukim.finki.it.reservengo.repository.LocalManagerRepository;
     
    1213import org.springframework.stereotype.Service;
    1314import org.springframework.web.multipart.MultipartFile;
     15
     16import java.io.IOException;
     17import java.nio.file.Files;
     18import java.nio.file.Path;
     19import java.nio.file.Paths;
     20import java.util.ArrayList;
     21import java.util.List;
    1422
    1523@Service
     
    3240        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
    3341
    34         String logoPath = fileStorageService.saveFile(logoFile);
     42        String logoPath = fileStorageService.saveLogoFile(logoFile);
    3543        local.setLogoUrl(logoPath);
    3644
     
    4553        localManagerRepository.save(localManager);
    4654    }
     55
     56    @Override
     57    public void deleteLocalLogo(Long localId) {
     58        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
     59        String logoUrl = local.getLogoUrl();
     60
     61        if (logoUrl != null && !logoUrl.isEmpty()) {
     62            Path filePath = Paths.get("uploads").resolve(Paths.get(logoUrl).getFileName().toString());
     63
     64            try {
     65                Files.deleteIfExists(filePath);
     66            } catch (IOException e) {
     67                throw new LogoDeletionException("Failed to delete logo from path: " + filePath, e);
     68            }
     69        }
     70        local.setLogoUrl(null);
     71        localRepository.save(local);
     72    }
     73
     74    @Override
     75    public void uploadPhotos(Long localId, List<MultipartFile> photos) {
     76        Local local = localRepository.findById(localId).orElseThrow(() -> new LocalIdNotFoundException(localId));
     77
     78        List<String> photoPaths = local.getLocalPhotos();
     79
     80        if (photoPaths == null) {
     81            photoPaths = new ArrayList<>();
     82        }
     83
     84        for (MultipartFile photo : photos) {
     85            if (!photo.isEmpty()) {
     86                String filePath = fileStorageService.saveLocalPhoto(localId, photo);
     87                photoPaths.add(filePath);
     88            }
     89        }
     90        local.setLocalPhotos(photoPaths);
     91        localRepository.save(local);
     92    }
    4793}
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/FileStorageService.java

    r0391097 rdd7a2b6  
    44
    55public interface FileStorageService {
    6     String saveFile(MultipartFile file);
     6    String saveLogoFile(MultipartFile file);
     7    String saveLocalPhoto(Long localId, MultipartFile file);
    78}
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/service/intf/LocalManagerService.java

    r0391097 rdd7a2b6  
    44import org.springframework.web.multipart.MultipartFile;
    55
     6import java.util.List;
     7
    68public interface LocalManagerService {
    79    void uploadLogo(Long localId, MultipartFile logoFile);
    810
    911    void save(LocalManager localManager);
     12
     13    void deleteLocalLogo(Long localId);
     14
     15    void uploadPhotos(Long localId, List<MultipartFile> photos);
    1016}
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/advice/GlobalExceptionHandler.java

    r0391097 rdd7a2b6  
    5656        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
    5757    }
     58
     59    @ExceptionHandler(LogoDeletionException.class)
     60    public ResponseEntity<String> handleLogoDeletion(LogoDeletionException ex) {
     61        return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage());
     62    }
    5863}
    5964
  • ReserveNGo-backend/src/main/java/mk/ukim/finki/it/reservengo/web/controller/LocalManagerController.java

    r0391097 rdd7a2b6  
    55import org.springframework.web.bind.annotation.*;
    66import org.springframework.web.multipart.MultipartFile;
     7
     8import java.util.List;
    79
    810@RestController
     
    2224        return ResponseEntity.ok().build();
    2325    }
    24     //TODO implement delete logo
     26
     27    @DeleteMapping("/{localId}/delete-logo")
     28    public ResponseEntity<?> deleteLocalLogo(@PathVariable Long localId) {
     29        localManagerService.deleteLocalLogo(localId);
     30        return ResponseEntity.ok().build();
     31    }
     32
    2533    @PostMapping("/{localId}/upload-photos")
    26     //TODO implement this next
    27     public ResponseEntity<?> uploadPhotos(@PathVariable Long localId) {
     34    public ResponseEntity<?> uploadPhotos(@PathVariable Long localId,
     35                                          @RequestParam("photos") List<MultipartFile> photos) {
     36        localManagerService.uploadPhotos(localId, photos);
    2837        return ResponseEntity.ok().build();
    2938    }
Note: See TracChangeset for help on using the changeset viewer.