diff --git a/src/main/java/org/jboss/draw/Lottery.java b/src/main/java/org/jboss/draw/Lottery.java index 455dbb1..ec253fe 100644 --- a/src/main/java/org/jboss/draw/Lottery.java +++ b/src/main/java/org/jboss/draw/Lottery.java @@ -34,7 +34,7 @@ public class Lottery { private Mailer mailer; private static final Pattern USERNAME_FROM_EMAIL = Pattern.compile("\\s*(\\b[a-zA-Z0-9._%+-]+)@"); - public static final String EMAIL_SUBJECT = "Subject"; + public static final String EMAIL_SUBJECT = "This week's lottery issues picked for You"; private static final String EMAIL_BODY = """ Hi %s, @@ -100,7 +100,7 @@ public static String createEmailText(String email, List issues) { Matcher matcher = USERNAME_FROM_EMAIL.matcher(email); String username = matcher.find() ? matcher.group(1) : "Somebody"; return EMAIL_BODY.formatted(username, - issues.stream().map(issue -> issue.getUri().toString()).collect(Collectors.joining("\n")), + issues.stream().map(issue -> issue.getBrowseUri().toString()).collect(Collectors.joining("\n")), configFileUrl()); } diff --git a/src/main/java/org/jboss/draw/entities/Issue.java b/src/main/java/org/jboss/draw/entities/Issue.java index fddce01..1960664 100644 --- a/src/main/java/org/jboss/draw/entities/Issue.java +++ b/src/main/java/org/jboss/draw/entities/Issue.java @@ -1,23 +1,29 @@ package org.jboss.draw.entities; import com.atlassian.jira.rest.client.api.domain.BasicComponent; +import io.quarkus.logging.Log; import org.jboss.processing.state.SingleIssueState; import java.net.URI; +import java.net.URISyntaxException; import java.util.List; import java.util.stream.StreamSupport; public class Issue { + private static final String BROWSE_URI = "https://issues.redhat.com/browse/"; + private final Long id; private final URI uri; private final String project; private final List components; + private final String key; private Participant assignee; public Issue(SingleIssueState issue) { this(issue.getId(), issue.getSelf(), issue.getProject().getKey(), + issue.getKey(), issue.getComponents().stream().map(BasicComponent::getName).toList()); } @@ -25,13 +31,15 @@ public Issue(com.atlassian.jira.rest.client.api.domain.Issue issue) { this(issue.getId(), issue.getSelf(), issue.getProject().getKey(), + issue.getKey(), StreamSupport.stream(issue.getComponents().spliterator(), false).map(BasicComponent::getName).toList()); } - public Issue(Long id, URI uri, String project, List components) { + public Issue(Long id, URI uri, String project, String key, List components) { this.id = id; this.uri = uri; this.project = project; + this.key = key; this.components = components; } @@ -43,6 +51,15 @@ public URI getUri() { return uri; } + public URI getBrowseUri() { + try { + return new URI(BROWSE_URI + key); + } catch (URISyntaxException e) { + Log.errorf(e, "Unable to construct browse URI for key %s", key); + throw new RuntimeException(e); + } + } + public String getProject() { return project; }