package com.geored.servicios.impl; import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; import javax.ejb.Local; import javax.ejb.Stateless; import javax.mail.MessagingException; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.Response; import negocios.GestionEmpresas; import negocios.GestionUsuarios; import negocios.excepciones.ContactoYaExiste; import negocios.excepciones.EntidadNoExiste; import negocios.impl.mailSender.MailSender; import persistencia.Usuario; import com.geored.servicios.ServicioUsuarios; import com.geored.servicios.impl.auth.GestionTokens; import com.geored.servicios.impl.gcm.GestionDevices; import com.geored.servicios.impl.inte.GestionIntegracion; import com.geored.servicios.json.CategoriaJSON; import com.geored.servicios.json.EventoJSON; import com.geored.servicios.json.InvitacionJSON; import com.geored.servicios.json.NotificacionJSON; import com.geored.servicios.json.OfertaJSON; import com.geored.servicios.json.PagoJSON; import com.geored.servicios.json.PosicionJSON; import com.geored.servicios.json.UsuarioJSON; import com.geored.servicios.json.converters.ConvertidorEntityJSON; @Local @Stateless public class ImplServicioUsuarios implements ServicioUsuarios { @EJB GestionUsuarios gestionUsuarios; @EJB GestionEmpresas gestionEmpresas; @EJB GestionTokens gestionTokens; @EJB GestionDevices gestionDevices; @EJB GestionIntegracion gestionIntegracion; @EJB ConvertidorEntityJSON convertidorEntityJSON; @Override public List<UsuarioJSON> buscarContactos(final String userToken, final HttpServletResponse response, final String query) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); return convertidorEntityJSON.convert(gestionUsuarios.buscarUsuario(query)); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } return null; } @Override public List<UsuarioJSON> getContactos(final String userToken, final HttpServletResponse response) { if (gestionTokens.validarToken(userToken)) { try { response.setStatus(Response.Status.OK.getStatusCode()); List<Usuario> listTmp = gestionUsuarios.getContactos(gestionTokens.getIdUsuario(userToken)); List<Usuario> onLine = new ArrayList<Usuario>(); String idDevice; for (Usuario usuario : listTmp) { idDevice = gestionDevices.getIdDevice(usuario.getId()); if (idDevice != null && !idDevice.isEmpty()) { onLine.add(usuario); } } return convertidorEntityJSON.convert(onLine); } catch (EntidadNoExiste e) { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } return null; } @Override public UsuarioJSON getUsuario(final String userToken, final HttpServletResponse response) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); return convertidorEntityJSON.convertir(gestionUsuarios.obtenerUsario(gestionTokens.getIdUsuario(userToken))); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } return null; } @Override public void invitarContacto(final String userToken, final HttpServletResponse response, final int idContacto) { if (gestionTokens.validarToken(userToken)) { try { response.setStatus(Response.Status.OK.getStatusCode()); gestionUsuarios.invitarContacto(gestionTokens.getIdUsuario(userToken), idContacto); } catch (EntidadNoExiste e) { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } catch (ContactoYaExiste e) { response.setStatus(Response.Status.CONFLICT.getStatusCode()); } } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public List<InvitacionJSON> getInvitaciones(final String userToken, final HttpServletResponse response) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); try { return convertidorEntityJSON.convert(gestionUsuarios.getInvitaciones(gestionTokens.getIdUsuario(userToken))); } catch (EntidadNoExiste e) { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } } response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); return null; } @Override public void aceptarInvitacion(final String userToken, final HttpServletResponse response, final int idContacto) { if (gestionTokens.validarToken(userToken)) { try { response.setStatus(Response.Status.OK.getStatusCode()); gestionUsuarios.aceptarInvitacion(gestionTokens.getIdUsuario(userToken), idContacto); } catch (EntidadNoExiste e) { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } catch (ContactoYaExiste e) { response.setStatus(Response.Status.CONFLICT.getStatusCode()); } } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public void registrarUsuario(final HttpServletResponse response, final String password, final UsuarioJSON usuarioJSON) { response.setStatus(Response.Status.OK.getStatusCode()); Usuario usuario = convertidorEntityJSON.convertir(usuarioJSON); usuario.setPassword(password); gestionUsuarios.registrarUsuario(usuario); } @Override public void modificarUsuario(final String userToken, final HttpServletResponse response, final String password, final UsuarioJSON usuarioJSON) { if(gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); Usuario usuario = convertidorEntityJSON.convertir(usuarioJSON); usuario.setPassword(password); try { gestionUsuarios.modificarUsuario(usuario); } catch (EntidadNoExiste e) { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public void agregarCategorias(final String userToken, final HttpServletResponse response, final List<Integer> categorias) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); gestionUsuarios.agregarCategorias(gestionTokens.getIdUsuario(userToken), categorias); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public void borrarCategorias(final String userToken, final HttpServletResponse response, final List<Integer> categorias) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); gestionUsuarios.borrarCategorias(gestionTokens.getIdUsuario(userToken), categorias); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public List<CategoriaJSON> getCategorias(final String userToken, final HttpServletResponse response) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); return convertidorEntityJSON.convert(gestionUsuarios.obtenerCategorias()); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } return new ArrayList<CategoriaJSON>(); } @Override public List<NotificacionJSON> getNotificaciones(final String userToken, final HttpServletResponse response, final PosicionJSON posicion) { if (gestionTokens.validarToken(userToken)) { gestionDevices.putPosicion(gestionTokens.getIdUsuario(userToken), posicion); response.setStatus(Response.Status.OK.getStatusCode()); try { List<NotificacionJSON> notificaciones = convertidorEntityJSON.convert(gestionUsuarios.getNotificaciones(gestionTokens.getIdUsuario(userToken), posicion.getLatitud(), posicion.getLongitud(), posicion.getDistancia())); notificaciones.addAll(gestionIntegracion.getLocalesIntegracion(posicion.getLatitud(), posicion.getLongitud(), posicion.getDistancia())); notificaciones.addAll(gestionIntegracion.getSitioInteresIntegracion(posicion.getLatitud(), posicion.getLongitud(), posicion.getDistancia())); return notificaciones; } catch (EntidadNoExiste e) { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } return null; } @Override public void comprarOferta(final String userToken, final HttpServletResponse response, final Integer idOferta, final PagoJSON pagoJSON) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); try { gestionUsuarios.comprarOferta(gestionTokens.getIdUsuario(userToken), idOferta, convertidorEntityJSON.convertir(pagoJSON)); } catch (EntidadNoExiste e) { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } } else{ response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public List<OfertaJSON> getOfertasLocal(final String userToken, final HttpServletResponse response, final Integer idLocal) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); List<OfertaJSON> ofertas = convertidorEntityJSON.convert(gestionUsuarios.obtenerOfertasLocalUsuario(idLocal, gestionTokens.getIdUsuario(userToken))); PosicionJSON posicion = gestionDevices.getPosicion(gestionTokens.getIdUsuario(userToken)); if (posicion != null) { List<OfertaJSON> ofertasExt = gestionIntegracion.getOfertasIntegracion(posicion.getLatitud(), posicion.getLongitud(), posicion.getDistancia(), idLocal); for (OfertaJSON ofertaJSON : ofertasExt) { ofertaJSON.setId(-1); } ofertas.addAll(ofertasExt); } return ofertas; } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } return null; } @Override public EventoJSON getEvento(final String userToken, final HttpServletResponse response, final Integer idEvento) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); return convertidorEntityJSON.convertir(gestionEmpresas.obtenerEvento(idEvento)); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } return null; } @Override public void enviarInvitacionExterna(final String userToken, final HttpServletResponse response, final String email) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); try { MailSender mailSender = new MailSender(email, "Invitacion a Geored-uy", "Hola, un amigo nos a dicho " + "que talvez te interese unirte a Geored-uy! Cuando tengamos esto subido a Google Play te ponemos " + "la URL."); mailSender.send(); } catch (MessagingException e) { response.setStatus(Response.Status.CONFLICT.getStatusCode()); } } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } }