package uk.ac.cam.echo.server.resources;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import uk.ac.cam.echo.data.Conversation;
import uk.ac.cam.echo.data.User;
import uk.ac.cam.echo.data.resources.InterestResource;
import uk.ac.cam.echo.data.resources.UserResource;
import uk.ac.cam.echo.server.HibernateUtil;
import uk.ac.cam.echo.server.models.ConversationModel;
import uk.ac.cam.echo.server.models.UserModel;
import javax.ws.rs.core.Response;
import java.util.List;
public class UserResourceImpl implements UserResource {
public List<User> getAll() {
return HibernateUtil.getTransaction().createCriteria(UserModel.class).list();
}
public User get(long id) {
return (User) HibernateUtil.getTransaction().get(UserModel.class, id);
}
public InterestResource getInterestResource(long id) {
return new InterestResourceImpl(get(id));
}
public User create(String username, Long conversationId) {
Session session = HibernateUtil.getTransaction();
UserModel user = new UserModel();
user.setUsername(username);
user.setCurrentConversation((Conversation) session.load(ConversationModel.class, conversationId));
session.save(user);
return user;
}
public User create(User user) {
HibernateUtil.getTransaction().save(user);
return user;
}
public User authenticate(String username, String password) {
User user = (User) HibernateUtil.getTransaction().createCriteria(UserModel.class)
.add(Restrictions.eq("username", username))
.add(Restrictions.eq("hashedPassword", UserModel.hashPassword(password)))
.uniqueResult();
return user;
}
public Response update(User item) {
HibernateUtil.getTransaction().update(item);
return Response.ok().build();
}
public Response delete(long id) {
User u = get(id);
HibernateUtil.getTransaction().delete(u);
return Response.ok().build();
}
}