DomainTemplateCreateService.java
package fr.tiogars.inception.domains.domaintemplate.services;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import fr.tiogars.inception.domains.domaintemplate.entities.DomainTemplateEntity;
import fr.tiogars.inception.domains.domaintemplate.models.CreateDomainTemplateRequest;
import fr.tiogars.inception.domains.domaintemplate.models.DomainTemplate;
import fr.tiogars.inception.domains.domaintemplate.repositories.DomainTemplateRepository;
/**
* Creates DomainTemplates when their business code is available.
*
* @since 0.1.0
*/
@Service
public class DomainTemplateCreateService {
private final DomainTemplateRepository repository;
/**
* Creates a service using Spring Data auditing.
*
* @param repository domain record repository
*/
@Autowired
public DomainTemplateCreateService(DomainTemplateRepository repository) {
this.repository = repository;
}
/**
* Creates a DomainTemplate when its code does not already exist.
*
* @param request business data to create
* @return created template, or an empty optional when the code exists
*/
@Transactional
public Optional<DomainTemplate> create(CreateDomainTemplateRequest request) {
if (repository.findByCode(request.code()).isPresent()) {
return Optional.empty();
}
DomainTemplateEntity entity = new DomainTemplateEntity(
request.code(), request.label(), request.description());
return Optional.of(toRecord(repository.saveAndFlush(entity)));
}
private static DomainTemplate toRecord(DomainTemplateEntity entity) {
return new DomainTemplate(
entity.getId(),
entity.getCode(),
entity.getLabel(),
entity.getDescription(),
entity.getCreatedDate(),
entity.getLastModifiedDate(),
entity.getCreatedBy(),
entity.getLastModifiedBy());
}
}