From 4f5236fa82e7aa0411eef02e28638d2b4985ba8e Mon Sep 17 00:00:00 2001
From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.>
Date: Thu, 19 Jun 2025 12:21:04 +0100
Subject: [PATCH] work with audit

---
 .../java/stirling/software/common/aop/AutoJobAspect.java   | 3 +++
 .../stirling/software/proprietary/audit/AuditAspect.java   | 1 +
 .../software/proprietary/audit/ControllerAuditAspect.java  | 7 +++++++
 3 files changed, 11 insertions(+)

diff --git a/common/src/main/java/stirling/software/common/aop/AutoJobAspect.java b/common/src/main/java/stirling/software/common/aop/AutoJobAspect.java
index b5a038e23..085ba29ee 100644
--- a/common/src/main/java/stirling/software/common/aop/AutoJobAspect.java
+++ b/common/src/main/java/stirling/software/common/aop/AutoJobAspect.java
@@ -10,6 +10,7 @@ import org.springframework.beans.BeanUtils;
 
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.*;
+import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -28,6 +29,7 @@ import stirling.software.common.service.JobExecutorService;
 @Component
 @RequiredArgsConstructor
 @Slf4j
+@Order(0)  // Highest precedence - executes before audit aspects
 public class AutoJobAspect {
 
     private static final Duration RETRY_BASE_DELAY = Duration.ofMillis(100);
@@ -40,6 +42,7 @@ public class AutoJobAspect {
     @Around("@annotation(autoJobPostMapping)")
     public Object wrapWithJobExecution(
             ProceedingJoinPoint joinPoint, AutoJobPostMapping autoJobPostMapping) {
+        // This aspect will run before any audit aspects due to @Order(0)
         // Extract parameters from the request and annotation
         boolean async = Boolean.parseBoolean(request.getParameter("async"));
         long timeout = autoJobPostMapping.timeout();
diff --git a/proprietary/src/main/java/stirling/software/proprietary/audit/AuditAspect.java b/proprietary/src/main/java/stirling/software/proprietary/audit/AuditAspect.java
index 8b9d46103..0b8e019e8 100644
--- a/proprietary/src/main/java/stirling/software/proprietary/audit/AuditAspect.java
+++ b/proprietary/src/main/java/stirling/software/proprietary/audit/AuditAspect.java
@@ -26,6 +26,7 @@ import stirling.software.proprietary.service.AuditService;
 @Component
 @Slf4j
 @RequiredArgsConstructor
+@org.springframework.core.annotation.Order(10) // Lower precedence (higher number) - executes after AutoJobAspect
 public class AuditAspect {
 
     private final AuditService auditService;
diff --git a/proprietary/src/main/java/stirling/software/proprietary/audit/ControllerAuditAspect.java b/proprietary/src/main/java/stirling/software/proprietary/audit/ControllerAuditAspect.java
index 740555439..d41a7e661 100644
--- a/proprietary/src/main/java/stirling/software/proprietary/audit/ControllerAuditAspect.java
+++ b/proprietary/src/main/java/stirling/software/proprietary/audit/ControllerAuditAspect.java
@@ -36,6 +36,7 @@ import stirling.software.proprietary.service.AuditService;
 @Component
 @Slf4j
 @RequiredArgsConstructor
+@org.springframework.core.annotation.Order(10) // Lower precedence (higher number) - executes after AutoJobAspect
 public class ControllerAuditAspect {
 
     private final AuditService auditService;
@@ -76,6 +77,12 @@ public class ControllerAuditAspect {
     public Object auditPatchMethod(ProceedingJoinPoint joinPoint) throws Throwable {
         return auditController(joinPoint, "PATCH");
     }
+    
+    /** Intercept all methods with AutoJobPostMapping annotation */
+    @Around("@annotation(stirling.software.common.annotations.AutoJobPostMapping)")
+    public Object auditAutoJobMethod(ProceedingJoinPoint joinPoint) throws Throwable {
+        return auditController(joinPoint, "POST");
+    }
 
     private Object auditController(ProceedingJoinPoint joinPoint, String httpMethod)
             throws Throwable {