feat(scum): rebuild plugin-owned management data

This commit is contained in:
npc0-hue
2026-08-15 12:43:09 +08:00
parent 92b1159cc8
commit 65353cf269
113 changed files with 3116 additions and 8058 deletions
-45
View File
@@ -1,45 +0,0 @@
package model
import "time"
// GameGiftCatalog is the model-first editable, server-version-fenced gift draft.
type GameGiftCatalog struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
Name string `json:"name" db:"name"`
GameVersion string `json:"gameVersion" db:"game_version"`
LatestRevisionID string `json:"latestRevisionId" db:"latest_revision_id"`
CreatedBy string `json:"createdBy" db:"created_by"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
}
func (GameGiftCatalog) TableName() string { return "game_gift_catalogs" }
// GameGiftRevision is an immutable gift item snapshot.
type GameGiftRevision struct {
ID string `json:"id" db:"id"`
CatalogID string `json:"catalogId" db:"catalog_id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
Revision int `json:"revision" db:"revision"`
GameVersion string `json:"gameVersion" db:"game_version"`
PublishedBy string `json:"publishedBy" db:"published_by"`
PublishedAt time.Time `json:"publishedAt" db:"published_at"`
}
func (GameGiftRevision) TableName() string { return "game_gift_revisions" }
// GameGiftGrant records a directed frozen gift lifecycle without raw game commands.
type GameGiftGrant struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
RevisionID string `json:"revisionId" db:"revision_id"`
GamePlayerRecordID string `json:"gamePlayerRecordId" db:"game_player_record_id"`
Status string `json:"status" db:"status"`
DeliveryCommandID string `json:"deliveryCommandId" db:"delivery_command_id"`
NotificationCommandID string `json:"notificationCommandId" db:"notification_command_id"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
}
func (GameGiftGrant) TableName() string { return "game_gift_grants" }
-40
View File
@@ -1,40 +0,0 @@
package model
import "time"
// GameMapTrackPoint is the safe, map-normalized and retention-bounded trajectory table shape.
type GameMapTrackPoint struct {
ID string `json:"id" db:"id"`
EventID string `json:"eventId" db:"event_id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
MapID string `json:"mapId" db:"map_id"`
MapVersion string `json:"mapVersion" db:"map_version"`
EntityKind string `json:"entityKind" db:"entity_kind"`
EntityID string `json:"entityId" db:"entity_id"`
GamePlayerRecordID string `json:"gamePlayerRecordId,omitempty" db:"game_player_record_id"`
MapX float64 `json:"mapX" db:"map_x"`
MapY float64 `json:"mapY" db:"map_y"`
Source string `json:"source" db:"source"`
OccurredAt time.Time `json:"occurredAt" db:"occurred_at"`
CollectedAt time.Time `json:"collectedAt" db:"collected_at"`
ExpiresAt time.Time `json:"expiresAt" db:"expires_at"`
}
func (GameMapTrackPoint) TableName() string { return "game_map_track_points" }
// GamePlayerVehicleSegment is a server-local, typed ride association; it contains no vehicle storage details.
type GamePlayerVehicleSegment struct {
ID string `json:"id" db:"id"`
EventID string `json:"eventId" db:"event_id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
GamePlayerRecordID string `json:"gamePlayerRecordId" db:"game_player_record_id"`
GamePlayerID string `json:"gamePlayerId" db:"game_player_id"`
VehicleID string `json:"vehicleId" db:"vehicle_id"`
MapID string `json:"mapId" db:"map_id"`
MapVersion string `json:"mapVersion" db:"map_version"`
StartedAt time.Time `json:"startedAt" db:"started_at"`
EndedAt time.Time `json:"endedAt,omitempty" db:"ended_at"`
ExpiresAt time.Time `json:"expiresAt" db:"expires_at"`
}
func (GamePlayerVehicleSegment) TableName() string { return "game_player_vehicle_segments" }
-27
View File
@@ -1,27 +0,0 @@
package model
import "time"
// GamePlayerStatePatch is the model-first audit shape for one approved typed player-state change.
type GamePlayerStatePatch struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
GamePlayerRecordID string `json:"gamePlayerRecordId" db:"game_player_record_id"`
GamePlayerID string `json:"gamePlayerId" db:"game_player_id"`
GameVersion string `json:"gameVersion" db:"game_version"`
ExpectedStateVersion string `json:"expectedStateVersion" db:"expected_state_version"`
SafetyWindow string `json:"safetyWindow" db:"safety_window"`
Reason string `json:"reason" db:"reason"`
RequesterID string `json:"requesterId" db:"requester_id"`
ApproverID string `json:"approverId" db:"approver_id"`
Status string `json:"status" db:"status"`
BridgeCommandID string `json:"bridgeCommandId" db:"bridge_command_id"`
ExecutionSummary string `json:"executionSummary" db:"execution_summary"`
ConfirmedStateVersion string `json:"confirmedStateVersion" db:"confirmed_state_version"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
ApprovedAt time.Time `json:"approvedAt" db:"approved_at"`
CompletedAt time.Time `json:"completedAt" db:"completed_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
}
func (GamePlayerStatePatch) TableName() string { return "game_player_state_patches" }
-72
View File
@@ -1,72 +0,0 @@
package model
import "time"
// GamePlayer is the model-first table shape for an independent server-local game identity.
type GamePlayer struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
GamePlayerID string `json:"gamePlayerId" db:"game_player_id"`
DisplayName string `json:"displayName" db:"display_name"`
FirstSeenAt time.Time `json:"firstSeenAt" db:"first_seen_at"`
LastSeenAt time.Time `json:"lastSeenAt" db:"last_seen_at"`
LastEventAt time.Time `json:"lastEventAt" db:"last_event_at"`
CreatedAt time.Time `json:"createdAt" db:"created_at"`
UpdatedAt time.Time `json:"updatedAt" db:"updated_at"`
}
func (GamePlayer) TableName() string { return "game_players" }
type GamePlayerAlias struct {
ID string `json:"id" db:"id"`
GamePlayerRecordID string `json:"gamePlayerRecordId" db:"game_player_record_id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
Alias string `json:"alias" db:"alias"`
FirstSeenAt time.Time `json:"firstSeenAt" db:"first_seen_at"`
LastSeenAt time.Time `json:"lastSeenAt" db:"last_seen_at"`
}
func (GamePlayerAlias) TableName() string { return "game_player_aliases" }
type GamePlayerSession struct {
ID string `json:"id" db:"id"`
GamePlayerRecordID string `json:"gamePlayerRecordId" db:"game_player_record_id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
SourceSessionID string `json:"sourceSessionId" db:"source_session_id"`
StartedAt time.Time `json:"startedAt" db:"started_at"`
EndedAt time.Time `json:"endedAt,omitempty" db:"ended_at"`
EndReason string `json:"endReason,omitempty" db:"end_reason"`
LastEventAt time.Time `json:"lastEventAt" db:"last_event_at"`
}
func (GamePlayerSession) TableName() string { return "game_player_sessions" }
// GameAccessAttempt intentionally has no raw address field; correlation is irreversible and server-scoped.
type GameAccessAttempt struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
GamePlayerRecordID string `json:"gamePlayerRecordId" db:"game_player_record_id"`
EventID string `json:"eventId" db:"event_id"`
OccurredAt time.Time `json:"occurredAt" db:"occurred_at"`
Outcome string `json:"outcome" db:"outcome"`
Reason string `json:"reason" db:"reason"`
NetworkCorrelationKey string `json:"-" db:"network_correlation_key"`
ExpiresAt time.Time `json:"expiresAt" db:"expires_at"`
}
func (GameAccessAttempt) TableName() string { return "game_access_attempts" }
type GameSecuritySignal struct {
ID string `json:"id" db:"id"`
ServerInstanceID string `json:"serverInstanceId" db:"server_instance_id"`
GamePlayerRecordID string `json:"gamePlayerRecordId" db:"game_player_record_id"`
RuleKey string `json:"ruleKey" db:"rule_key"`
Status string `json:"status" db:"status"`
EvidenceCount int `json:"evidenceCount" db:"evidence_count"`
Summary string `json:"summary" db:"summary"`
FirstObservedAt time.Time `json:"firstObservedAt" db:"first_observed_at"`
LastObservedAt time.Time `json:"lastObservedAt" db:"last_observed_at"`
ExpiresAt time.Time `json:"expiresAt" db:"expires_at"`
}
func (GameSecuritySignal) TableName() string { return "game_security_signals" }