package com.xfestudio.xfeservermanager.api.audit;
import com.xfestudio.xfeservermanager.api.command.CommandSourceKind;
import com.xfestudio.xfeservermanager.api.util.ApiChecks;
import java.time.Instant;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
/** Append-only management audit entry. Maps must already be redacted before persistence. */
public record AuditEvent(
UUID eventId,
Instant timestamp,
String actorId,
String actorDisplayName,
CommandSourceKind source,
String action,
String target,
String reason,
Map<String, String> beforeValues,
Map<String, String> afterValues,
Long policyVersion,
String requestId,
AuditOutcome outcome,
long durationMillis,
Map<String, String> metadata
) {
public AuditEvent {
Objects.requireNonNull(eventId, "eventId");
Objects.requireNonNull(timestamp, "timestamp");
actorId = ApiChecks.notBlank(actorId, "actorId");
actorDisplayName = ApiChecks.notBlank(actorDisplayName, "actorDisplayName");
Objects.requireNonNull(source, "source");
action = ApiChecks.notBlank(action, "action");
target = target == null ? "" : target;
reason = reason == null ? "" : reason;
beforeValues = ApiChecks.immutableMap(beforeValues, "beforeValues");
afterValues = ApiChecks.immutableMap(afterValues, "afterValues");
if (policyVersion != null && policyVersion < 0) {
throw new IllegalArgumentException("policyVersion must be non-negative");
}
requestId = requestId == null ? "" : requestId;
Objects.requireNonNull(outcome, "outcome");
if (durationMillis < 0) {
throw new IllegalArgumentException("durationMillis must be non-negative");
}
metadata = ApiChecks.immutableMap(metadata, "metadata");
}
}
package com.xfestudio.xfeservermanager.api.audit;
import com.xfestudio.xfeservermanager.api.command.CommandSourceKind;
import com.xfestudio.xfeservermanager.api.util.ApiChecks;
import java.time.Instant;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
/** Append-only management audit entry. Maps must already be redacted before persistence. */
public record AuditEvent(
UUID eventId,
Instant timestamp,
String actorId,
String actorDisplayName,
CommandSourceKind source,
String action,
String target,
String reason,
Map<String, String> beforeValues,
Map<String, String> afterValues,
Long policyVersion,
String requestId,
AuditOutcome outcome,
long durationMillis,
Map<String, String> metadata
) {
public AuditEvent {
Objects.requireNonNull(eventId, "eventId");
Objects.requireNonNull(timestamp, "timestamp");
actorId = ApiChecks.notBlank(actorId, "actorId");
actorDisplayName = ApiChecks.notBlank(actorDisplayName, "actorDisplayName");
Objects.requireNonNull(source, "source");
action = ApiChecks.notBlank(action, "action");
target = target == null ? "" : target;
reason = reason == null ? "" : reason;
beforeValues = ApiChecks.immutableMap(beforeValues, "beforeValues");
afterValues = ApiChecks.immutableMap(afterValues, "afterValues");
if (policyVersion != null && policyVersion < 0) {
throw new IllegalArgumentException("policyVersion must be non-negative");
}
requestId = requestId == null ? "" : requestId;
Objects.requireNonNull(outcome, "outcome");
if (durationMillis < 0) {
throw new IllegalArgumentException("durationMillis must be non-negative");
}
metadata = ApiChecks.immutableMap(metadata, "metadata");
}
}