From 8d24b6082da8012ebe1589ad9b2789338a5678d8 Mon Sep 17 00:00:00 2001 From: siujamo Date: Thu, 28 May 2026 15:18:25 +0800 Subject: [PATCH] feat: add gitlab webhook http entrypoint --- .../controller/WebhookController.java | 20 +++++++++ .../domain/dto/GitLabWebhookRequest.java | 45 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/main/java/com/onixbyte/deltaforceguide/controller/WebhookController.java create mode 100644 src/main/java/com/onixbyte/deltaforceguide/domain/dto/GitLabWebhookRequest.java diff --git a/src/main/java/com/onixbyte/deltaforceguide/controller/WebhookController.java b/src/main/java/com/onixbyte/deltaforceguide/controller/WebhookController.java new file mode 100644 index 0000000..4ca9a66 --- /dev/null +++ b/src/main/java/com/onixbyte/deltaforceguide/controller/WebhookController.java @@ -0,0 +1,20 @@ +package com.onixbyte.deltaforceguide.controller; + +import com.onixbyte.deltaforceguide.domain.dto.GitLabWebhookRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/webhook") +public class WebhookController { + + private static final Logger log = LoggerFactory.getLogger(WebhookController.class); + + @PostMapping("/gitlab") + public void gitlabWebhook( + @RequestBody GitLabWebhookRequest request + ) { + log.info("request={}", request); + } +} diff --git a/src/main/java/com/onixbyte/deltaforceguide/domain/dto/GitLabWebhookRequest.java b/src/main/java/com/onixbyte/deltaforceguide/domain/dto/GitLabWebhookRequest.java new file mode 100644 index 0000000..b48ec75 --- /dev/null +++ b/src/main/java/com/onixbyte/deltaforceguide/domain/dto/GitLabWebhookRequest.java @@ -0,0 +1,45 @@ +package com.onixbyte.deltaforceguide.domain.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; + +import java.time.OffsetDateTime; +import java.util.List; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +@JsonIgnoreProperties(ignoreUnknown = true) +public record GitLabWebhookRequest( + String objectKind, + String eventType, + GitLabWebhookObjectAttributes objectAttributes +) { + + @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) + @JsonIgnoreProperties(ignoreUnknown = true) + public record GitLabWebhookLabel( + Long id, + String title, + @JsonProperty("color") + String colour, + Long projectId, + String createdAt, + String updatedAt, + Boolean template, + String description, + String type, + Long groupId + ) {} + + @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) + @JsonIgnoreProperties(ignoreUnknown = true) + public record GitLabWebhookObjectAttributes( + Long id, + String title, + String description, + List labels + ) {} + + +}