package org.taobao88.taobao.enterprise.dao.impl; import java.math.BigInteger; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import org.taobao88.taobao.enterprise.dao.MessagesDAO; import org.taobao88.taobao.enterprise.entity.Message; import org.taobao88.taobao.enterprise.entity.PackageT; import org.taobao88.taobao.enterprise.entity.UserT; @Transactional @Repository("messagesDAO") public class MessagesDAOImpl implements MessagesDAO { @Autowired private SessionFactory sessionFactory; @Override public Message findMessageById(int id) { return (Message) sessionFactory.getCurrentSession().createQuery("from Message where id = :id").setParameter("id", id).uniqueResult(); } @SuppressWarnings("unchecked") @Override public List<Message> findSendedMessagesByUser(UserT user) { return (List<Message>) sessionFactory.getCurrentSession().createQuery("from Message where from_user = :from_user").setParameter("from_user", user.getIdUser()).list(); } @SuppressWarnings("unchecked") @Override public List<Message> findReceivedMessagesByUser(UserT user) { return (List<Message>) sessionFactory.getCurrentSession().createQuery("from Message where to_user = :to_user").setParameter("to_user", user.getIdUser()).list(); } @SuppressWarnings("unchecked") @Override public List<Message> findAllUserMessages(UserT user) { return (List<Message>) sessionFactory.getCurrentSession().createQuery("from Message where to_user = :user_id or from_user = :user_id order by created_at").setParameter("user_id", user.getIdUser()).list(); } @SuppressWarnings("unchecked") @Override public List<Message> findMessagesByPackage(PackageT packageT) { return (List<Message>) sessionFactory.getCurrentSession().createQuery("from Message where idpackage = :idpackage order by created_at").setParameter("idpackage", packageT.getIdPackage()).list(); } @Override public int createMessage(Message message) { return (int) sessionFactory.getCurrentSession().save(message); } @Override public void deleteMessage(Message message) { sessionFactory.getCurrentSession().delete(message); } @Override public void deleteMessagesByPackage(PackageT packageT) { sessionFactory.getCurrentSession().createSQLQuery("DELETE FROM messages WHERE idpackage = :idpackage").setParameter("idpackage", packageT.getIdPackage()); } @Override public int getUnreadedMessagesCount(int userId) { BigInteger result = (BigInteger) sessionFactory.getCurrentSession().createSQLQuery("SELECT COUNT(*) FROM messages WHERE readed = 0 AND to_user = :userId").setParameter("userId", userId).uniqueResult(); return result.intValue(); } @Override public void markMessagesAsReaded(int userId) { sessionFactory.getCurrentSession().createSQLQuery("UPDATE messages SET readed = 1 WHERE to_user = :userId").setParameter("userId", userId).executeUpdate(); } }