src/main/java/com/amarin/urlshortenerapi/service/UrlService.java
package com.amarin.urlshortenerapi.service;
import com.amarin.urlshortenerapi.dto.UrlLongRequest;
import com.amarin.urlshortenerapi.entity.Url;
import com.amarin.urlshortenerapi.repository.UrlRepository;
import org.springframework.stereotype.Service;
import javax.persistence.EntityNotFoundException;
import java.util.Date;
@Service
public class UrlService {
private final UrlRepository urlRepository;
private final BaseConversion conversion;
public UrlService(UrlRepository urlRepository, BaseConversion baseConversion) {
this.urlRepository = urlRepository;
this.conversion = baseConversion;
}
public String convertToShortUrl(UrlLongRequest request) {
var url = new Url();
url.setLongUrl(request.getLongUrl());
url.setExpiresDate(request.getExpiresDate());
url.setCreatedDate(new Date());
var entity = urlRepository.save(url);
return conversion.encode(entity.getId());
}
public String getOriginalUrl(String shortUrl) {
var id = conversion.decode(shortUrl);
var entity = urlRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("There is no entity with " + shortUrl));
if (entity.getExpiresDate() != null && entity.getExpiresDate().before(new Date())){
urlRepository.delete(entity);
throw new EntityNotFoundException("Link expired!");
}
return entity.getLongUrl();
}
}