FaqService.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.FaqEntity;
import se.jobtechdev.personaldatagateway.api.repository.FaqRepository;
import se.jobtechdev.personaldatagateway.api.util.TimeProvider;
import se.jobtechdev.personaldatagateway.api.util.UuidProvider;

import java.util.Optional;
import java.util.UUID;

@Component
public class FaqService {
  private final FaqRepository faqRepository;

  @SuppressWarnings("unused")
  @Autowired
  public FaqService(FaqRepository faqRepository) {
    this.faqRepository = faqRepository;
  }

  public Optional<FaqEntity> getFaqById(UUID faqId) {
    return faqRepository.findById(faqId);
  }

  @Transactional
  public FaqEntity update(FaqEntity faq) {
    final var updated = TimeProvider.now();
    faq.setUpdated(updated);
    return faqRepository.save(faq);
  }

  @Transactional
  public FaqEntity createFaq(String lang, String title, String content) {
    final var faqId = UuidProvider.uuid();
    final var now = TimeProvider.now();

    final var faq = new FaqEntity(faqId, lang, title, content, now, now);
    return faqRepository.save(faq);
  }

  @Transactional
  public Page<FaqEntity> getOrganizationFaqs(
      UUID organizationId, String acceptLanguage, Pageable pageable) {
    return faqRepository.findByOrganizationIdAndLang(organizationId, acceptLanguage, pageable);
  }

  @Transactional
  public Page<FaqEntity> getDatasourceFaqs(UUID datasourceId, String acceptLanguage, Pageable pageable) {
    return faqRepository.findByDatasourceIdAndLang(datasourceId, acceptLanguage, pageable);
  }
}