Real /load/index captures ship mission_meta.mission_change_time as a "yyyy-MM-dd HH:mm:ss" string (see FriendService.DefaultMissionChangeTime for the canonical game format) but ImportViewerRequest typed it as long? Unix seconds. The FromUnixTimeSeconds branch had never been reachable with a real capture, and any loader dump carrying mission_meta 400d the whole request. Change the DTO field to string? and parse in the controller with DateTime.TryParseExact + invariant culture (AssumeUniversal | AdjustToUniversal); unparseable values skip cleanly instead of poisoning the whole viewer import. Also fix is_received_two_pick_mission: DTO's JsonPropertyName was has_received_pick_two_mission (never matched the wire key), and the wire ships "1" /"0" strings not booleans. Rename to the actual wire key, retype to int?, controller normalizes `hrptm != 0` before assigning to the bool DB property. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
6.1 KiB
6.1 KiB