OrganizationService.java
package se.jobtechdev.personaldatagateway.api.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import se.jobtechdev.personaldatagateway.api.generated.entities.OrganizationEntity;
import se.jobtechdev.personaldatagateway.api.repository.OrganizationRepository;
import se.jobtechdev.personaldatagateway.api.util.ApiExceptionFactory;
import se.jobtechdev.personaldatagateway.api.util.ProblemDetailsFactory;
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 OrganizationService {
private static final Logger logger = LoggerFactory.getLogger(OrganizationService.class);
private final OrganizationRepository organizationRepository;
@Autowired
public OrganizationService(OrganizationRepository organizationRepository) {
this.organizationRepository = organizationRepository;
}
public Page<OrganizationEntity> getOrganizations(Pageable pageable) {
return organizationRepository.findAll(pageable);
}
public Optional<OrganizationEntity> getOrganizationById(UUID id) {
return organizationRepository.findById(id);
}
public Optional<OrganizationEntity> getOrganizationByOrgNr(String orgNr) {
return organizationRepository.findByOrgNr(orgNr);
}
@Transactional
public Optional<OrganizationEntity> createOrganization(String orgNr, String name) {
final var organizationId = UuidProvider.uuid();
final var now = TimeProvider.now();
final var organization = new OrganizationEntity(organizationId, orgNr, name, now, now);
OrganizationEntity saved;
try {
saved = organizationRepository.save(organization);
return Optional.of(saved);
} catch (DataIntegrityViolationException e) {
final var exceptionClassName = e.getClass().getName();
final var exceptionMessage = e.getMessage();
logger.error("{} {}", exceptionClassName, exceptionMessage);
throw ApiExceptionFactory.createApiException(
ProblemDetailsFactory.createProblemDetails(HttpStatus.CONFLICT, e.getMessage()));
}
}
@Transactional
public OrganizationEntity save(OrganizationEntity organization) {
return organizationRepository.save(organization);
}
@Transactional
public OrganizationEntity update(OrganizationEntity organization) {
final var updated = TimeProvider.now();
organization.setUpdated(updated);
return organizationRepository.save(organization);
}
}