Refactor API response descriptors to use resource classes
- Updated response descriptors in various endpoints to utilize specific resource classes instead of generic JsonResponse. - Changed response types for friendship, guild, party, and support issue endpoints to their respective resource classes. - Incremented version number in manifest.json to 0.5.3 for the new changes.
This commit is contained in:
@@ -28,8 +28,15 @@ src/main/java/net/kewwbec/network/generated/api/v1/
|
||||
ControlPlaneApiV1.java
|
||||
shared/
|
||||
announcements/
|
||||
assets/
|
||||
audit/
|
||||
batch/
|
||||
configs/
|
||||
entitlements/
|
||||
gamepermissions/
|
||||
gameplay/
|
||||
health/
|
||||
hub/
|
||||
infrastructure/
|
||||
integrations/
|
||||
moderation/
|
||||
@@ -39,6 +46,7 @@ src/main/java/net/kewwbec/network/generated/api/v1/
|
||||
serviceaccounts/
|
||||
social/
|
||||
support/
|
||||
worlds/
|
||||
```
|
||||
|
||||
What that means:
|
||||
@@ -108,6 +116,8 @@ Start with:
|
||||
- [Getting Started](docs/wiki/Getting-Started.md)
|
||||
- [Batched API Calls](docs/wiki/Batched-API-Calls.md)
|
||||
- [API Response Storage](docs/wiki/API-Response-Storage.md)
|
||||
- [Control Plane Client](docs/wiki/Control-Plane-Client.md)
|
||||
- [Generated SDK](docs/wiki/Generated-SDK.md)
|
||||
|
||||
## Project structure
|
||||
|
||||
@@ -117,6 +127,8 @@ core-network/
|
||||
src/main/java/
|
||||
net/kewwbec/network/
|
||||
network.java
|
||||
batch/
|
||||
cache/
|
||||
generated/api/v1/...
|
||||
src/main/resources/
|
||||
manifest.json
|
||||
|
||||
+5
-16
@@ -47,21 +47,14 @@ javadoc {
|
||||
|
||||
// Adds the Hytale server as a build dependency, allowing you to reference and
|
||||
// compile against their code without bundling it. When a local install is
|
||||
// present we compile and run against that jar directly so there is no dependency
|
||||
// on the Hytale Maven repositories. In CI (no local install) the Maven artifact
|
||||
// is used together with an explicit Gson dep (bundled in the server at runtime).
|
||||
// present, we still use its jar for launching the server in IDE run configs.
|
||||
dependencies {
|
||||
compileOnly("com.hypixel.hytale:Server:$hytale_build")
|
||||
if (hasHytaleHome) {
|
||||
def serverJar = files("$hytaleHome/install/$patchline/package/game/latest/Server/HytaleServer.jar")
|
||||
compileOnly(serverJar)
|
||||
runtimeOnly(serverJar)
|
||||
} else {
|
||||
compileOnly("com.hypixel.hytale:Server:$hytale_build")
|
||||
compileOnly("com.google.gson:gson:2.11.0")
|
||||
runtimeOnly(files("$hytaleHome/install/$patchline/package/game/latest/Server/HytaleServer.jar"))
|
||||
}
|
||||
testImplementation("org.junit.jupiter:junit-jupiter:5.11.4")
|
||||
testImplementation("com.google.code.gson:gson:2.11.0")
|
||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
||||
|
||||
// Your dependencies here
|
||||
}
|
||||
|
||||
repositories {
|
||||
@@ -107,10 +100,6 @@ tasks.named('build') {
|
||||
dependsOn 'shadowJar'
|
||||
}
|
||||
|
||||
tasks.named('test') {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
if (hasHytaleHome) {
|
||||
// Create the working directory to run the server if it does not already exist.
|
||||
def serverRunDir = file("$projectDir/run")
|
||||
|
||||
@@ -72,6 +72,19 @@ CompletableFuture<ServerProfile> profile =
|
||||
cache.forcePull(serverProfileCall, CacheContext.shared());
|
||||
```
|
||||
|
||||
Invalidate a cached value:
|
||||
|
||||
```java
|
||||
cache.invalidate(serverProfileCall, CacheContext.shared());
|
||||
```
|
||||
|
||||
Prewarm after an event-driven invalidation:
|
||||
|
||||
```java
|
||||
CompletableFuture<ServerProfile> profile =
|
||||
cache.prewarm(serverProfileCall, CacheContext.shared());
|
||||
```
|
||||
|
||||
## Player Storage
|
||||
|
||||
Player storage requires explicit context. Core-network does not infer player identity from the API URI.
|
||||
@@ -94,6 +107,36 @@ CompletableFuture<PlayerSessionProfile> profile =
|
||||
|
||||
`NetworkPlugin.setup()` registers `NetworkApiDataComponent` with the entity store registry.
|
||||
|
||||
## Reactive Player Hooks
|
||||
|
||||
`ReactivePlayerCacheHooks` gives ECS/event systems a small public surface for cache invalidation and prewarming when control-plane state changes.
|
||||
|
||||
Entry point:
|
||||
|
||||
```java
|
||||
ReactivePlayerCacheHooks hooks =
|
||||
NetworkPlugin.client().reactivePlayerCache();
|
||||
```
|
||||
|
||||
Use it from player lifecycle or control-plane event handlers:
|
||||
|
||||
```java
|
||||
PlayerCacheContext context = new PlayerCacheContext(playerId, playerRef, entityStore);
|
||||
|
||||
hooks.onPlayerJoin(context);
|
||||
hooks.onPermissionChanged(context);
|
||||
hooks.onSanctionChanged(context);
|
||||
hooks.onNotificationCreated(context);
|
||||
```
|
||||
|
||||
The hook currently covers:
|
||||
|
||||
- `players/{player}/moderation/sanction-snapshot`
|
||||
- `players/{player}/authorization/permission-snapshot`
|
||||
- `players/{player}/notifications`
|
||||
|
||||
`onPlayerJoin(...)` force-refreshes sanction and permission snapshots and prewarms notifications. The change-specific hooks invalidate the stale player entry and immediately pull the new value.
|
||||
|
||||
## Freshness Policies
|
||||
|
||||
Auto-refresh when older than max age:
|
||||
@@ -190,6 +233,11 @@ public final class MyAssetCacheAdapter implements AssetStoreCacheAdapter {
|
||||
public void write(ApiCacheKey key, ApiCacheEntry entry, CacheContext context) {
|
||||
// Convert entry payload into concrete asset and load/write through AssetStore.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(ApiCacheKey key, CacheContext context) {
|
||||
// Remove or mark the mapped asset entry stale when invalidated.
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -207,6 +255,13 @@ CachedApiCall<JsonObject> call = CachedApiCall
|
||||
.build();
|
||||
```
|
||||
|
||||
The assets domain now exposes typed generated methods that can feed asset-store-backed cache calls, including:
|
||||
|
||||
```java
|
||||
NetworkPlugin.client().assets().getActivePack(packKey);
|
||||
NetworkPlugin.client().assets().getPackVersionFiles(versionId);
|
||||
```
|
||||
|
||||
## Batching Behavior
|
||||
|
||||
When `ControlPlaneClient.batchingEnabled()` is true, cache pulls and pushes use `BatchClient`.
|
||||
|
||||
@@ -14,6 +14,7 @@ client.presence(); // PresenceClient
|
||||
client.players(); // PlayersClient
|
||||
client.batch(); // BatchClient
|
||||
client.cache(); // ApiDataCacheClient
|
||||
client.reactivePlayerCache(); // ReactivePlayerCacheHooks
|
||||
```
|
||||
|
||||
## Handwritten Domain Clients
|
||||
@@ -35,10 +36,32 @@ client.presence().shutdown(instanceId, "restart");
|
||||
`PlayersClient`
|
||||
|
||||
```java
|
||||
PlayerSessionProfile profile = client.players().getSessionProfile(playerId);
|
||||
List<PlayerEntitlement> entitlements = client.players().getEntitlements(playerId);
|
||||
PlayerSessionProfile profile = client.players().sessionProfile(playerId);
|
||||
List<PlayerEntitlement> entitlements = client.players().entitlementsIndex(playerId);
|
||||
```
|
||||
|
||||
`AssetsClient`
|
||||
|
||||
```java
|
||||
AssetPackVersion active = client.assets().getActivePack(packKey);
|
||||
List<AssetPackVersionFile> files = client.assets().getPackVersionFiles(active.id());
|
||||
```
|
||||
|
||||
## Reactive Player Cache
|
||||
|
||||
`reactivePlayerCache()` is intended for Hytale ECS/event handlers that know player state changed and need cache freshness now, not after a TTL expires.
|
||||
|
||||
```java
|
||||
PlayerCacheContext context = new PlayerCacheContext(playerId, playerRef, entityStore);
|
||||
|
||||
client.reactivePlayerCache().onPlayerJoin(context);
|
||||
client.reactivePlayerCache().onPermissionChanged(context);
|
||||
client.reactivePlayerCache().onSanctionChanged(context);
|
||||
client.reactivePlayerCache().onNotificationCreated(context);
|
||||
```
|
||||
|
||||
These hooks invalidate and prewarm the player-scoped cache entries for permission snapshots, moderation sanction snapshots, and notifications.
|
||||
|
||||
## Error Handling
|
||||
|
||||
Transport errors use checked `ControlPlaneException` subclasses:
|
||||
|
||||
@@ -17,6 +17,7 @@ These files include:
|
||||
- middleware metadata
|
||||
- request field descriptors
|
||||
- response type descriptors
|
||||
- typed domain clients and DTOs for generated API resources
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -44,6 +45,18 @@ String uri = PathBuilder.resolve(
|
||||
);
|
||||
```
|
||||
|
||||
Use generated domain clients for direct typed calls:
|
||||
|
||||
```java
|
||||
PlayerPermissionSnapshot permissions =
|
||||
NetworkPlugin.client().players().authorizationPermissionSnapshot(playerId);
|
||||
|
||||
AssetPackVersion activePack =
|
||||
NetworkPlugin.client().assets().getActivePack(packKey);
|
||||
```
|
||||
|
||||
Some generated clients include hand-friendly aliases for route-shaped names. For example, the assets domain exposes `getActivePack(...)` and `getPackVersionFiles(...)` over the generated active-pack and version-files endpoints.
|
||||
|
||||
## Regeneration
|
||||
|
||||
The source of truth is `../core-control-plane`.
|
||||
|
||||
@@ -9,6 +9,7 @@ It provides:
|
||||
- generated API endpoint descriptors from `core-control-plane`
|
||||
- batched HTTP calls through `/api/v1/batch`
|
||||
- API response storage policies for runtime, player, and asset-store-backed data
|
||||
- reactive player cache hooks for ECS/event-driven invalidation and prewarming
|
||||
|
||||
## Pages
|
||||
|
||||
@@ -40,3 +41,4 @@ net.kewwbec.network
|
||||
- Treat `core-control-plane` as the API owner.
|
||||
- Use batching for repeated or concurrent calls that can tolerate async completion.
|
||||
- Use cache policies when plugin code needs shared ownership of API freshness or push timing.
|
||||
- Use `reactivePlayerCache()` from ECS/event handlers when player cache state must react immediately to permission, sanction, notification, or join events.
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
# The current version of your project. Please use semantic versioning!
|
||||
version=0.0.2
|
||||
version=0.5.3
|
||||
|
||||
# The group ID used for maven publishing. Usually the same as your package name
|
||||
# but not the same as your plugin group!
|
||||
@@ -22,7 +22,7 @@ patchline=release
|
||||
# The exact Hytale build to compile against. Use the build string from the
|
||||
# launcher (format YYYY.MM.DD-<hash>) so Gradle pulls the matching server jar
|
||||
# for your selected patchline.
|
||||
hytale_build=2026.01.27-734d39026
|
||||
hytale_build=0.5.3
|
||||
|
||||
# Determines if the development server should also load mods from the user's
|
||||
# standard mods folder. This lets you test mods by installing them where a
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
rootProject.name = 'ExamplePlugin'
|
||||
rootProject.name = 'core-network'
|
||||
|
||||
@@ -3,6 +3,7 @@ package net.kewwbec.network;
|
||||
import net.kewwbec.network.auth.ApiToken;
|
||||
import net.kewwbec.network.batch.BatchClient;
|
||||
import net.kewwbec.network.cache.ApiDataCacheClient;
|
||||
import net.kewwbec.network.cache.ReactivePlayerCacheHooks;
|
||||
import net.kewwbec.network.generated.api.v1.announcements.AnnouncementsClient;
|
||||
import net.kewwbec.network.generated.api.v1.assets.AssetsClient;
|
||||
import net.kewwbec.network.generated.api.v1.audit.AuditClient;
|
||||
@@ -53,6 +54,7 @@ public final class ControlPlaneClient {
|
||||
private final WorldsClient worlds;
|
||||
private final BatchClient batch;
|
||||
private final ApiDataCacheClient cache;
|
||||
private final ReactivePlayerCacheHooks reactivePlayerCache;
|
||||
private final boolean batchingEnabled;
|
||||
private final Duration batchFlushInterval;
|
||||
private final int maxBatchSize;
|
||||
@@ -87,6 +89,7 @@ public final class ControlPlaneClient {
|
||||
this.maxBatchSize = builder.maxBatchSize;
|
||||
this.batchEndpoint = builder.batchEndpoint;
|
||||
this.cache = new ApiDataCacheClient(http, batch, this::batchingEnabled);
|
||||
this.reactivePlayerCache = new ReactivePlayerCacheHooks(cache);
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
@@ -116,6 +119,7 @@ public final class ControlPlaneClient {
|
||||
public WorldsClient worlds() { return worlds; }
|
||||
public BatchClient batch() { return batch; }
|
||||
public ApiDataCacheClient cache() { return cache; }
|
||||
public ReactivePlayerCacheHooks reactivePlayerCache() { return reactivePlayerCache; }
|
||||
public boolean batchingEnabled() { return batchingEnabled; }
|
||||
public Duration batchFlushInterval() { return batchFlushInterval; }
|
||||
public int maxBatchSize() { return maxBatchSize; }
|
||||
|
||||
@@ -8,5 +8,7 @@ interface ApiCacheStore {
|
||||
|
||||
void put(ApiCacheKey key, ApiCacheEntry entry, CacheContext context);
|
||||
|
||||
void remove(ApiCacheKey key, CacheContext context);
|
||||
|
||||
Collection<StoredCacheEntry> entries();
|
||||
}
|
||||
|
||||
@@ -60,6 +60,26 @@ public final class ApiDataCacheClient {
|
||||
return pullAndStore(call, context, key, store, store.get(key, context));
|
||||
}
|
||||
|
||||
public <T> CompletableFuture<T> prewarm(CachedApiCall<T> call, CacheContext context) {
|
||||
return forcePull(call, context);
|
||||
}
|
||||
|
||||
public void invalidate(CachedApiCall<?> call, CacheContext context) {
|
||||
registerIfNeeded(call);
|
||||
ApiCacheKey key = key(call, context);
|
||||
storeFor(call).remove(key, context);
|
||||
touchedContexts.remove(key);
|
||||
}
|
||||
|
||||
public boolean invalidate(String callId, CacheContext context) {
|
||||
CachedApiCall<?> call = registeredCalls.get(callId);
|
||||
if (call == null) {
|
||||
return false;
|
||||
}
|
||||
invalidate(call, context);
|
||||
return true;
|
||||
}
|
||||
|
||||
public <T> void updateLocal(CachedApiCall<T> call, CacheContext context, T value) {
|
||||
registerIfNeeded(call);
|
||||
ApiCacheKey key = key(call, context);
|
||||
|
||||
@@ -21,6 +21,11 @@ final class AssetStoreApiCacheStore implements ApiCacheStore {
|
||||
adapter.write(key, entry, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(ApiCacheKey key, CacheContext context) {
|
||||
adapter.remove(key, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<StoredCacheEntry> entries() {
|
||||
return adapter.entries().stream()
|
||||
|
||||
@@ -10,6 +10,9 @@ public interface AssetStoreCacheAdapter {
|
||||
|
||||
void write(ApiCacheKey key, ApiCacheEntry entry, CacheContext context);
|
||||
|
||||
default void remove(ApiCacheKey key, CacheContext context) {
|
||||
}
|
||||
|
||||
default Collection<StoredAssetCacheEntry> entries() {
|
||||
return java.util.List.of();
|
||||
}
|
||||
|
||||
@@ -48,6 +48,10 @@ public final class NetworkApiDataComponent implements Component<EntityStore> {
|
||||
entries.put(key, value);
|
||||
}
|
||||
|
||||
public void remove(String key) {
|
||||
entries.remove(key);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public Component<EntityStore> clone() {
|
||||
|
||||
@@ -27,6 +27,15 @@ final class PlayerApiCacheStore implements ApiCacheStore {
|
||||
playerContext.store().putComponent(playerContext.ref(), NetworkApiDataComponent.componentType(), component);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(ApiCacheKey key, CacheContext context) {
|
||||
PlayerCacheContext playerContext = playerContext(context);
|
||||
NetworkApiDataComponent component = playerContext.store()
|
||||
.ensureAndGetComponent(playerContext.ref(), NetworkApiDataComponent.componentType());
|
||||
component.remove(key.encoded());
|
||||
playerContext.store().putComponent(playerContext.ref(), NetworkApiDataComponent.componentType(), component);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<StoredCacheEntry> entries() {
|
||||
return java.util.List.of();
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
package net.kewwbec.network.cache;
|
||||
|
||||
import net.kewwbec.network.ControlPlaneClient;
|
||||
import net.kewwbec.network.generated.api.v1.players.AuthorizationPermissionSnapshotEndpoint;
|
||||
import net.kewwbec.network.generated.api.v1.players.ModerationSanctionSnapshotEndpoint;
|
||||
import net.kewwbec.network.generated.api.v1.players.NotificationsIndexEndpoint;
|
||||
import net.kewwbec.network.generated.api.v1.players.PlayerNotification;
|
||||
import net.kewwbec.network.generated.api.v1.players.PlayerPermissionSnapshot;
|
||||
import net.kewwbec.network.generated.api.v1.players.PlayerSanctionSnapshot;
|
||||
import net.kewwbec.network.http.PathBuilder;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public final class ReactivePlayerCacheHooks {
|
||||
public static final String SANCTION_SNAPSHOT_PREFIX = "players.moderation.sanction-snapshot";
|
||||
public static final String PERMISSION_SNAPSHOT_PREFIX = "players.authorization.permission-snapshot";
|
||||
public static final String NOTIFICATIONS_INDEX_PREFIX = "players.notifications.index";
|
||||
|
||||
private final ApiDataCacheClient cache;
|
||||
|
||||
public ReactivePlayerCacheHooks(ControlPlaneClient client) {
|
||||
this(Objects.requireNonNull(client, "client must not be null").cache());
|
||||
}
|
||||
|
||||
public ReactivePlayerCacheHooks(ApiDataCacheClient cache) {
|
||||
this.cache = Objects.requireNonNull(cache, "cache must not be null");
|
||||
}
|
||||
|
||||
public CompletableFuture<Void> onPlayerJoin(PlayerCacheContext context) {
|
||||
return CompletableFuture.allOf(
|
||||
refreshSanctionSnapshot(context),
|
||||
refreshPermissionSnapshot(context),
|
||||
prewarmNotifications(context)
|
||||
);
|
||||
}
|
||||
|
||||
public CompletableFuture<PlayerSanctionSnapshot> onSanctionChanged(PlayerCacheContext context) {
|
||||
return refreshSanctionSnapshot(context);
|
||||
}
|
||||
|
||||
public CompletableFuture<PlayerPermissionSnapshot> onPermissionChanged(PlayerCacheContext context) {
|
||||
return refreshPermissionSnapshot(context);
|
||||
}
|
||||
|
||||
public CompletableFuture<PlayerNotification[]> onNotificationCreated(PlayerCacheContext context) {
|
||||
return refreshNotifications(context);
|
||||
}
|
||||
|
||||
public void invalidateSanctionSnapshot(PlayerCacheContext context) {
|
||||
cache.invalidate(sanctionSnapshotCall(context.contextKey()), context);
|
||||
}
|
||||
|
||||
public void invalidatePermissionSnapshot(PlayerCacheContext context) {
|
||||
cache.invalidate(permissionSnapshotCall(context.contextKey()), context);
|
||||
}
|
||||
|
||||
public void invalidateNotifications(PlayerCacheContext context) {
|
||||
cache.invalidate(notificationsIndexCall(context.contextKey()), context);
|
||||
}
|
||||
|
||||
public CompletableFuture<PlayerSanctionSnapshot> refreshSanctionSnapshot(PlayerCacheContext context) {
|
||||
CachedApiCall<PlayerSanctionSnapshot> call = sanctionSnapshotCall(context.contextKey());
|
||||
cache.invalidate(call, context);
|
||||
return cache.prewarm(call, context);
|
||||
}
|
||||
|
||||
public CompletableFuture<PlayerPermissionSnapshot> refreshPermissionSnapshot(PlayerCacheContext context) {
|
||||
CachedApiCall<PlayerPermissionSnapshot> call = permissionSnapshotCall(context.contextKey());
|
||||
cache.invalidate(call, context);
|
||||
return cache.prewarm(call, context);
|
||||
}
|
||||
|
||||
public CompletableFuture<PlayerNotification[]> refreshNotifications(PlayerCacheContext context) {
|
||||
CachedApiCall<PlayerNotification[]> call = notificationsIndexCall(context.contextKey());
|
||||
cache.invalidate(call, context);
|
||||
return cache.prewarm(call, context);
|
||||
}
|
||||
|
||||
public CompletableFuture<PlayerNotification[]> prewarmNotifications(PlayerCacheContext context) {
|
||||
return cache.getOrPull(notificationsIndexCall(context.contextKey()), context);
|
||||
}
|
||||
|
||||
public static CachedApiCall<PlayerSanctionSnapshot> sanctionSnapshotCall(String playerId) {
|
||||
String player = requirePlayerId(playerId);
|
||||
return CachedApiCall.builder(PlayerSanctionSnapshot.class)
|
||||
.id(callId(SANCTION_SNAPSHOT_PREFIX, player))
|
||||
.endpoint(ModerationSanctionSnapshotEndpoint.VALUE)
|
||||
.method("GET")
|
||||
.uri(() -> PathBuilder.resolve(ModerationSanctionSnapshotEndpoint.VALUE.uri(), "player", player))
|
||||
.storageTarget(StorageTarget.PLAYER)
|
||||
.pullPolicy(PullPolicy.maxAge(Duration.ofSeconds(30)))
|
||||
.manualPushOnly()
|
||||
.build();
|
||||
}
|
||||
|
||||
public static CachedApiCall<PlayerPermissionSnapshot> permissionSnapshotCall(String playerId) {
|
||||
String player = requirePlayerId(playerId);
|
||||
return CachedApiCall.builder(PlayerPermissionSnapshot.class)
|
||||
.id(callId(PERMISSION_SNAPSHOT_PREFIX, player))
|
||||
.endpoint(AuthorizationPermissionSnapshotEndpoint.VALUE)
|
||||
.method("GET")
|
||||
.uri(() -> PathBuilder.resolve(AuthorizationPermissionSnapshotEndpoint.VALUE.uri(), "player", player))
|
||||
.storageTarget(StorageTarget.PLAYER)
|
||||
.pullPolicy(PullPolicy.maxAge(Duration.ofSeconds(30)))
|
||||
.manualPushOnly()
|
||||
.build();
|
||||
}
|
||||
|
||||
public static CachedApiCall<PlayerNotification[]> notificationsIndexCall(String playerId) {
|
||||
String player = requirePlayerId(playerId);
|
||||
return CachedApiCall.builder(PlayerNotification[].class)
|
||||
.id(callId(NOTIFICATIONS_INDEX_PREFIX, player))
|
||||
.endpoint(NotificationsIndexEndpoint.VALUE)
|
||||
.method("GET")
|
||||
.uri(() -> PathBuilder.resolve(NotificationsIndexEndpoint.VALUE.uri(), "player", player))
|
||||
.storageTarget(StorageTarget.PLAYER)
|
||||
.pullPolicy(PullPolicy.maxAge(Duration.ofSeconds(15)))
|
||||
.manualPushOnly()
|
||||
.build();
|
||||
}
|
||||
|
||||
public static String callId(String prefix, String playerId) {
|
||||
return prefix + ":" + requirePlayerId(playerId);
|
||||
}
|
||||
|
||||
private static String requirePlayerId(String playerId) {
|
||||
if (playerId == null || playerId.isBlank()) {
|
||||
throw new IllegalArgumentException("playerId must not be blank");
|
||||
}
|
||||
return playerId;
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,11 @@ final class RuntimeApiCacheStore implements ApiCacheStore {
|
||||
entries.put(key, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(ApiCacheKey key, CacheContext context) {
|
||||
entries.remove(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<StoredCacheEntry> entries() {
|
||||
return entries.entrySet().stream()
|
||||
|
||||
@@ -28,7 +28,7 @@ public final class ControlPlaneApiV1 {
|
||||
|
||||
private static final String API_VERSION = "v1";
|
||||
private static final String BASE_PATH = "/api/v1";
|
||||
private static final String FINGERPRINT = "38972c4e6c8020ff35de5b63ad1dc0465d9f8a3c6d65736991e77759bd369db2";
|
||||
private static final String FINGERPRINT = "e918a5e4ab91e8ed17150e80ee593fd4400d2d54a994b28cf7281bef22eacd73";
|
||||
private static final int DOMAIN_COUNT = 22;
|
||||
private static final int ENDPOINT_COUNT = 140;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class ServerTemplatesStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:server-templates.write"),
|
||||
List.of(),
|
||||
new RequestDescriptor("App\\Domains\\Infrastructure\\Http\\Requests\\StoreServerTemplateRequest", "body", List.of(new RequestField("region_key", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:regions,key"))), new RequestField("key", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:150"), new RuleDescriptor("string", null, "regex:/^[a-z0-9._-]+$/"), new RuleDescriptor("string", null, "unique:server_templates,key"))), new RequestField("name", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:120"))), new RequestField("category", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("lifecycle_strategy", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"manual\",\"static\",\"elastic\""))), new RequestField("version", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:80"))), new RequestField("max_players", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "integer"), new RuleDescriptor("string", null, "min:0"))), new RequestField("is_active", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "boolean"))), new RequestField("startup_world_key", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:150"), new RuleDescriptor("string", null, "exists:worlds,key"))), new RequestField("asset_pack_keys", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "array"))), new RequestField("asset_pack_keys.*", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "distinct"), new RuleDescriptor("string", null, "exists:asset_packs,key"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Infrastructure\\Resources\\ServerTemplateResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class ServerTemplatesUpdateEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:server-templates.write"),
|
||||
List.of(new RouteParameter("serverTemplate", new TypeDescriptor("App\\Domains\\Infrastructure\\Models\\ServerTemplate", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Infrastructure\\Http\\Requests\\UpdateServerTemplateRequest", "body", List.of(new RequestField("region_key", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:regions,key"))), new RequestField("key", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:150"), new RuleDescriptor("string", null, "regex:/^[a-z0-9._-]+$/"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\Unique", "unique:server_templates,key,NULL,id"))), new RequestField("name", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:120"))), new RequestField("category", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("lifecycle_strategy", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"manual\",\"static\",\"elastic\""))), new RequestField("version", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:80"))), new RequestField("max_players", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "integer"), new RuleDescriptor("string", null, "min:0"))), new RequestField("is_active", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "boolean"))), new RequestField("startup_world_key", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:150"), new RuleDescriptor("string", null, "exists:worlds,key"))), new RequestField("asset_pack_keys", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "array"))), new RequestField("asset_pack_keys.*", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "distinct"), new RuleDescriptor("string", null, "exists:asset_packs,key"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Infrastructure\\Resources\\ServerTemplateResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public final class StoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:integrations.write"),
|
||||
List.of(),
|
||||
new RequestDescriptor("App\\Domains\\Integrations\\Http\\Requests\\StoreIntegrationRequest", "body", List.of(new RequestField("key", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"), new RuleDescriptor("string", null, "unique:integrations,key"))), new RequestField("name", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("driver", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"discord\",\"website\",\"webhook\",\"commerce\",\"analytics\",\"internal_tool\""))), new RequestField("direction", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"inbound\",\"outbound\",\"bidirectional\""))), new RequestField("status", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"active\",\"paused\",\"error\",\"retired\""))), new RequestField("endpoint", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("secret_reference", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("last_sync_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Integrations\\Resources\\IntegrationResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public final class UpdateEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:integrations.write"),
|
||||
List.of(new RouteParameter("integration", new TypeDescriptor("App\\Domains\\Integrations\\Models\\Integration", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Integrations\\Http\\Requests\\UpdateIntegrationRequest", "body", List.of(new RequestField("name", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("driver", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"discord\",\"website\",\"webhook\",\"commerce\",\"analytics\",\"internal_tool\""))), new RequestField("direction", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"inbound\",\"outbound\",\"bidirectional\""))), new RequestField("status", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"active\",\"paused\",\"error\",\"retired\""))), new RequestField("endpoint", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("secret_reference", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("last_sync_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("last_error_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("last_error_summary", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Integrations\\Resources\\IntegrationResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class CasesReopenEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:moderation.cases.write"),
|
||||
List.of(new RouteParameter("moderationCase", new TypeDescriptor("App\\Domains\\Moderation\\Models\\ModerationCase", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Moderation\\Http\\Requests\\ReopenModerationCaseRequest", "body", List.of(new RequestField("reason", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"))), new RequestField("status", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"open\",\"under_review\""))), new RequestField("summary", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("assigned_to_player_id", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("reopened_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Moderation\\Resources\\ModerationCaseResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class CasesStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:moderation.cases.write"),
|
||||
List.of(),
|
||||
new RequestDescriptor("App\\Domains\\Moderation\\Http\\Requests\\StoreModerationCaseRequest", "body", List.of(new RequestField("case_type", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"report\",\"investigation\",\"appeal\""))), new RequestField("priority", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"low\",\"normal\",\"high\",\"urgent\""))), new RequestField("subject_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("reported_by_player_id", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("assigned_to_player_id", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("title", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("summary", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("incident_occurred_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Moderation\\Resources\\ModerationCaseResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class CasesUpdateEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:moderation.cases.write"),
|
||||
List.of(new RouteParameter("moderationCase", new TypeDescriptor("App\\Domains\\Moderation\\Models\\ModerationCase", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Moderation\\Http\\Requests\\UpdateModerationCaseRequest", "body", List.of(new RequestField("status", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"open\",\"under_review\",\"resolved\",\"closed\""))), new RequestField("priority", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"low\",\"normal\",\"high\",\"urgent\""))), new RequestField("assigned_to_player_id", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("summary", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("resolution_summary", List.of(new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\RequiredIf", ""), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("last_reviewed_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("resolved_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Moderation\\Resources\\ModerationCaseResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class NotificationsReadEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:notifications.write"),
|
||||
List.of(new RouteParameter("player", new TypeDescriptor("App\\Domains\\Identity\\Models\\Player", false, false)), new RouteParameter("notification", new TypeDescriptor("App\\Domains\\Notifications\\Models\\PlayerNotification", false, false))),
|
||||
null,
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Notifications\\Resources\\PlayerNotificationResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class NotificationsStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:notifications.write"),
|
||||
List.of(new RouteParameter("player", new TypeDescriptor("App\\Domains\\Identity\\Models\\Player", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Notifications\\Http\\Requests\\StorePlayerNotificationRequest", "body", List.of(new RequestField("type", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("title", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("body", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("priority", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"low\",\"normal\",\"high\""))), new RequestField("sent_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Notifications\\Resources\\PlayerNotificationResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class ConfigVersionsStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:plugins.deploy.write"),
|
||||
List.of(new RouteParameter("plugin", new TypeDescriptor("App\\Domains\\Plugins\\Models\\Plugin", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Plugins\\Http\\Requests\\StorePluginConfigVersionRequest", "body", List.of(new RequestField("version", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("format", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("content_driver", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("content_reference", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:2048"))), new RequestField("checksum", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("released_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Plugins\\Resources\\PluginConfigVersionResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class DeploymentsRollbackEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:plugins.deploy.write"),
|
||||
List.of(new RouteParameter("pluginDeployment", new TypeDescriptor("App\\Domains\\Plugins\\Models\\PluginDeployment", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Plugins\\Http\\Requests\\RollbackPluginDeploymentRequest", "body", List.of(new RequestField("reason", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"))), new RequestField("rolled_back_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Plugins\\Resources\\PluginDeploymentResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class DeploymentsStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:plugins.deploy.write"),
|
||||
List.of(new RouteParameter("plugin", new TypeDescriptor("App\\Domains\\Plugins\\Models\\Plugin", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Plugins\\Http\\Requests\\StorePluginDeploymentRequest", "body", List.of(new RequestField("plugin_version_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:plugin_versions,id"))), new RequestField("plugin_config_version_id", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:plugin_config_versions,id"))), new RequestField("server_template_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:server_templates,id"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Plugins\\Resources\\PluginDeploymentResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class InstancesMatchesResultsStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:matches.result.write", "service.instance:instance"),
|
||||
List.of(new RouteParameter("instance", new TypeDescriptor("App\\Domains\\Infrastructure\\Models\\ServerInstance", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Gameplay\\Http\\Requests\\StoreMatchResultRequest", "body", List.of(new RequestField("match_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("game_mode", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("status", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"completed\",\"abandoned\",\"cancelled\""))), new RequestField("started_at", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "date"))), new RequestField("ended_at", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "date"), new RuleDescriptor("string", null, "after_or_equal:started_at"))), new RequestField("replay_driver", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("replay_reference", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:2048"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))), new RequestField("participants", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "array"), new RuleDescriptor("string", null, "min:1"), new RuleDescriptor("string", null, "max:100"))), new RequestField("participants.*.player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("participants.*.team_key", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:100"))), new RequestField("participants.*.placement", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "integer"), new RuleDescriptor("string", null, "min:1"))), new RequestField("participants.*.outcome", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"win\",\"loss\",\"draw\",\"abandoned\""))), new RequestField("participants.*.score", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "integer"))), new RequestField("participants.*.stats", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Gameplay\\Resources\\MatchSessionResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class FriendshipsAcceptEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("friendship", new TypeDescriptor("App\\Domains\\Social\\Models\\PlayerFriendship", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\AcceptFriendshipRequest", "body", List.of(new RequestField("accepting_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("accepted_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\FriendshipResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class FriendshipsStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\StoreFriendshipRequest", "body", List.of(new RequestField("requester_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("addressee_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "different:requester_player_id"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("requested_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\FriendshipResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class GuildInvitesAcceptEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guildInvite", new TypeDescriptor("App\\Domains\\Social\\Models\\GuildInvite", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\AcceptGuildInviteRequest", "body", List.of(new RequestField("accepting_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("accepted_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class GuildInvitesCancelEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guildInvite", new TypeDescriptor("App\\Domains\\Social\\Models\\GuildInvite", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\CancelGuildInviteRequest", "body", List.of(new RequestField("cancelled_by_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("cancelled_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildInviteResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class GuildInvitesDeclineEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guildInvite", new TypeDescriptor("App\\Domains\\Social\\Models\\GuildInvite", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\DeclineGuildInviteRequest", "body", List.of(new RequestField("declining_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("declined_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildInviteResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class GuildsInvitesStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guild", new TypeDescriptor("App\\Domains\\Social\\Models\\Guild", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\StoreGuildInviteRequest", "body", List.of(new RequestField("invited_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("invited_by_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("message", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:1000"))), new RequestField("invited_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("expires_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildInviteResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class GuildsKicksStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guild", new TypeDescriptor("App\\Domains\\Social\\Models\\Guild", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\KickGuildMemberRequest", "body", List.of(new RequestField("acting_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("target_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("kicked_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public final class GuildsLeaveEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guild", new TypeDescriptor("App\\Domains\\Social\\Models\\Guild", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\LeaveGuildRequest", "body", List.of(new RequestField("player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("left_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class GuildsMembersStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guild", new TypeDescriptor("App\\Domains\\Social\\Models\\Guild", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\StoreGuildMemberRequest", "body", List.of(new RequestField("player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("invited_by_player_id", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("role", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"leader\",\"officer\",\"member\""))), new RequestField("joined_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class GuildsOwnershipTransferEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("guild", new TypeDescriptor("App\\Domains\\Social\\Models\\Guild", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\TransferGuildOwnershipRequest", "body", List.of(new RequestField("acting_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("new_owner_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("transferred_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public final class GuildsStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\StoreGuildRequest", "body", List.of(new RequestField("owner_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("slug", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:80"), new RuleDescriptor("string", null, "regex:/^[a-z0-9-]+$/"), new RuleDescriptor("string", null, "unique:guilds,slug"))), new RequestField("name", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:120"))), new RequestField("tag", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:12"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\Unique", "unique:guilds,tag,NULL,id"))), new RequestField("max_members", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "integer"), new RuleDescriptor("string", null, "between:2,200"))), new RequestField("motd", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("founded_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\GuildResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class PartiesInvitesStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("party", new TypeDescriptor("App\\Domains\\Social\\Models\\Party", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\StorePartyInviteRequest", "body", List.of(new RequestField("invited_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("invited_by_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("message", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:1000"))), new RequestField("invited_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("expires_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyInviteResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class PartiesKicksStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("party", new TypeDescriptor("App\\Domains\\Social\\Models\\Party", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\KickPartyMemberRequest", "body", List.of(new RequestField("acting_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("target_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("kicked_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class PartiesLeadershipTransferEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("party", new TypeDescriptor("App\\Domains\\Social\\Models\\Party", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\TransferPartyLeadershipRequest", "body", List.of(new RequestField("acting_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("new_leader_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("transferred_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public final class PartiesLeaveEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("party", new TypeDescriptor("App\\Domains\\Social\\Models\\Party", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\LeavePartyRequest", "body", List.of(new RequestField("player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("left_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class PartiesMembersStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("party", new TypeDescriptor("App\\Domains\\Social\\Models\\Party", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\StorePartyMemberRequest", "body", List.of(new RequestField("player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("invited_by_player_id", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("joined_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public final class PartiesStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\StorePartyRequest", "body", List.of(new RequestField("leader_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("max_members", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "integer"), new RuleDescriptor("string", null, "between:2,12"))), new RequestField("formed_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class PartyInvitesAcceptEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("partyInvite", new TypeDescriptor("App\\Domains\\Social\\Models\\PartyInvite", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\AcceptPartyInviteRequest", "body", List.of(new RequestField("accepting_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("accepted_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class PartyInvitesCancelEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("partyInvite", new TypeDescriptor("App\\Domains\\Social\\Models\\PartyInvite", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\CancelPartyInviteRequest", "body", List.of(new RequestField("cancelled_by_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("cancelled_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyInviteResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class PartyInvitesDeclineEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:social.write"),
|
||||
List.of(new RouteParameter("partyInvite", new TypeDescriptor("App\\Domains\\Social\\Models\\PartyInvite", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Social\\Http\\Requests\\DeclinePartyInviteRequest", "body", List.of(new RequestField("declining_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("declined_at", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:500"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Social\\Resources\\PartyInviteResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class IssuesAssignmentsStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:support.issues.write"),
|
||||
List.of(new RouteParameter("supportIssue", new TypeDescriptor("App\\Domains\\Support\\Models\\SupportIssue", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Support\\Http\\Requests\\ChangeSupportIssueAssignmentRequest", "body", List.of(new RequestField("assigned_to_player_id", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("reason", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"))), new RequestField("assigned_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Support\\Resources\\SupportIssueResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class IssuesMessagesStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:support.issues.write"),
|
||||
List.of(new RouteParameter("supportIssue", new TypeDescriptor("App\\Domains\\Support\\Models\\SupportIssue", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Support\\Http\\Requests\\StoreSupportIssueMessageRequest", "body", List.of(new RequestField("visibility", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"requester\",\"internal\""))), new RequestField("body", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"))), new RequestField("sent_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Support\\Resources\\SupportIssueResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class IssuesReopenEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:support.issues.write"),
|
||||
List.of(new RouteParameter("supportIssue", new TypeDescriptor("App\\Domains\\Support\\Models\\SupportIssue", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Support\\Http\\Requests\\ReopenSupportIssueRequest", "body", List.of(new RequestField("reason", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"))), new RequestField("status", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"open\",\"in_progress\",\"waiting_on_player\""))), new RequestField("summary", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("assigned_to_player_id", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("reopened_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Support\\Resources\\SupportIssueResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public final class IssuesStoreEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:support.issues.write"),
|
||||
List.of(),
|
||||
new RequestDescriptor("App\\Domains\\Support\\Http\\Requests\\StoreSupportIssueRequest", "body", List.of(new RequestField("subject_player_id", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("assigned_to_player_id", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("category", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"account\",\"purchase\",\"bug_report\",\"appeal\",\"other\""))), new RequestField("channel", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"player_portal\",\"email\",\"discord\",\"in_game\",\"internal\""))), new RequestField("priority", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"low\",\"normal\",\"high\",\"urgent\""))), new RequestField("title", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "max:255"))), new RequestField("summary", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("initial_message", List.of(new RuleDescriptor("string", null, "required"), new RuleDescriptor("string", null, "string"))), new RequestField("message_visibility", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"requester\",\"internal\""))), new RequestField("opened_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "array"))), new RequestField("initial_message_metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Support\\Resources\\SupportIssueResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public final class IssuesUpdateEndpoint {
|
||||
List.of("api", "auth:sanctum", "service.abilities:support.issues.write"),
|
||||
List.of(new RouteParameter("supportIssue", new TypeDescriptor("App\\Domains\\Support\\Models\\SupportIssue", false, false))),
|
||||
new RequestDescriptor("App\\Domains\\Support\\Http\\Requests\\UpdateSupportIssueRequest", "body", List.of(new RequestField("status", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"open\",\"in_progress\",\"waiting_on_player\",\"resolved\",\"closed\""))), new RequestField("priority", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\In", "in:\"low\",\"normal\",\"high\",\"urgent\""))), new RequestField("assigned_to_player_id", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"), new RuleDescriptor("string", null, "exists:players,id"))), new RequestField("summary", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("resolution_summary", List.of(new RuleDescriptor("object", "Illuminate\\Validation\\Rules\\RequiredIf", ""), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "string"))), new RequestField("resolved_at", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "date"))), new RequestField("metadata", List.of(new RuleDescriptor("string", null, "sometimes"), new RuleDescriptor("string", null, "nullable"), new RuleDescriptor("string", null, "array"))))),
|
||||
new ResponseDescriptor("json_response", new TypeDescriptor("Illuminate\\Http\\JsonResponse", false, false))
|
||||
new ResponseDescriptor("json_resource", new TypeDescriptor("App\\Domains\\Support\\Resources\\SupportIssueResource", false, false))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"Group": "net.kewwbec",
|
||||
"Name": "core-network",
|
||||
"Version": "0.0.2",
|
||||
"Version": "0.5.3",
|
||||
"Description": "KweebecNetwork control-plane SDK for Hytale server plugins",
|
||||
"Authors": [
|
||||
{
|
||||
@@ -9,7 +9,7 @@
|
||||
}
|
||||
],
|
||||
"Website": "https://kewwbec.net",
|
||||
"ServerVersion": "2026.02.17-255364b8e",
|
||||
"ServerVersion": "0.5.3",
|
||||
"Dependencies": {
|
||||
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user