DomainTemplateSeedService.java
package fr.tiogars.inception.domains.domaintemplate.services;
import java.util.ArrayList;
import java.util.List;
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 or updates DomainTemplates from seed data. */
@Service
public class DomainTemplateSeedService {
private final DomainTemplateRepository repository;
@Autowired
public DomainTemplateSeedService(DomainTemplateRepository repository) {
this.repository = repository;
}
/**
* Creates or updates templates by immutable business code.
*
* @param requests business data to seed
* @return stored templates in input order
*/
@Transactional
public List<DomainTemplate> seed(List<CreateDomainTemplateRequest> requests) {
List<DomainTemplate> storedTemplates = new ArrayList<>();
for (CreateDomainTemplateRequest request : requests) {
DomainTemplateEntity entity = repository.findByCode(request.code())
.map(existing -> {
existing.update(request.label(), request.description());
return existing;
})
.orElseGet(() -> new DomainTemplateEntity(
request.code(), request.label(), request.description()));
storedTemplates.add(toRecord(repository.saveAndFlush(entity)));
}
return storedTemplates;
}
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());
}
}