RedirectService.java

package se.jobtechdev.personaldatagateway.api.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import se.jobtechdev.personaldatagateway.api.generated.entities.ClientEntity;
import se.jobtechdev.personaldatagateway.api.generated.entities.RedirectEntity;
import se.jobtechdev.personaldatagateway.api.repository.RedirectRepository;
import se.jobtechdev.personaldatagateway.api.util.TimeProvider;
import se.jobtechdev.personaldatagateway.api.util.UuidProvider;

import java.net.URL;
import java.util.Optional;
import java.util.UUID;

@Component
public class RedirectService {
  private final RedirectRepository redirectRepository;

  @SuppressWarnings("unused")
  @Autowired
  public RedirectService(RedirectRepository redirectRepository) {
    this.redirectRepository = redirectRepository;
  }

  @Transactional
  public RedirectEntity createRedirect(URL url, ClientEntity client) {
    final var redirectId = UuidProvider.uuid();
    final var now = TimeProvider.now();
    final var redirect = new RedirectEntity(redirectId, client, url, now, now);
    return redirectRepository.save(redirect);
  }

  public Page<RedirectEntity> getRedirects(ClientEntity clientEntity, Pageable pageable) {
    return redirectRepository.findByClientEntity(clientEntity, pageable);
  }

  public Optional<RedirectEntity> getRedirectById(UUID redirectId) {
    return redirectRepository.findById(redirectId);
  }

  @Transactional
  public RedirectEntity update(RedirectEntity redirect) {
    final var updated = TimeProvider.now();
    redirect.setUpdated(updated);
    return redirectRepository.save(redirect);
  }
}