70 lines
3.6 KiB
Go
70 lines
3.6 KiB
Go
package dto
|
|
|
|
import (
|
|
"browser.local/platform/domain"
|
|
"time"
|
|
)
|
|
|
|
type GameMapTrajectoryPointResponse struct {
|
|
MapX float64 `json:"mapX"`
|
|
MapY float64 `json:"mapY"`
|
|
OccurredAt time.Time `json:"occurredAt"`
|
|
CollectedAt time.Time `json:"collectedAt"`
|
|
Source string `json:"source"`
|
|
}
|
|
type GameMapTrajectoryEntityResponse struct {
|
|
Kind string `json:"kind"`
|
|
EntityID string `json:"entityId"`
|
|
GamePlayerRecordID string `json:"gamePlayerRecordId,omitempty"`
|
|
Label string `json:"label"`
|
|
Points []GameMapTrajectoryPointResponse `json:"points"`
|
|
CollectedAt time.Time `json:"collectedAt,omitempty"`
|
|
Sources []string `json:"sources"`
|
|
}
|
|
type GameMapTrajectorySegmentResponse struct {
|
|
GamePlayerRecordID string `json:"gamePlayerRecordId"`
|
|
VehicleID string `json:"vehicleId"`
|
|
StartedAt time.Time `json:"startedAt"`
|
|
EndedAt time.Time `json:"endedAt,omitempty"`
|
|
}
|
|
type GameMapTrajectoryMapResponse struct {
|
|
MapID string `json:"mapId"`
|
|
MapVersion string `json:"mapVersion"`
|
|
ImageWidth float64 `json:"imageWidth"`
|
|
ImageHeight float64 `json:"imageHeight"`
|
|
Precision float64 `json:"precision"`
|
|
}
|
|
type GameMapTrajectoryResponse struct {
|
|
Status string `json:"status"`
|
|
Reason string `json:"reason,omitempty"`
|
|
Map *GameMapTrajectoryMapResponse `json:"map,omitempty"`
|
|
From time.Time `json:"from,omitempty"`
|
|
To time.Time `json:"to,omitempty"`
|
|
Players []GameMapTrajectoryEntityResponse `json:"players"`
|
|
Vehicles []GameMapTrajectoryEntityResponse `json:"vehicles"`
|
|
RideSegments []GameMapTrajectorySegmentResponse `json:"rideSegments"`
|
|
}
|
|
|
|
func GameMapTrajectoryFromDomain(value domain.GameMapTrajectoryView) GameMapTrajectoryResponse {
|
|
value = domain.CopyGameMapTrajectoryView(value)
|
|
response := GameMapTrajectoryResponse{Status: value.Status, Reason: value.Reason, From: value.From, To: value.To, Players: mapTrajectoryEntitiesFromDomain(value.Players), Vehicles: mapTrajectoryEntitiesFromDomain(value.Vehicles), RideSegments: make([]GameMapTrajectorySegmentResponse, len(value.RideSegments))}
|
|
if value.Status != "missing-map" {
|
|
response.Map = &GameMapTrajectoryMapResponse{MapID: value.Map.MapID, MapVersion: value.Map.MapVersion, ImageWidth: value.Map.ImageWidth, ImageHeight: value.Map.ImageHeight, Precision: value.Map.Precision}
|
|
}
|
|
for i, segment := range value.RideSegments {
|
|
response.RideSegments[i] = GameMapTrajectorySegmentResponse{GamePlayerRecordID: segment.GamePlayerRecordID, VehicleID: segment.VehicleID, StartedAt: segment.StartedAt, EndedAt: segment.EndedAt}
|
|
}
|
|
return response
|
|
}
|
|
func mapTrajectoryEntitiesFromDomain(values []domain.GameMapTrajectoryEntity) []GameMapTrajectoryEntityResponse {
|
|
result := make([]GameMapTrajectoryEntityResponse, len(values))
|
|
for i, value := range values {
|
|
points := make([]GameMapTrajectoryPointResponse, len(value.Points))
|
|
for j, point := range value.Points {
|
|
points[j] = GameMapTrajectoryPointResponse{MapX: point.MapX, MapY: point.MapY, OccurredAt: point.OccurredAt, CollectedAt: point.CollectedAt, Source: point.Source}
|
|
}
|
|
result[i] = GameMapTrajectoryEntityResponse{Kind: string(value.Kind), EntityID: value.EntityID, GamePlayerRecordID: value.GamePlayerRecordID, Label: value.Label, Points: points, CollectedAt: value.CollectedAt, Sources: domain.CopyStringSlice(value.Sources)}
|
|
}
|
|
return result
|
|
}
|