com.sct.descubriendoturuta.service.UsuarioServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.sct.descubriendoturuta.service.UsuarioServiceImpl.java

Source

/**
 * Copyright 2014 Nicotina Estudio
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 **/

package com.sct.descubriendoturuta.service;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sct.descubriendoturuta.model.Invitacion;
import com.sct.descubriendoturuta.model.APIUsuario;
import com.sct.descubriendoturuta.model.Person;
import com.sct.descubriendoturuta.model.Ruta;
import com.sct.descubriendoturuta.model.RutaPoi;
import com.sct.descubriendoturuta.model.Usuario;
import com.sct.descubriendoturuta.model.Votacion;

@Service
public class UsuarioServiceImpl implements UsuarioService {

    @PersistenceContext
    EntityManager em;

    @Override
    @Transactional
    public boolean agregarUsuario(Usuario usuario) {

        em.persist(usuario);
        return usuario.getId() > 0 ? true : false;
    }

    @Override
    @Transactional
    public Usuario buscarUsuario(Integer id) {
        Query query = em.createQuery("select u from Usuario u Where u.id = :fid order by u.id");
        query.setMaxResults(1);
        query.setParameter("fid", id);

        List<Usuario> r = query.getResultList();

        return r.isEmpty() ? null : r.get(0);
    }

    @Override
    @Transactional
    public Usuario buscarFacebookId(String facebookId) {

        Query query = em.createQuery("select u from Usuario u Where u.facebookId = :fid order by u.id");
        query.setMaxResults(1);
        query.setParameter("fid", facebookId);

        List<Usuario> r = query.getResultList();

        return r.isEmpty() ? null : r.get(0);
    }

    @Override
    @Transactional
    public boolean agregarRuta(Usuario usuario, Ruta ruta) {

        ruta.setUsuario(usuario);
        em.persist(ruta);

        return ruta.getId() > 0 ? true : false;
    }

    @Override
    @Transactional
    public List<Ruta> obtenerRutas(int usuarioId) {
        Query query = em.createQuery("select r from Ruta r Where r.usuario.id = :p order by r.id desc");
        query.setParameter("p", usuarioId);

        return query.getResultList();
    }

    @Override
    @Transactional
    public List<Invitacion> obtenerRutasInvitadas(int usuarioId) {

        Query query = em.createQuery("select i from Invitacion i WHERE i.usuario.id = :p");

        query.setParameter("p", usuarioId);

        return query.getResultList();
    }

    @Override
    @Transactional
    public List<Invitacion> obtenerUsuariosInvitados(int rutaId) {

        Query query = em.createQuery("select i from Invitacion i WHERE i.ruta.id = :p");
        query.setParameter("p", rutaId);

        return query.getResultList();
    }

    @Override
    @Transactional
    public boolean agregarPoi(RutaPoi poi) {

        em.persist(poi);

        return poi.getId() > 0 ? true : false;
    }

    @Override
    @Transactional
    public Ruta obtenerRuta(int idRuta) {

        Ruta r = em.find(Ruta.class, idRuta);
        return r;
    }

    @Override
    @Transactional
    public boolean aceptarInvitacion(Invitacion invitacion) {

        em.persist(invitacion);

        return invitacion.getId() > 0 ? true : false;
    }

    @Override
    @Transactional
    public boolean votarRuta(Votacion votar) {

        em.persist(votar);
        return votar.getId() > 0 ? true : false;
    }

    /**
     * Verifica si el usuario realizo la votacin por la ruta.
     * @param votar
     * @return
     */
    @Override
    @Transactional
    public boolean usuarioVotoRuta(int usuarioId, int rutaId) {

        Query query = em.createQuery("select v from Votacion v WHERE v.usuario.id = :u and v.ruta.id = :r ");
        query.setParameter("u", usuarioId);
        query.setParameter("r", rutaId);

        return query.getResultList().size() > 0 ? true : false;
    }

    @Override
    @Transactional
    public List<Ruta> obtenerRutasPopulares() {

        Query query = em.createQuery(
                "select v.ruta.id, SUM(v.calificacion)/MAX(v.id) as rate from Votacion v GROUP BY v.ruta.id ORDER BY SUM(v.calificacion)/MAX(v.id) DESC");

        List<Votacion> votaciones = query.getResultList();
        List<Ruta> rutas = new ArrayList<Ruta>();

        Object[] v = votaciones.toArray();
        for (Object o : v) {
            Object[] ro = (Object[]) o;
            Ruta r = em.find(Ruta.class, ro[0]);
            r.setPopularidasd((Double) ro[1]);

            rutas.add(r);
        }
        return rutas;
    }

    @Override
    public List<APIUsuario> apiObtenerUsuarios() {
        Query query = em.createQuery(
                "select NEW com.sct.descubriendoturuta.model.APIUsuario(r.id, r.genero) from Usuario r order by r.id desc");
        return query.getResultList();
    }
}