package com.upplication.thepunisher;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import java.util.List;
@Repository
@Transactional(readOnly = true)
public class PunishmentRepository {
@PersistenceContext
private EntityManager entityManager;
@Transactional
public Punishment create(String title, String description) {
if (title.equals("") || description.equals("") || exists(title)
|| title.length() > 100 || description.length() > 100) {
return null;
}
Punishment punishment = new Punishment();
punishment.setTitle(title);
punishment.setDescription(description);
entityManager.persist(punishment);
return punishment;
}
@Transactional
@SuppressWarnings("unchecked")
public List<Punishment> getAll() {
return (List<Punishment>) entityManager.createQuery("SELECT p FROM Punishment p ORDER BY p.title ASC").getResultList();
}
@Transactional
public boolean exists(String title) {
try {
entityManager.createQuery("SELECT p FROM Punishment p WHERE p.title = :title")
.setParameter("title", title)
.getSingleResult();
return true;
} catch (NoResultException e) {
return false;
}
}
@Transactional
public boolean exists(String title, int id) {
try {
entityManager.createQuery("SELECT p FROM Punishment p WHERE p.title = :title AND p.id <> :id")
.setParameter("title", title)
.setParameter("id", id)
.getSingleResult();
return true;
} catch (NoResultException e) {
return false;
}
}
@Transactional
public Punishment edit(int id, String title, String description) {
if (title.equals("") || description.equals("") || exists(title, id)
|| title.length() > 100 || description.length() > 100) {
return null;
}
Punishment punishment = null;
try {
punishment = (Punishment)entityManager.createQuery("SELECT p FROM Punishment p WHERE p.id = :id")
.setParameter("id", id)
.getSingleResult();
punishment.setTitle(title);
punishment.setDescription(description);
entityManager.merge(punishment);
} catch (NoResultException ignored) {}
return punishment;
}
@Transactional
public boolean remove(int id) {
try {
Punishment punishment = (Punishment)entityManager.createQuery("SELECT p FROM Punishment p WHERE p.id = :id")
.setParameter("id", id)
.getSingleResult();
entityManager.remove(punishment);
return true;
} catch (NoResultException e) {
return false;
}
}
}