package com.example.demo; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import lombok.RequiredArgsConstructor; import lombok.Value; import reactor.core.publisher.Mono; @RestController @RequiredArgsConstructor public class LinkController { private final LinkService linkService; @PostMapping("/link") Mono<CreateLinkResponse> create(@RequestBody CreateLinkRequest requestLink) { return linkService.shortenLink(requestLink.getLink()) .map(CreateLinkResponse::new); } @GetMapping("/link/{key}") Mono<ResponseEntity<Object>> getLink(@PathVariable String key) { return linkService.getOriginalLink(key) .map(link -> ResponseEntity.status(HttpStatus.PERMANENT_REDIRECT) .header("Location", link.getOriginalLink()) .build()) .defaultIfEmpty(ResponseEntity.notFound().build()); } @Value public static class CreateLinkRequest { private String link; } @Value public static class CreateLinkResponse { private String shortenedLink; } } |