From 36d9788a2205a91fb92c3c8941d56571581da703 Mon Sep 17 00:00:00 2001 From: MattWay224 Date: Wed, 26 Mar 2025 00:55:00 +0300 Subject: [PATCH] v1 done --- .../controllers/LinShorController.java | 44 +++++++++++-------- .../m/linshor/repositories/MappingDao.java | 10 ++--- .../repositories/MappingRepository.java | 3 -- .../services/InMemoryLinShorService.java | 9 +--- .../m/linshor/services/LinShorService.java | 4 +- 5 files changed, 31 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/m/linshor/controllers/LinShorController.java b/src/main/java/com/m/linshor/controllers/LinShorController.java index c63e254..df51612 100644 --- a/src/main/java/com/m/linshor/controllers/LinShorController.java +++ b/src/main/java/com/m/linshor/controllers/LinShorController.java @@ -4,8 +4,10 @@ import com.m.linshor.services.LinShorService; import java.net.URI; +import java.net.URL; import java.util.Optional; +import jakarta.servlet.http.HttpServletRequest; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -21,38 +23,42 @@ public Optional findByShortUrl(@PathVariable String shortUrl) { return linShorService.findByShortUrl(shortUrl); } - @PostMapping("post") - public Mapping saveLink(String longUrl) { - return linShorService.saveLink(longUrl); - } - - @GetMapping("/{id}") - public Optional findById(@PathVariable int id) { - return linShorService.findById(id); - } - @PutMapping("update") public Mapping updateLink(String longUrl) { return linShorService.updateLink(longUrl); } - @DeleteMapping("delete/{id}") - public int deleteById(@PathVariable int id) { - linShorService.deleteById(id); + @DeleteMapping("delete/{shortUrl}") + public int deleteByShortUrl(@PathVariable String shortUrl) { + linShorService.deleteByShortUrl(shortUrl); return 200; } - @PostMapping("/shortener") - public ResponseEntity linshorUrl(@RequestBody String longUrl) { + @PostMapping("/post") + public ResponseEntity linshorUrl(@RequestBody String longUrl, HttpServletRequest request) { Mapping mapping = linShorService.saveLink(longUrl); - return ResponseEntity.ok(mapping.getShortUrl()); + + String serverAddress = request.getRequestURL().toString().replace(request.getRequestURI(), ""); + String fullShortUrl = serverAddress + "/linshor/v1/" + mapping.getShortUrl(); + + return ResponseEntity.ok(fullShortUrl); } @GetMapping("/{shortUrl}") public ResponseEntity redirectToLongUrl(@PathVariable String shortUrl) { Optional mapping = linShorService.findByShortUrl(shortUrl); - return mapping - .map(m -> ResponseEntity.status(302).location(URI.create(m.getLongUrl())).build()) - .orElseGet(() -> ResponseEntity.notFound().build()); + + if (mapping.isPresent()) { + String longUrl = mapping.get().getLongUrl().trim().replaceAll("^\"|\"$", ""); // Remove surrounding quotes + + try { + URI uri = new URL(longUrl).toURI(); // Convert URL to URI safely + return ResponseEntity.status(302).location(uri).build(); + } catch (Exception e) { + return ResponseEntity.badRequest().body("Invalid URL stored in database: " + longUrl); + } + } else { + return ResponseEntity.notFound().build(); + } } } diff --git a/src/main/java/com/m/linshor/repositories/MappingDao.java b/src/main/java/com/m/linshor/repositories/MappingDao.java index 5d83eca..633c4aa 100644 --- a/src/main/java/com/m/linshor/repositories/MappingDao.java +++ b/src/main/java/com/m/linshor/repositories/MappingDao.java @@ -15,17 +15,13 @@ public class MappingDao { public Mapping saveLink(Mapping mapping) { LINKS.add(mapping); - return null; + return mapping; } public Optional findByShortUrl(String shortUrl) { return LINKS.stream().filter(link -> link.getShortUrl().equals(shortUrl)).findFirst(); } - public Optional findById(int id) { - return LINKS.stream().filter(element -> element.getId() == id).findFirst(); - } - public Mapping updateLink(Mapping mapping) { var linkIndex = IntStream.range(0, LINKS.size()) @@ -39,8 +35,8 @@ public Mapping updateLink(Mapping mapping) { return null; } - public void deleteById(int id) { - var link = findById(id); + public void deleteByShortUrl(String shortUrl) { + var link = findByShortUrl(shortUrl); if (link.isPresent()) { LINKS.remove(link); } diff --git a/src/main/java/com/m/linshor/repositories/MappingRepository.java b/src/main/java/com/m/linshor/repositories/MappingRepository.java index da1adf5..3ad4748 100644 --- a/src/main/java/com/m/linshor/repositories/MappingRepository.java +++ b/src/main/java/com/m/linshor/repositories/MappingRepository.java @@ -10,8 +10,5 @@ @Repository public interface MappingRepository extends JpaRepository { Optional findByShortUrl(String shortUrl); - - Optional findById(int id); - Mapping findByLongUrl(String longUrl); } diff --git a/src/main/java/com/m/linshor/services/InMemoryLinShorService.java b/src/main/java/com/m/linshor/services/InMemoryLinShorService.java index a5b49fd..d93a605 100644 --- a/src/main/java/com/m/linshor/services/InMemoryLinShorService.java +++ b/src/main/java/com/m/linshor/services/InMemoryLinShorService.java @@ -35,11 +35,6 @@ public Mapping saveLink(String longUrl) { return repository.saveLink(urlMapping); } - @Override - public Optional findById(int id) { - return repository.findById(id); - } - @Override public Mapping updateLink(String longUrl) { Mapping mapping = findByLongUrl(longUrl); @@ -50,8 +45,8 @@ public Mapping updateLink(String longUrl) { } @Override - public void deleteById(int id) { - repository.deleteById(id); + public void deleteByShortUrl(String shortUrl) { + repository.deleteByShortUrl(shortUrl); } private String generateShor() { diff --git a/src/main/java/com/m/linshor/services/LinShorService.java b/src/main/java/com/m/linshor/services/LinShorService.java index c36f527..1b9c740 100644 --- a/src/main/java/com/m/linshor/services/LinShorService.java +++ b/src/main/java/com/m/linshor/services/LinShorService.java @@ -13,11 +13,9 @@ public interface LinShorService { Mapping saveLink(String longUrl); - Optional findById(int id); - Mapping updateLink(String longUrl); - void deleteById(int id); + void deleteByShortUrl(String id); Mapping findByLongUrl(String longUrl); }