package com.roshka.service; import com.roshka.modelo.Beneficio; import com.roshka.modelo.Birthday; import com.roshka.repositorio.BeneficioRepository; import com.roshka.repositorio.BirthdayRepository; import org.apache.hc.client5.http.classic.methods.HttpPost; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; import org.apache.hc.client5.http.impl.classic.HttpClients; import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.ParseException; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.io.entity.StringEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import java.io.IOException; import java.util.Date; import java.util.List; import java.util.Optional; @Configuration @EnableScheduling public class Scheduler { @Autowired BirthdayRepository birthdayRepository; @Autowired BeneficioRepository beneficioRepository; @PersistenceContext private EntityManager entityManager; @Scheduled(cron = "0 0 8 * * MON-FRI") // @Scheduled(cron = "0 * * * * *") public void cumples() { String url = "https://hooks.slack.com/services/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"; // todo verificar que no sea feriado // mandar los cumpleaños que fueron sabado y domingo // si hoy es lunes buscar si hubo cumpleaños sabado y domingo // Verificar el cumpleaños de quien es List cumples = birthdayRepository.findAllByFecha(new Date()); for (Birthday cumple : cumples) { String json = "{\n" + "\"blocks\": [\n" + "{\n" + "\"type\": \"section\",\n" + "\"text\": {\n" + "\"type\": \"mrkdwn\",\n" + "\"text\": \"Buenos días \n Hoy está de cumpleaños *" + cumple.getNombreCompleto() + "* <@" + cumple.getIdSlack() + ">. 🥳 ¡Que los cumplas muy feliz te desea la Roshka! Que en la vida siempre encuentres razones para sonreír 🥳\",\n" + "}" + "}," + "{" + "\"type\": \"divider\"" + "}," + "{\n" + "\"type\": \"image\",\n" + "\"title\": {\n" + "\"type\": \"plain_text\",\n" + "\"text\": \"" + cumple.getNombreCompleto() + "\"\n" + "},\n" + "\"block_id\": \"image4\",\n" + "\"image_url\": \"http://placekitten.com/500/500\",\n" + "\"alt_text\": \"An incredibly cute kitten.\"\n" + "}\n" + "]\n" + "}" + ""; String result = null; HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON)); try (CloseableHttpClient httpclient = HttpClients.createDefault()) { try (CloseableHttpResponse response = httpclient.execute(httpPost)) { result = EntityUtils.toString(response.getEntity()); } } catch (IOException | ParseException e) { e.printStackTrace(); } } } @Scheduled(cron = "0 0 15 * * FRI") // @Scheduled(cron = "0 * * * * *") public void beneficios() { String url = "https://hooks.slack.com/services/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"; // Traer random Beneficio beneficio = getRandomBeneficio(); if (beneficio != null) { String json = "{" + "\"blocks\": [" + "{" + "\"type\": \"section\"," + "\"text\": {" + "\"type\": \"mrkdwn\"," + "\"text\": \"Te recordamos uno de nuestros beneficios \"" + "}" + "}," + "{" + "\"type\": \"header\"," + "\"text\": {" + "\"type\": \"plain_text\"," + "\"text\": \"" + beneficio.getTitulo() + "\"," + "\"emoji\": true" + "}" + "}," + "{" + "\"type\": \"section\"," + "\"text\": {" + "\"type\": \"mrkdwn\"," + "\"text\": \"" + beneficio.getDescripcion() + "\"" + "}" + "}" + "]" + "}"; String result = null; HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON)); try (CloseableHttpClient httpclient = HttpClients.createDefault()) { try (CloseableHttpResponse response = httpclient.execute(httpPost)) { result = EntityUtils.toString(response.getEntity()); } } catch (IOException | ParseException e) { e.printStackTrace(); } } } public Beneficio getRandomBeneficio() { String query = "SELECT o.id FROM Beneficio o ORDER BY random()"; Query q = entityManager.createQuery(query); q.setMaxResults(1); Optional beneficio = beneficioRepository.findById((Long) q.getSingleResult()); if (beneficio.isPresent()) { return beneficio.get(); } return null; } }