feat: add GitHub webhook DTOs with snake_case mapping and header constants
Replace GitHubIssueLabeledWebhookRequest with GitHubIssueRequest. Add number and repository fields for dedup key construction. Add Jackson @JsonNaming/@JsonIgnoreProperties for GitHub payload deserialisation. Add GitHubWebhookHeader constants for webhook header names.
This commit is contained in:
-7
@@ -1,7 +0,0 @@
|
|||||||
package com.onixbyte.deltaforceguide.domain.dto;
|
|
||||||
|
|
||||||
public record GitHubIssueLabeledWebhookRequest(
|
|
||||||
String action,
|
|
||||||
GitHubWebhookIssue issue
|
|
||||||
) {
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.onixbyte.deltaforceguide.domain.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public record GitHubIssueRequest(
|
||||||
|
String action,
|
||||||
|
GitHubWebhookIssue issue,
|
||||||
|
GitHubWebhookRepository repository
|
||||||
|
) {
|
||||||
|
}
|
||||||
@@ -1,10 +1,17 @@
|
|||||||
package com.onixbyte.deltaforceguide.domain.dto;
|
package com.onixbyte.deltaforceguide.domain.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public record GitHubWebhookIssue(
|
public record GitHubWebhookIssue(
|
||||||
String url,
|
String url,
|
||||||
Long id,
|
Long id,
|
||||||
|
Long number,
|
||||||
String title,
|
String title,
|
||||||
String body,
|
String body,
|
||||||
List<GitHubWebhookLabel> labels
|
List<GitHubWebhookLabel> labels
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
package com.onixbyte.deltaforceguide.domain.dto;
|
package com.onixbyte.deltaforceguide.domain.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public record GitHubWebhookLabel(
|
public record GitHubWebhookLabel(
|
||||||
String name
|
String name
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.onixbyte.deltaforceguide.domain.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||||
|
|
||||||
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
public record GitHubWebhookRepository(
|
||||||
|
String fullName
|
||||||
|
) {
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.onixbyte.deltaforceguide.shared;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class lists the header names that GitHub sends in webhook requests.
|
||||||
|
*
|
||||||
|
* @author siujamo
|
||||||
|
*/
|
||||||
|
public class GitHubWebhookHeader {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The unique identifier of the webhook.
|
||||||
|
*/
|
||||||
|
public static final String HOOK_ID = "X-GitHub-Hook-ID";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the event that triggered the delivery.
|
||||||
|
*/
|
||||||
|
public static final String EVENT = "X-GitHub-Event";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A globally unique identifier (GUID) to identify the event.
|
||||||
|
*/
|
||||||
|
public static final String DELIVERY = "X-GitHub-Delivery";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This header is sent if the webhook is configured with a {@code secret}. This is the HMAC hex
|
||||||
|
* digest of the request body, and is generated using the SHA-1 hash function and the secret as
|
||||||
|
* the HMAC {@code key}. {@code X-Hub-Signature} is provided for compatibility with
|
||||||
|
* existing integrations. We recommend that you use the more secure
|
||||||
|
* {@code X-Hub-Signature-256} instead.
|
||||||
|
*/
|
||||||
|
public static final String SIGNATURE = "X-Hub-Signature";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This header is sent if the webhook is configured with a {@code secret}. This is the HMAC hex
|
||||||
|
* digest of the request body, and is generated using the SHA-256 hash function and the
|
||||||
|
* {@code secret} as the HMAC key. For more information, see <a href="https://docs.github.com/en/webhooks/using-webhooks/securing-your-webhooks"
|
||||||
|
* >Validating webhook deliveries</a>.
|
||||||
|
*/
|
||||||
|
public static final String SIGNATURE_256 = "X-Hub-Signature-256";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This header will always have the prefix {@code GitHub-Hookshot/}.
|
||||||
|
*/
|
||||||
|
public static final String USER_AGENT = "User-Agent";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of resource where the webhook was created.
|
||||||
|
*/
|
||||||
|
public static final String INSTALLATION_TARGET_TYPE = "X-GitHub-Hook-Installation-Target-Type";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The unique identifier of the resource where the webhook was created.
|
||||||
|
*/
|
||||||
|
public static final String INSTALLATION_TARGET_ID = "X-GitHub-Hook-Installation-Target-ID";
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user