Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 25 additions & 19 deletions src/main/java/com/m/linshor/controllers/LinShorController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -21,38 +23,42 @@ public Optional<Mapping> findByShortUrl(@PathVariable String shortUrl) {
return linShorService.findByShortUrl(shortUrl);
}

@PostMapping("post")
public Mapping saveLink(String longUrl) {
return linShorService.saveLink(longUrl);
}

@GetMapping("/{id}")
public Optional<Mapping> 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<String> linshorUrl(@RequestBody String longUrl) {
@PostMapping("/post")
public ResponseEntity<String> 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<Object> redirectToLongUrl(@PathVariable String shortUrl) {
Optional<Mapping> 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();
}
}
}
10 changes: 3 additions & 7 deletions src/main/java/com/m/linshor/repositories/MappingDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,13 @@ public class MappingDao {

public Mapping saveLink(Mapping mapping) {
LINKS.add(mapping);
return null;
return mapping;
}

public Optional<Mapping> findByShortUrl(String shortUrl) {
return LINKS.stream().filter(link -> link.getShortUrl().equals(shortUrl)).findFirst();
}

public Optional<Mapping> findById(int id) {
return LINKS.stream().filter(element -> element.getId() == id).findFirst();
}

public Mapping updateLink(Mapping mapping) {
var linkIndex =
IntStream.range(0, LINKS.size())
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,5 @@
@Repository
public interface MappingRepository extends JpaRepository<Mapping, Long> {
Optional<Mapping> findByShortUrl(String shortUrl);

Optional<Mapping> findById(int id);

Mapping findByLongUrl(String longUrl);
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,6 @@ public Mapping saveLink(String longUrl) {
return repository.saveLink(urlMapping);
}

@Override
public Optional<Mapping> findById(int id) {
return repository.findById(id);
}

@Override
public Mapping updateLink(String longUrl) {
Mapping mapping = findByLongUrl(longUrl);
Expand All @@ -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() {
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/com/m/linshor/services/LinShorService.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,9 @@ public interface LinShorService {

Mapping saveLink(String longUrl);

Optional<Mapping> findById(int id);

Mapping updateLink(String longUrl);

void deleteById(int id);
void deleteByShortUrl(String id);

Mapping findByLongUrl(String longUrl);
}