117 lines
4.7 KiB
Java
117 lines
4.7 KiB
Java
package eu.eudat.service;
|
|
|
|
import eu.eudat.commons.enums.DescriptionTemplateTypeStatus;
|
|
import eu.eudat.data.DescriptionTemplateTypeEntity;
|
|
import eu.eudat.model.DescriptionTemplateType;
|
|
import eu.eudat.model.builder.DescriptionTemplateTypeBuilder;
|
|
import eu.eudat.query.DescriptionTemplateTypeQuery;
|
|
import eu.eudat.query.lookup.DescriptionTemplateTypeLookup;
|
|
import gr.cite.tools.data.builder.BuilderFactory;
|
|
import gr.cite.tools.data.query.QueryFactory;
|
|
import gr.cite.tools.exception.MyNotFoundException;
|
|
import jakarta.persistence.EntityManager;
|
|
import jakarta.persistence.PersistenceContext;
|
|
import org.springframework.context.ApplicationContext;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.PlatformTransactionManager;
|
|
import org.springframework.transaction.TransactionDefinition;
|
|
import org.springframework.transaction.TransactionStatus;
|
|
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
|
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
@Service
|
|
public class DescriptionTemplateTypeService {
|
|
|
|
private final ApplicationContext applicationContext;
|
|
|
|
private final BuilderFactory builderFactory;
|
|
|
|
private final QueryFactory queryFactory;
|
|
|
|
private final PlatformTransactionManager transactionManager;
|
|
|
|
@PersistenceContext
|
|
private EntityManager entityManager;
|
|
|
|
public DescriptionTemplateTypeService(ApplicationContext applicationContext, BuilderFactory builderFactory, QueryFactory queryFactory, PlatformTransactionManager platformTransactionManager) {
|
|
this.applicationContext = applicationContext;
|
|
this.builderFactory = builderFactory;
|
|
this.queryFactory = queryFactory;
|
|
this.transactionManager = platformTransactionManager;
|
|
}
|
|
|
|
public List<DescriptionTemplateType> query(DescriptionTemplateTypeLookup lookup) {
|
|
DescriptionTemplateTypeQuery query = lookup.enrich(queryFactory);
|
|
List<DescriptionTemplateTypeEntity> data = query.collectAs(lookup.getProject());
|
|
|
|
return builderFactory.builder(DescriptionTemplateTypeBuilder.class).build(lookup.getProject(), data);
|
|
}
|
|
|
|
public DescriptionTemplateType get(UUID id) {
|
|
DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class);
|
|
|
|
return builderFactory
|
|
.builder(DescriptionTemplateTypeBuilder.class)
|
|
.build(null, query.ids(id).first());
|
|
}
|
|
|
|
public DescriptionTemplateTypeEntity getEntityByName(String name) {
|
|
DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class);
|
|
|
|
return query.names(name).first();
|
|
}
|
|
|
|
public DescriptionTemplateType persist(DescriptionTemplateType payload) {
|
|
DescriptionTemplateTypeEntity created = new DescriptionTemplateTypeEntity();
|
|
created.setName(payload.getName());
|
|
created.setStatus(DescriptionTemplateTypeStatus.SAVED.getValue());
|
|
|
|
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
|
|
definition.setName(UUID.randomUUID().toString());
|
|
definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
|
|
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
|
|
TransactionStatus status = null;
|
|
try {
|
|
status = transactionManager.getTransaction(definition);
|
|
entityManager.persist(created);
|
|
|
|
entityManager.flush();
|
|
transactionManager.commit(status);
|
|
} catch (Exception ex) {
|
|
if (status != null)
|
|
transactionManager.rollback(status);
|
|
throw ex;
|
|
}
|
|
|
|
DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class);
|
|
|
|
return builderFactory
|
|
.builder(DescriptionTemplateTypeBuilder.class)
|
|
.build(null, query.ids(created.getId()).first());
|
|
}
|
|
|
|
public DescriptionTemplateType update(DescriptionTemplateType payload) {
|
|
DescriptionTemplateTypeEntity entity = entityManager.find(DescriptionTemplateTypeEntity.class, payload.getId());
|
|
entity.setName(payload.getName());
|
|
entity.setStatus(payload.getStatus());
|
|
entityManager.merge(entity);
|
|
entityManager.flush();
|
|
|
|
return builderFactory.builder(DescriptionTemplateTypeBuilder.class).build(null, entity);
|
|
}
|
|
|
|
public boolean delete(UUID id) {
|
|
DescriptionTemplateTypeEntity entity = entityManager.find(DescriptionTemplateTypeEntity.class, id);
|
|
if (entity == null)
|
|
return false;
|
|
entity.setStatus(DescriptionTemplateTypeStatus.DELETED.getValue());
|
|
entityManager.merge(entity);
|
|
entityManager.flush();
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|