package dto import ( "browser.local/platform/domain" "time" ) type GamePlayerResponse struct { ID string `json:"id"` ServerInstanceID string `json:"serverInstanceId"` GamePlayerID string `json:"gamePlayerId"` DisplayName string `json:"displayName"` FirstSeenAt time.Time `json:"firstSeenAt"` LastSeenAt time.Time `json:"lastSeenAt"` } type GamePlayerAliasResponse struct { Alias string `json:"alias"` FirstSeenAt time.Time `json:"firstSeenAt"` LastSeenAt time.Time `json:"lastSeenAt"` } type GamePlayerSessionResponse struct { ID string `json:"id"` SourceSessionID string `json:"sourceSessionId"` StartedAt time.Time `json:"startedAt"` EndedAt time.Time `json:"endedAt,omitempty"` EndReason string `json:"endReason,omitempty"` } type GameAccessAttemptResponse struct { ID string `json:"id"` OccurredAt time.Time `json:"occurredAt"` Outcome string `json:"outcome"` Reason string `json:"reason"` } type GameSecuritySignalResponse struct { ID string `json:"id"` RuleKey string `json:"ruleKey"` Status string `json:"status"` EvidenceCount int `json:"evidenceCount"` Summary string `json:"summary"` FirstObservedAt time.Time `json:"firstObservedAt"` LastObservedAt time.Time `json:"lastObservedAt"` } type GamePlayerProfileResponse struct { Player GamePlayerResponse `json:"player"` Aliases []GamePlayerAliasResponse `json:"aliases"` Sessions []GamePlayerSessionResponse `json:"sessions"` AccessAttempts []GameAccessAttemptResponse `json:"accessAttempts"` SecuritySignals []GameSecuritySignalResponse `json:"securitySignals"` } type GamePlayerListResponse struct { Items []GamePlayerResponse `json:"items"` } func GamePlayersFromDomain(values []domain.GamePlayer) []GamePlayerResponse { out := make([]GamePlayerResponse, len(values)) for i, v := range values { out[i] = gamePlayerFromDomain(v) } return out } func GamePlayerListFromDomain(values []domain.GamePlayer) GamePlayerListResponse { return GamePlayerListResponse{Items: GamePlayersFromDomain(values)} } func GamePlayerProfileFromDomain(v domain.GamePlayerProfile) GamePlayerProfileResponse { out := GamePlayerProfileResponse{Player: gamePlayerFromDomain(v.Player), Aliases: make([]GamePlayerAliasResponse, len(v.Aliases)), Sessions: make([]GamePlayerSessionResponse, len(v.Sessions)), AccessAttempts: make([]GameAccessAttemptResponse, len(v.AccessAttempts)), SecuritySignals: make([]GameSecuritySignalResponse, len(v.SecuritySignals))} for i, x := range v.Aliases { out.Aliases[i] = GamePlayerAliasResponse{Alias: x.Alias, FirstSeenAt: x.FirstSeenAt, LastSeenAt: x.LastSeenAt} } for i, x := range v.Sessions { out.Sessions[i] = GamePlayerSessionResponse{ID: x.ID, SourceSessionID: x.SourceSessionID, StartedAt: x.StartedAt, EndedAt: x.EndedAt, EndReason: x.EndReason} } for i, x := range v.AccessAttempts { out.AccessAttempts[i] = GameAccessAttemptResponse{ID: x.ID, OccurredAt: x.OccurredAt, Outcome: x.Outcome, Reason: x.Reason} } for i, x := range v.SecuritySignals { out.SecuritySignals[i] = GameSecuritySignalResponse{ID: x.ID, RuleKey: x.RuleKey, Status: string(x.Status), EvidenceCount: x.EvidenceCount, Summary: x.Summary, FirstObservedAt: x.FirstObservedAt, LastObservedAt: x.LastObservedAt} } return out } func gamePlayerFromDomain(v domain.GamePlayer) GamePlayerResponse { return GamePlayerResponse{ID: v.ID, ServerInstanceID: v.ServerInstanceID, GamePlayerID: v.GamePlayerID, DisplayName: v.DisplayName, FirstSeenAt: v.FirstSeenAt, LastSeenAt: v.LastSeenAt} }